visual studio scripts punto proceso modo interrupción interrupcion habilitada está encuentra depurar depuración debuggear como chrome asociar aplicacion adjuntar actualmente activará c++ windows visual-studio debugging ipc

c++ - scripts - depurar un proceso generado con CreateProcess en Visual Studio



la depuración de scripts de chrome en visual studio está habilitada (3)

Puede hacer una llamada DebugBreak() a DebugBreak() en algún lugar del código de inicio de su proceso hijo. Esto hará que Windows le pregunte si desea depurar ese proceso.

Creé una aplicación Windows / C ++ / WTL que genera un proceso secundario. Los dos procesos se comunican a través de tuberías anónimas.

Me gustaría poder depurar el proceso secundario.

Como ambos proyectos están en la misma solución en Visual Studio 2008, ¿hay alguna forma de decirle a VS2008 que me gustaría que el depurador depure ambos procesos?

Cuando inicio el depurador con el proceso principal, el depurador no romperá ningún punto de interrupción en el código de proceso secundario.

Y dado que el proceso principal genera el proceso secundario, no puedo pensar en una forma fácil de vincular el proceso secundario (quizás a través de otra instancia de VS2008) cuando se genera.

¡Cualquier idea muy apreciada!


Podría poner un mutex con nombre global alrededor de su llamada CreateProcess , y luego tratar de agarrar el mutex en el proceso secundario. Si luego pone un punto de interrupción en la llamada de CreateProcess , debe tener tiempo para adjuntarlo al niño antes de que haga algo sustancial.

Tenga en cuenta que se perderá todo lo que sucede antes de main en el proceso secundario.

editar: como ejemplo, algo como esto, no probado:

// parent.cpp HANDLE hMutex = ::CreateMutex(NULL, TRUE, "Global//some_guid"); ::CreateProcess(...); ::ReleaseMutex(hMutex); // breakpoint here ::CloseHandle(hMutex); // child.cpp int main(...) { HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Global//some_guid"); ::WaitForSingleObject( hMutex, INFINITE ); ::CloseHandle(hMutex); ... }

Probablemente quieras envolverlo con #if _DEBUG o verificaciones de variables de entorno.


Un montón de opciones:

  • Puede depurar múltiples .exes con una instancia del depurador utilizando Debug + Attach. Sin embargo, siempre uso dos instancias de Visual Studio, use Debug + Attach en el segundo.

  • Puede poner __debugbreak () en el código del niño, la ventana del depurador JIT le pedirá que seleccione un depurador.

  • Puede utilizar la clave de registro "Opciones de ejecución de archivo de imagen" para iniciar automáticamente un depurador tan pronto como se inicie el .exe hijo. Agregue una clave llamada HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows NT / CurrentVersion / Image Execution Options / YourApp.exe, establezca su valor de "Debugger" en "vsjitdebugger.exe"

  • Hay un complemento VS que lo hace aún más fácil, aún no lo he probado.