2010-11-20 12 views
1

Ich versuche Symbole von Adressen zu bekommen ich von meinem Stack bekam, aber SymFromAddr hält mit einem Systemfehler 126 Fehler (Das angegebene Modul konnte nicht gefunden werden.)
ich das Symbolisieren Sache mitSymFromAddr gibt "Das angegebene Modul wurde nicht gefunden."

Initialisierung
SymInitialize(m_processHandle, NULL, TRUE); 

(der letzte Parameter == true ==> Es lädt die automatisch PDB)

und ich verwende SymFromAddr wie folgt aus:

SYMBOL_INFO_PACKAGE sym = { sizeof(sym) }; 
sym.si.MaxNameLen = MAX_SYM_NAME; 
DWORD64 displacement = 0; 
bool ok = SymFromAddr(m_processHandle, address, &displacement, &sym.si); 

der Code in C++ unter Windows. und die PDB-Datei ist im Verzeichnis der EXE! Was mache ich falsch? danke :)

+0

Es sollte sizeof sein (SYMBOL_INFO) anstelle von sizeof (sym); nicht sicher, ob das den Fehler verursacht. Sie könnten Process Monitor verwenden, um zu sehen, ob es am erwarteten Ort aussieht oder nicht. – Luke

+0

was? Wie kann ich Process Monitor dazu verwenden? :) – Idov

+0

Sie können überprüfen, ob die PDB-Datei vom richtigen Speicherort geladen wird. – Luke

Antwort

0

SymFromAddr ist ein wenig launisch.

  1. Wenn LoadLibrary zwischen SymInitialize und SymFromAddr auftritt, funktioniert es möglicherweise nicht. Wenn SymFromAddr können Sie eine SymInitialize wieder (Tipp: Sie Adress-Cache kann eine Menge SymInitialize zu vermeiden, die eine große CPU consummer ist) perfom
  2. 64 Bit Implementierung von SymFromAddr (. Dh SymFromAddr64) funktioniert besser
  3. Wenn Code nicht ist optimiert es funktioniert besser
  4. VC9 generiert pdb funktioniert besser als ältere Version.

Sie können eine Vorstellung im folgenden Code finden http://code.google.com/p/nprof/source/browse/0.11/Hook/StackWalker.cpp?r=281

Verwandte Themen