Laden von Symbolen
Der Symbolhandler lädt Symbole, wenn Sie die Funktion SymInitialize aufrufen, wobei der Parameter fInvadeProcess auf TRUE festgelegt ist, oder wenn Sie die Funktion SymLoadModuleEx aufrufen, um ein Modul anzugeben. In beiden Fällen lädt der Symbolhandler entweder die Symbole oder verschiebt das Laden von Symbolen, bis Symbole angefordert werden, abhängig von den von der Funktion SymSetOptions festgelegten Optionen.
Der Symbolhandler kann verwendet werden, um symbolische Informationen für jedes Modul abzurufen. Er muss keinem Prozess zugeordnet werden, der im Aufruf SymInitialize angegeben ist. Um ein beliebiges Modul zu verwenden, geben Sie den vollständigen Pfad zum Modulimage im Parameter ImageName an. Sie können einen Pfad zu jedem ausführbaren Modul verwenden, das Debuginformationen enthält (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Verwenden Sie den Parameter BaseOfDll, um eine beliebige Ladeadresse anzugeben. Dann basieren Symboladressen auf dieser Adresse.
Möglicherweise ist es nicht erforderlich, ein Symbolmodul während der Dauer einer Anwendung zu laden. Verwenden Sie die Funktion SymUnloadModule64, um das Symbolmodul aus der Liste der Module des Symbolhandlers freizugeben. Diese Funktion gibt den für das Symbolmodul zugewiesenen Speicher frei. Um Symbole für dieses Modul erneut zu verwenden, müssen Sie die Funktion SymLoadModuleEx aufrufen, auch wenn die Option Symbol verzögertes Laden festgelegt ist.
Diagnostizieren von Symbolladeproblemen
Um alle Versuche zum Laden von Symbolen anzuzeigen, rufen Sie SymSetOptions mit SYMOPT_DEBUG auf. Dies bewirkt, dass DbgHelp die Funktion OutputDebugString mit detaillierten Informationen zu Symbolsuchen aufruft, z. B. die Verzeichnisse, die gesucht werden, und Fehlermeldungen. Wenn Ihr Code SymRegisterCallback64 verwendet, ruft DbgHelp Ihre Rückruffunktion auf, anstatt OutputDebugString aufzurufen. Der Parameter ActionCode ist auf CBA_DEBUG_INFO festgelegt, und der Parameter CallbackData ist eine Zeichenfolge, die angezeigt werden kann.
Damit diese Debugausgabe ohne Änderung des Quellcodes in der Konsole angezeigt werden kann, legen Sie die DBGHELP_DBGOUT Umgebungsvariable auf einen Wert ohne NULL fest, bevor Sie die Funktion SymInitialize aufrufen. Um die Informationen in einer Datei zu protokollieren, legen Sie die Umgebungsvariable DBGHELP_LOG auf den Namen der zu verwendenden Protokolldatei fest.
Beachten Sie, dass diese Features nur bei Bedarf verwendet werden sollten. Sie können das Laden von Symbolen von Modulen verlangsamen, die viele Symbole enthalten.