Dela via


Symbolinläsning

Symbolhanteraren läser in symboler när du anropar funktionen SymInitialize med parametern fInvadeProcess inställd på TRUE eller när du anropar funktionen SymLoadModuleEx för att ange en modul. I båda fallen läser symbolhanteraren antingen in symbolerna eller skjuter upp inläsningen av dem tills symboler begärs, beroende på vilka alternativ som anges av funktionen SymSetOptions.

Symbolhanteraren kan användas för att hämta symbolisk information för valfri modul. Det behöver inte associeras med en process som anges i SymInitialize-anropet. Om du vill använda en godtycklig modul anger du den fullständiga sökvägen till modulbilden i parametern ImageName. Du kan använda en sökväg till valfri körbar modul med felsökningsinformation (.exe, .dll, .drv, .sys, .scr, .cpleller .com). Använd parametern BaseOfDll för att ange en belastningsadress. Symboladresserna baseras sedan på den adressen.

Det kanske inte är nödvändigt att hålla en symbolmodul inläst under programmets varaktighet. Om du vill frigöra symbolmodulen från symbolhanterarens lista över moduler använder du funktionen SymUnloadModule64. Den här funktionen frigör det minne som allokerats för symbolmodulen. Om du vill använda symboler för modulen igen måste du anropa funktionen SymLoadModuleEx även om alternativet för uppskjuten inläsning har angetts.

Diagnos av problem med symbolinläsning

Om du vill visa alla försök att läsa in symboler anropar du SymSetOptions med SYMOPT_DEBUG. Detta gör att DbgHelp anropar funktionen OutputDebugString med detaljerad information om symbolsökningar, till exempel de kataloger som den söker efter och felmeddelanden. Om koden använder SymRegisterCallback64anropar DbgHelp återanropsfunktionen i stället för att anropa OutputDebugString. Parametern ActionCode är inställd på CBA_DEBUG_INFO och parametern CallbackData är en sträng som kan visas.

Om du vill att felsökningsutdata ska visas i konsolen utan att du ändrar källkoden anger du DBGHELP_DBGOUT miljövariabeln till ett null-värde som inte null innan du anropar funktionen SymInitialize. Om du vill logga informationen till en fil anger du miljövariabeln DBGHELP_LOG till namnet på loggfilen som ska användas.

Observera att dessa funktioner endast ska användas när det behövs. De kan göra symbolinläsningen långsammare för moduler som innehåller många symboler.