Cómo configurar símbolos en WinDbg?

Estoy usando herramientas de depuración para Windows y aparece el siguiente mensaje de error al iniciar WinDbg / cdb o ntsd:

Symbol search path is: *** Invalid *** **************************************************************************** * Symbol loading may be unreliable without a symbol search path. * * Use .symfix to have the debugger choose a symbol path. * * After setting your symbol path, use .reload to refresh symbol locations. * **************************************************************************** 

Al ejecutar comandos arbitrarios, también recibo el mensaje de error

 *** ERROR: Module load completed but symbols could not be loaded for . 

Y lo siguiente parece estar relacionado:

 ********************************************************************* * Symbols can not be loaded because symbol path is not initialized. * * * * The Symbol Path can be set by: * * using the _NT_SYMBOL_PATH environment variable. * * using the -y  argument when starting the debugger. * * using .sympath and .sympath+ * ********************************************************************* 

En un !analyze -v también he visto

 DEFAULT_BUCKET_ID: WRONG_SYMBOLS 

y

 ************************************************************************* *** *** *** Either you specified an unqualified symbol, or your debugger *** *** doesn't have full symbol information. Unqualified symbol *** *** resolution is turned off by default. Please either specify a *** *** fully qualified symbol module!symbolname, or enable resolution *** *** of unqualified symbols by typing ".symopt- 100". Note that *** *** enabling unqualified symbol resolution with network symbol *** *** server shares in the symbol path may cause the debugger to *** *** appear to hang for long periods of time when an incorrect *** *** symbol name is typed or the network symbol server is down. *** *** *** *** For some commands to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** ************************************************************************* 

¿Cómo configuro WinDbg para encontrar los símbolos?

Descargo de responsabilidad: Esta es una pregunta canónica para todas las publicaciones de símbolos incorrectos en windbg .

Los símbolos se pueden configurar correctamente de varias maneras diferentes.

ADVERTENCIA : Los ejemplos aquí usan \\server\symbols que generalmente es un almacenamiento de red que no está disponible. Adáptelo a su servidor local o deje esa parte completamente si no tiene uno. Un servidor inexistente puede causar retrasos, etc.

Versión TLDR para el 80% de los casos

Cree una nueva carpeta c:\symbols para símbolos proporcionados por Microsoft. Luego escribe

 .symfix+ c:\symbols .reload 

(o reload -f si es necesario)

Asegúrese de tener una conexión a Internet, ya que se comunicará con algunos servidores de Microsoft y descargará símbolos desde allí.

En el 80 +% de los casos, esto ya podría resolver el problema de los símbolos. Si no, sigue leyendo.

Corregir símbolos por comandos

WinDbg buscará símbolos en el orden en que aparecen en la ruta del símbolo. Por lo tanto, es una buena idea colocar primero los símbolos locales, luego compartir la red local de la compañía y luego descargar símbolos de Internet y almacenar una copia localmente.

 .sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files .sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything .sympath+ \\server\symbols ; *** Symbols provided from a network share .symfix+ c:\symbols ; *** Microsoft symbols 

Reparando símbolos por menú

En WinDbg (pero no en los equivalentes de línea de comando) puede establecer una ruta de símbolo por File/Symbol File Path... o presionando Ctrl + S. Usted lo ingresa en el siguiente formato

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

Reparando símbolos por línea de comando

WinDbg también toma el modificador de línea de comando -y si prefiere tener diferentes enlaces de escritorio con diferentes configuraciones de ruta de símbolo.

 WinDbg -y "" 

Tenga en cuenta que necesita la ruta completa aquí, que está en una forma como

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

Corrección de símbolos por variable de entorno

Hay una variable de entorno llamada _NT_SYMBOL_PATH que también se puede establecer en una ruta de símbolo. Use la siguiente syntax:

 c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

Tenga en cuenta que no solo WinDbg evalúa esta variable, sino también Visual Studio, Process Explorer, Process Monitor y, potencialmente, otro software. Puede experimentar un impacto en el rendimiento estableciendo esta variable de entorno.

Guardar la ruta del símbolo como parte de un espacio de trabajo

Si tiene una configuración de símbolos bastante compleja que incluye varias rutas, familiarícese con el concepto de espacios de trabajo de WinDbg .

Los espacios de trabajo le permiten guardar la ruta del símbolo para que no tenga que volver a escribir todos los comandos en cada sesión de depuración.

Una vez que esté satisfecho con el espacio de trabajo, cree un enlace para que WinDbg incluya -Q que significa “Suprimir el molesto” ¿Guardar espacio de trabajo? “Pregunta”.

Hasta el momento estoy muy feliz de haber guardado los símbolos como parte del espacio Base trabajo Base .

Símbolos diferidos

Los símbolos diferidos (indicados como tales durante un comando lm ) no son un problema. WinDbg los cargará cuando sea necesario. Para forzar la carga de todos ellos, escriba

 ld* 

Problemas con el símbolo de depuración

Si los símbolos (PDB) no funcionan como se esperaba, utilice el

 !sym noisy 

para obtener más información sobre lo que WinDbg está haciendo exactamente al resolver símbolos.

Cuando encuentre la solución, apáguela con

 !sym quiet 

Para verificar la exactitud de los símbolos individuales, puede usar la herramienta symchk que viene con WinDbg.

 Symchk /if  /s  /av /od /pf /if = input is a file /s = symbol file path /od = all details /av = verify /pf = check if private symbols are available 

o adquiere ChkMatch, que es un poco más fácil de usar

 ChkMatch -c   

Si tiene problemas para acceder a los símbolos desde una red compartida, asegúrese de haber iniciado sesión en la red compartida anteriormente. AFAIR, WinDbg no solicita credenciales.

Documentación oficial

Utilice el servidor de símbolos de Microsoft para obtener archivos de símbolos de depuración (debe redireccionar aquí pero la redirección está actualmente rota)

Ruta del símbolo para los depuradores de Windows

    Intereting Posts