visual una todos teoria taylor studio solicitud resumen quitar que puntos punto puede propiedad programa principios por poner paso pasara operador lugar los interrupción interrupcion instrucciones habilitar funcionan fayol establecer ejecutar ejecucion dio definicion debuggear correr como cientifica breakpoint alto administracion actualmente activará c++ visual-studio visual-studio-2010

c++ - todos - su solicitud de ejecucion paso a paso dio lugar a que se pasara por alto una propiedad o un operador



Cómo establecer un punto de ruptura al principio de la ejecución del programa (6)

En lugar de comenzar con F5, simplemente comience a depurar con F11 o F10.

¿Cómo puedo detener el programa antes de cargar cualquiera de los archivos DLL vinculados?

Intenté establecer la función LoadLibraryExW en la opción de depuración Break At Function y se detiene en esa función, pero antes de eso tengo lo siguiente en las ventanas de salida de Visual Studio:

''test.exe'': Loaded ''C:/Windows/System32/ntdll.dll'', Symbols loaded (source information stripped). ''test.exe'': Loaded ''C:/Windows/System32/kernel32.dll'', Symbols loaded (source information stripped). ''test.exe'': Loaded ''C:/Windows/System32/KernelBase.dll'', Symbols loaded (source information stripped). ''test.exe'': Loaded ''C:/Windows/System32/uxtheme.dll'', Symbols loaded (source information stripped). ''test.exe'': Loaded ''C:/Windows/System32/msvcrt.dll'', Symbols loaded (source information stripped). ---- plus about 30 DLLs ---

Entonces, ¿cómo puedo detener el programa en el depurador antes de cargar el ntdll.dll ? Ok, no antes de cargar, pero antes de ejecutar cualquiera de DllMain funciones DllMain y antes de inicializar cualquiera de los objetos estáticos.


No creo que pueda hacer esto con el depurador de modo de usuario normal en Visual Studio. Microsoft proporciona un kit de herramientas gratuito de otras herramientas de depuración, como kd (kernel depurador) y windbg, que podrían interrumpir la carga, pero dudo que alguna vez pueda inspeccionar el proceso antes de cargar ntdll. En realidad no es un proceso en ese punto.

¿Qué está tratando de lograr?


No hay forma de hacerlo porque las DLL de las que depende su ejecutable PE son cargadas por el sistema (no por su proceso) antes de que el proceso sea creado. El proceso comienza solo cuando su ejecutable está vinculado con todas las funciones importadas de otras DLL.

ADD: Pero, por supuesto, las rutinas DllMain se ejecutan para cada DLL solo cuando se inicia el proceso y puede depurarlas.


Puede hacer esto agregando una clave de registro a "Opciones de ejecución de archivo de imagen" con el nombre de su ejecutable. Agregue un valor de tipo cadena llamada "Depurador" y configúrelo en vsjitdebugger.exe para iniciar el diálogo de depuración justo a tiempo. Que luego le permite elegir uno de los depuradores disponibles, incluido Visual Studio. Este diálogo se desencadena justo después de que Windows haya cargado el EXE, antes de que el código comience a ejecutarse.

Aquí hay un archivo .reg de muestra que activa el diálogo cuando inicia notepad.exe. Modifique el nombre de la clave a su .exe:

REGEDIT4 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/notepad.exe] "Debugger"="vsjitdebugger.exe"


ntdll.dll es cargado por el kernel, durante la creación del proceso. No sé sobre los otros dlls específicamente, pero lo más probable es que también estén cargados por el kernel.

Por lo que sé, lo que intentas hacer no se puede hacer, a menos que escribas un rootkit para sobrescribir parte del código de creación del proceso. Incluso entonces, no estoy seguro de si el proceso que se está creando realmente se considera un proceso antes de que se carguen estas bibliotecas.


Usando Gflags y WinDbg, puede adjuntar automáticamente a su aplicación de destino, y establecer un punto de ruptura ANTES de que se carguen todas las DLL.

Para hacer esto, necesitará instalar "Herramientas de depuración para Windows". Puedes obtenerlo gratis de Microsoft. Incluye GFlags y WinDbg. Puede encontrarlo en: http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

Use GFlags para establecer las opciones automáticas de depuración en su programa objetivo. Esta es la forma más fácil de configurar su sistema para iniciar un depurador que se iniciará automáticamente cuando se inicie la aplicación de destino. No hay necesidad de perder el tiempo con el registro, hará todos los cambios necesarios para usted.

Use GFlags para establecer que WinDbg se inicie como el depurador. Cambie los filtros de eventos para WinDbg en el evento "Crear proceso" de "Ignorar" a "Activado". Por defecto, WinDbg no se rompe en la creación del proceso de su objetivo. Pero si necesita o desea establecer un punto de corte en el proceso de creación, puede cambiar esta opción de evento. La forma más fácil de cambiar esta opción es dejar que WinDbg se inicie en su aplicación, usar su GUI para cambiar la opción a través de la opción de menú "DEBUG | Event Filters ..." y su diálogo, guardar su espacio de trabajo y dejar de depurar. Luego comience lo que conduzca a su aplicación de destino comenzando, y desde ese momento en adelante para ese objetivo de depuración en particular, WinDbg se dividirá en "Crear proceso".

Hay otras maneras de configurar esta opción automáticamente en WindDbg, pero no son tan fáciles como usar su GUI. Puede establecer las opciones de línea de comando para su invocación para habilitar el evento Crear proceso. Puede hacer que WinDbg ejecute un archivo de script que establecerá la opción por usted. Puede establecer la variable de entorno TOOLS de WinDbg para apuntarlo a su archivo "Tools.ini" y habilitar allí el evento de proceso de creación. Y hay un par de métodos más para configurar la opción de evento para habilitar un punto de interrupción en Crear proceso.

El enlace anterior incluye enlaces para la ayuda de depuración con GFlags y WinDbg.

Para la mayoría de las necesidades de depuración, los desarrolladores no necesitan ni desean un punto de interrupción en la creación del proceso (antes de que se carguen todos los dlls básicos y necesarios para ejecutar). Pero si lo hace, WinDbg y otros depuradores gratuitos proporcionados por Microsoft pueden hacerlo. Solo necesita cambiar el valor predeterminado para ese evento de ignorado a habilitado.