Udostępnij przez


Ładowanie symboli

Procedura obsługi symboli załaduje symbole po wywołaniu funkcji SymInitialize z parametrem fInvadeProcess ustawionym na TRUE lub podczas wywoływania funkcji SymLoadModuleEx w celu określenia modułu. W obu przypadkach program obsługi symboli ładuje symbole lub odkłada ładowanie symboli do momentu żądania, w zależności od opcji ustawionych przez funkcję SymSetOptions.

Program obsługi symboli może służyć do pobierania informacji symbolicznych dla dowolnego modułu; nie musi być skojarzony z procesem określonym w wywołaniu SymInitialize. Aby użyć dowolnego modułu, określ pełną ścieżkę do obrazu modułu w parametrze ImageName. Możesz użyć ścieżki do dowolnego modułu wykonywalnego z informacjami debugowania (.exe, .dll, .drv, .sys, scr, .cpllub .com). Użyj parametru BaseOfDll, aby określić dowolny adres ładowania, a następnie adresy symboli będą oparte na tym adresie.

Może nie być konieczne, aby moduł symboli był ładowany przez czas trwania aplikacji. Aby zwolnić moduł symboli z listy modułów programu obsługi symboli, użyj funkcji SymUnloadModule64. Ta funkcja zwalnia pamięć przydzieloną dla modułu symboli. Aby ponownie użyć symboli dla tego modułu, należy wywołać funkcję SymLoadModuleEx, nawet jeśli ustawiono opcję odroczonego ładowania symbolu.

Diagnozowanie problemów z ładowaniem symboli

Aby wyświetlić wszystkie próby załadowania symboli, wywołaj SymSetOptions za pomocą SYMOPT_DEBUG. Powoduje to, że DbgHelp wywołuje funkcję OutputDebugString, przekazując szczegółowe informacje dotyczące wyszukiwania symboli, takie jak katalogi, które są przeszukiwane, oraz komunikaty o błędach. Jeśli kod używa SymRegisterCallback64, dbgHelp wywoła funkcję wywołania zwrotnego zamiast wywoływać OutputDebugString. Parametr ActionCode jest ustawiony na CBA_DEBUG_INFO, a parametr CallbackData jest ciągiem, który można wyświetlić.

Aby umożliwić wyświetlanie tych danych wyjściowych debugowania w konsoli bez zmiany kodu źródłowego, ustaw zmienną środowiskową DBGHELP_DBGOUT na wartość null inną niżnull przed wywołaniem funkcji SymInitialize. Aby zarejestrować informacje w pliku, ustaw zmienną środowiskową DBGHELP_LOG na nazwę używanego pliku dziennika.

Należy pamiętać, że te funkcje powinny być używane tylko w razie potrzeby. Mogą spowolnić ładowanie symboli modułów zawierających wiele symboli.