windbg - tutorial - Formato_NT_SYMBOL_PATH
windbg windows 10 x64 (2)
Aquí hay una publicación detallada sobre problemas de depuración con la carga de símbolos.
Estoy intentando usar Windbg más y sigo teniendo problemas con el caché de símbolos. No me queda claro cuál es el formato de la cadena.
Tengo algunos requisitos:
- use el servidor de Microsoft http://msdl.microsoft.com/download/symbols
- use símbolos de nuestro software que están archivados en // foo / Build1234
- usar un caché local en c: / dev / symbols
El archivo de símbolos de nuestra compilación distribuida en // foo / Build1234 no está organizado como un servidor de símbolos. Si lo entiendo correctamente, necesito usar la palabra clave caché.
Teniendo en cuenta estos requisitos, ¿parece esto un srvpath con el formato correcto?
cache*//foo/Build1234;srv*c:/dev/symbols*http://msdl.microsoft.com/download/symbols
Editar:
Acabo de comenzar a leer la depuración avanzada de Windows y me había malinterpretado cómo funciona la palabra clave de caché. Pensé que era una forma de decirle al depurador que la carpeta es solo una carpeta de archivos y no un servidor de símbolos. Después de que Michael dejó su comentario, vuelvo a leer la sección y veo que efectivamente funciona como lo describió Michael.
Ahora estoy confundido por cuando usas un; o un * para separar rutas / URLs. Y cuando necesites el prefijo srv *. En la ayuda en línea para windbg dan este ejemplo:
//someshare/that/cachestar/ignores;srv*c:/mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:/mysymbols;//anothershare/that/gets/cached
Los símbolos de // someshare no se almacenan en caché, los símbolos de Microsoft se almacenan en c: / mysymbols, y c: / mysymbols se usa como caché para cualquier otra ruta a la derecha de la directiva de caché *.
El uso ocasional de srv * me confunde: no entiendo por qué la primera y la última ruta no tienen el prefijo srv *.
Edición 2:
Esto está empezando a tener sentido lentamente para mí. La directiva srv se usa para servidores de símbolos, y no para directorios de símbolos normales. Entonces, creo que la respuesta a mi pregunta original es esta:
//foo/Build1234;cache*c:/dev/symbols;srv*http://msdl.microsoft.com/download/symbols
SRV*C:/dev/symbols*http://msdl.microsoft.com/download/symbols;//foo/build1234
Debería funcionar bien, si //foo/build1234
es simplemente un PDB plano. El caché no es necesario aquí; solo necesita agregar el directorio a la ruta de su símbolo.
La palabra clave de caché especifica dónde desea almacenar en caché sus archivos de símbolos, y es útil para almacenar símbolos en caché localmente desde //foo/build1234
compartidos no indexados (como //foo/build1234
)
cache*C:/dev/symbols;SRV*C:/dev/symbols*http://msdl.microsoft.com/download/symbols;//foo/build1234
La ruta anterior almacenaría los símbolos del servidor de símbolos de MS y su símbolo compartido a su máquina local en C: / dev / symbols.
Para depurar problemas de símbolos usando windbg, haz
!sym noisy
.reload <some exe or DLL in your session>
Y luego realice alguna acción que obligue a cargar el PDB. Verá dónde windbg está buscando archivos, y si rechaza un PDB por qué lo hizo.
!sym quiet
Entonces suprimirá las indicaciones de símbolos.