9/10/2009 18:00
El Bruno
[VS2008] Depurando Visual Studio con el propio Visual Studio (depurarse a uno mismo, es una actividad de autorecursividad)

Buenas,
dicen que “si duermes con niños, amaneces mojado”; y que “si juegas con fuego, te quemas”; asi que le dejo a algún iluminado la tarea de terminar la frase: “si depuras Visual Studio con Visual Studio, …” Esta tarea que no es de las más comunes, suele ser necesaria cuando le metes mano a extensiones de Visual Studio, o cuando VS comienza a fallar y no sabes porqué; asi que como me lo se de memoria pero siempre me olvido voy a dejar los pasos necesarios para depurar VS, como un recordatorio de lo feliz que puede ser la vida.
He aquí el paso a paso
Tutorial
1. Lo primero que necesitamos es tener la instancia de Visual Studio (VS1) que queremos depurar y abrir una nueva instancia de Visual Studio (VS2) para depurar a VS1.
2. Luego desde VS2 nos “attachamos” al proceso devenv.exe (VS1) desde el menú Debug//Attach to Process. Dato, si no has abierto un proyecto el menú es Tools//Attach to Process
3. Una vez en proceso veremos un mensaje que nos dice
Debugging information for ‘devenv.exe’ cannot be found or does not match. Symbols not loaded. Do you want to continue debugging?”.
Debemos seguir, es decir presionar [Yes]; y ya estaremos trabajando sobre el proceso de VS1
4. En la instancia a depurar, podemos ahora hacer aquello que queremos probar –> cargar un proyecto, hacer click en un botón de un AddIn, etc.
5. En la ventana de Threads puedes ver que hay varios trabajando y esperando; lamentablemente el mensaje que vemos en los mismos es algo similar a:
ntdll.dll!7c90eb94() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c90e9ab()
kernel32.dll!7c8094e2()
> msvcr90.dll!_onexit_nolock(int (void)* func=0x0072006f) Line 157 + 0x6 bytes C
6. Vamos, que seguro que RFOG o Carlos entienden esta semántica, pero para los que somos mas tontacos lo mejor es utilizar los símbolos publicos de MS para Visual Studio y tirar por allí.
7. Para esto vamos al menú Tools->Options->Debug->Symbols y configuramos el server para que apunte a http://msdl.microsoft.com/download/symbols y un directorio de descarga para los mismos. Usualmente se suele utilizar la raíz del C:, al estilo [C:\Symbols]
8. Disclaimer con respecto al paso anterior: en este momento para cada acción que se depure, se intentará bajar los datos propios de depuración del mismo. Este proceso puede y suele ser muy lento con lo que a no desesperarse.
9. Pues bien, ahora los mensajes de información que vemos en los threads son un poco más humanos, con lo que podremos ver algo al estilo
ntdll.dll!_KiFastSystemCallRet@0()
user32.dll!_NtUserKillTimer@8() + 0xc bytes
msenv.dll!CMsoCMHandler::FPushMessageLoop() + 0x36 bytes
msenv.dll!SCM::FPushMessageLoop() + 0x4f bytes
msenv.dll!SCM_MsoCompMgr::FPushMessageLoop() + 0x28 bytes
msenv.dll!CMsoComponent::PushMsgLoop() + 0x28 bytes
msenv.dll!VStudioMainLogged() + 0x19b bytes
msenv.dll!_VStudioMain() + 0x7d bytes
devenv.exe!util_CallVsMain() + 0xd8 bytes
devenv.exe!CDevEnvAppId::Run() + 0x5cb bytes
devenv.exe!_WinMain@16() + 0x60 bytes
devenv.exe!License::GetPID() - 0x4cf9 bytes
kernel32.dll!_BaseProcessStart@4() + 0x23 bytes
A partir de aquí ya no me hago responsable y cada uno debe velar por su propia seguridad :D
Saludos @ Bilbao’s Airport
El Bruno
Archivado en: Visual Studio,Visual Studio Team System,VSTS
Comparte este post: