public void WaitForSymbolsLoaded() { var needReload = true; var oldModuleList = _moduleList; _moduleList = ASymbolLoaderThread.GetModuleList(Process.Native.Id); if (oldModuleList.Length > 0 && oldModuleList.Length == _moduleList.Length) { needReload = false; for (var i = 0; i < oldModuleList.Length; i++) { var nameChanged = oldModuleList[i].ModuleName != _moduleList[i].ModuleName; var addressChanged = oldModuleList[i].BaseAddress != _moduleList[i].BaseAddress; needReload = nameChanged || addressChanged; if (needReload) { break; } } } if (needReload | SymbolList.Length == 0) { lock (SymbolLock) { _symbolLoaderThread = new ASymbolLoaderThread(); _symbolLoaderThread.Process = Process; _symbolLoaderThread.Execute(); while (_symbolLoaderThread.IsLoading) { Thread.Sleep(10); } SymbolList.Assign(_symbolLoaderThread.SymbolList.TakeAll()); } } }
public ASymbolHandler() { Process = null; _symbolLoaderThread = null; SymbolList = new UArrayManager <ASymbol>(); UserDefinedSymbols = new UArrayManager <AUserDefinedSymbol>(); _moduleList = new AModuleInfoArray(); ShowSymbols = false; ShowModules = false; ShowSections = false; }