c# - SOS no es compatible con la arquitectura de destino actual
.net-4.0 windbg (4)
Como ya han dicho otros, esto puede deberse a una aplicación de 64 bits (como el Administrador de tareas predeterminado, por ejemplo) creando un archivo de volcado de un proceso de 32 bits.
Pude resolver el problema usando la extensión soswow64 WinDbg de poizan42 en GitHub . Lo he encontrado a través de esta entrada de blog , que también proporciona información más detallada sobre el problema.
Estoy tratando de usar windbg para investigar un archivo de volcado de cuelgue creado en una máquina x64 para nuestro proceso x86. Esta es una aplicación 4.0 x86, así que solo para obtener una pila no administrada, tuve que hacer lo siguiente:
.loadby sos clr
.load wow64exts
!sw
kL
Sin embargo, cada vez que trato de obtener la pila administrada a través de !clrstack
obtengo el error en el título. ¿Qué me estoy perdiendo?
Creo que tendrá que usar el administrador de tareas de 32 bits, ubicado en C: / Windows / SysWOW64 / taskmgr.exe para obtener un volcado de 32 bits.
Más información aquí: http://blogs.msdn.com/b/tess/archive/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine.aspx
Hay una opción más que me funcionó: - Tuve un volcado de un proceso de 64 bits. - Entonces, primero, necesitaba SOS.dll y mscordacwks.dll de la máquina (C: / Windows / Microsoft.NET / Framework64 / v4.0.30319) donde se tomó el volcado. - Basado en dos artículos de MSDN ( http://msdn.microsoft.com/en-gb/library/windows/hardware/ff562263%28v=vs.85%29.aspx , http://msdn.microsoft.com/en-gb/library/windows/hardware/ff540665%28v=vs.85%29.aspx ), http://msdn.microsoft.com/en-gb/library/windows/hardware/ff540665%28v=vs.85%29.aspx CLR de esta manera:
.cordll -u -ve -I clr -lp <path to SOS.dll & mscordacwks.dll>
Después de esto,! Hilos trabajados. Creo que, lo mismo debería aplicarse a los volcados de memoria de 32 bits.
Siempre he seguido la recomendación de la coincidencia de bits pero nunca supe exactamente por qué hasta que encontré este artículo: http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx que establece:
"El DAC tiene una interfaz estandarizada y es utilizado por el depurador para obtener información sobre el estado de esas abstracciones, por ejemplo, el montón administrado. Es esencial usar el DAC que coincida con la versión CLR y la arquitectura del proceso o falla volcado que desea inspeccionar ".
Y
"Tenga en cuenta que la DAC es una DLL nativa y debe cargarse en el programa que usa ClrMD. Si el volcado o el proceso en vivo es de 32 bits, debe usar la versión de 32 bits de la DAC, que a su vez, significa que su programa de inspección también debe ser de 32 bits. Lo mismo se aplica a los procesos de 64 bits. Asegúrese de que la plataforma de su programa coincida con lo que está depurando ".