Una de debuggers
Ayer lunes instalé en mi equipo del trabajo el Visual Studio 2008 Professional por aquello de que los productos de M$ hay que instalarlos SOLO cuando ha salido al menos el SP1 y ha ido todo como la seda, de hecho lo noto más fluido que el 2005, aunque debo matizar que lo que yo utilizaba hasta ahora era el VWD Express 2005 y el Visual C# 2005 Express. Es una buena noticia sin duda, quiere decir que se está apoyando oficialmente (aka, "con pasta") el desarrollo para .NET en mi empresa.
Bien, el caso es que ni quiero ni puedo renunciar tampoco a mi vetusto y querido Delphi 7, por lo cual esta mañana lo he arrancado para trabajar con una igualmente vetusta aplicación Win32... y oh sorpresa, me ha salido un mensajito que nunca me había salido usando el VWD o el VC# Express (luego me enteré que era precisamente por ser las versiones Express), un mensajito que hacía referencia al jitter o Just-In-Time Debugger que Windows tenía registrado por defecto.
El caso es que ante la duda, la más tetuda opté por permitir al debugger de Borland registrarse para que hiciese su trabajo correctamente. Pero claro luego me puse a pensar "y si luego VS se me queja?", "y si luego no va bien la depuración?"... y la pregunta más terrible: "¿¿y ahora cómo hago para volver a registrar el depurador de VS??".
"Bueno, no nos alarmemos, vamos a probar a ver.", pensé. Cerré el Delphi, arranqué Visual Studio... no se quejó (en este punto no sé si habría preferido que lo hiciera). Cargué el proyecto Web en el que trabajo, pulsé F5... Albricias, arrancó majestuosamente. Como sabía que tenia un par de bugs sin corregir que más que bugs parecían cocodrilos, me fui hacia esa parte de la aplicación y la hice petar. Todo perfecto, los mensajes de error eran los que deberian ser, el volcado de pila de llamadas era correcto... OK. Pongamos pues un par de breakpoints y démosle al Paso a paso... Impecable, el debugger funcionaba a la perfección.
¿Habría restaurado VS2008 el setting del debugger que utiliza, él solito? Pues no, porque al volver a arrancar Delphi, no se quejó. Cáspita.
Decidí pues preguntar a la Fuente De Toda Sabiduria. Me encontré con una página en alemán de la que no entendía ni torta, pero que arrojaba luz sobre mis tinieblas. Al parecer, en el Registro de Windows hay DOS entradas relativas al depurador que Visual Studio utiliza, que son éstas:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKLM\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
... de lo cual deduje, acertadamente como no podía ser de otra manera, que el primero es el relativo al debugger en modo Win32 nativo. Lo cual explicaría que VS me hiciese correctamente la ejecución Paso a Paso del programa, y a su vez Delphi también funcione correctamente, ya que la versión 7 de Delphi compila exclusivamente para Win32 (sí ya sé que en teoría no es del todo cierto pero en la práctica así es, además, ¿quién puede querer compilar para una beta de la version 1.0 de .NET?).
Haciendo una nueva búsqueda llegué a este artículo de la MSDN Library (nunca me cansaré de decirlo: Qué maravilla) en la cual ya se explica todo en detalle, incluido el proceso para habilitar o deshabilitar, desde el propio IDE de Visual Studio, las opciones de depuración Just-In-Time.
Yo he pensado que lo voy a dejar tal como lo tengo ahora mismo: Para código manejado el depurador de .NET, y para código nativo el de Borland CodeGear Embarcadero.