Tengo un montón de minivolcados que se grabaron durante el tiempo de ejecución de una aplicación a través de MiniDumpWriteDump. Los minivolcados se crearon en una máquina con una versión de sistema operativo diferente a la de mi máquina de desarrollo.¿Cómo extraer los rastros de pila de minivolcados?
Ahora estoy tratando de escribir un programa para extraer los rastros de pila de los minivolcados, usando dbghelp.dll. Estoy caminando MINIDUMP_MODULE_LIST y llamo a SymLoadModule64, pero esto no puede descargar los pdbs (kernel32, etc.) del servidor público de símbolos. Si agrego "C: \ Windows \ System32" a la ruta del símbolo, encuentra los dlls y descarga los símbolos, pero por supuesto no coinciden con los dlls del minivolcado, por lo que los resultados son inútiles.
Entonces, ¿cómo le digo a dbghelp.dll que descargue y use los pdbs adecuados?
[editar]
me olvidó decir que SymLoadModule64 sólo toma un nombre de archivo y hay información de versión/suma de control, por lo que, obviamente, con SymLoadModule64 solos es imposible que dbghelp averiguar qué pdb para descargar.
La información está realmente disponible en MINIDUMP_MODULE_LIST, pero no sé cómo devolverla a la API de dbghelp.
Hay SymLoadModuleEx que toma parámetros adicionales, pero no tengo idea si eso es lo que necesito o lo que debería pasar para los parámetros adicionales.
[editar]
No hubo suerte hasta ahora, aunque me he dado cuenta de que hay también Dbgeng.dll distribuye junto con dbghelp.dll en el SDK de depuración. MSDN se ve bastante bien documentado y dice que es el mismo motor que usa windbg. Tal vez pueda usar eso para extraer los rastros de la pila.
Si alguien puede indicarme alguna introducción al uso de dbgeng.dll para procesar minivolcados que probablemente también ayude, MSDN documenta solo los componentes individuales pero no cómo funcionan juntos.
Posiblemente haya hecho que su minivolcado sea demasiado pequeño. Tinker con el argumento DumpType. Asegúrese de que la lista Debug + Windows + Modules muestre la ruta exacta de la DLL, la versión y las marcas de tiempo. –
No, eso no es un problema, puedo cargar los minivolcados en WinDbg muy bien y descarga los PDB correctamente. Es solo que quiero automatizar la recuperación de la pila en lugar de inspeccionar los volcados manualmente en WinDbg. – Zarat
Si quieres ir a la ruta truco, sólo podría transmitir órdenes a ntsd y capturar la salida –