符號載入

當您呼叫 SymInitialize 函式,並將 fInvadeProcess 參數設定為 TRUE,或呼叫 SymLoadModuleEx 函式來指定模組時,符號處理程式將會載入符號。 在任一情況下,符號處理程式會根據 SymSetOptions 函式所設定的選項,載入符號或延遲符號載入,直到要求符號為止。

符號處理程式可用來擷取任何模組的符號資訊;它不需要與 SymInitialize 呼叫中指定的進程相關聯。 若要使用任意模組,請在 ImageName 參數中指定模組映像的完整路徑。 您可以使用具有偵錯資訊的任何可執行模組路徑(.exe、.dll、.drv、.sys、.scr、.cpl或.com)。 使用BaseOfDll參數來指定任何載入位址,然後符號位址會以該位址為基礎。

可能不需要讓符號模組在應用程式期間內載入。 若要從符號處理程式的模組清單中釋放符號模組,請使用 SymUnloadModule64 函式。 此函式會釋放配置給符號模組的記憶體。 若要再次使用該模組的符號,即使您已設定符號延後載入選項,您也必須呼叫 SymLoadModuleEx 函式。

診斷符號載入問題

若要檢視載入符號的所有嘗試,請使用 SYMOPT_DEBUG呼叫 SymSetOptions 這會導致 DbgHelp 呼叫 OutputDebugString 函式,其中包含符號搜尋的詳細資訊,例如所搜尋的目錄和錯誤訊息。 如果您的程式代碼使用 SymRegisterCallback64,DbgHelp 會呼叫回呼函式,而不是呼叫 OutputDebugStringActionCode 參數會設定為 CBA_DEBUG_INFO,而 CallbackData 參數是可以顯示的字串。

若要在不變更原始碼的情況下,將此偵錯輸出顯示到控制台,請在呼叫 SymInitialize 函式之前,將DBGHELP_DBGOUT環境變數設定為非 NULL 值。 若要將資訊記錄到檔案,請將DBGHELP_LOG環境變數設定為要使用的記錄檔名稱。

請注意,這些功能只有在需要時才使用。 它們可能會減緩包含許多符號之模組的符號載入速度。