2009-12-18 13 views
5

Me gustaría saber si hay algún comando o herramienta que pueda usarse para iniciar un proceso y luego pausarlo inmediatamente.¿Cómo iniciar un proceso y pausarlo inmediatamente?

Necesito esta función para tener tiempo de adjuntarle un depurador. He intentado con la característica visual debugexe/debugexe, pero el comportamiento del programa parecía cambiado. Entonces necesito encontrar otra forma de adjuntarlo y depurarlo.

Gracias.

+2

Sospecho que el problema real es que tiene una condición de carrera u otro problema de simultaneidad, por lo que simplemente ejecutarlo en un depurador hace que el problema se oculte. –

+0

Gracias a todos por proporcionar comentarios útiles para mi problema. Como estoy desarrollando un complemento para el programa, no puedo modificar el código fuente del programa host. Por lo tanto, las soluciones proporcionadas por sharptooth y nobugz serían más adecuadas para mi problema. Supongo que tenemos que modificar el programa de host para usar la solución de R Samuel Klatchko y Rytmis. – askalee

Respuesta

4

Puede usar CreateProcess() con el indicador CREATE_SUSPENDED. Esto iniciará el proceso con el hilo principal suspendido. Luego llamas a ResumeThread() después de haberlo adjuntado.

0

Qué tal si agregas una llamada a Sleep() como primera afirmación.

+0

Eso funcionará la mayoría de las veces. Pero si el problema radica en que algo sucede antes de que se llame a WinMain() será inútil. – sharptooth

0

También puede agregar una llamada a

System.Diagnostics.Debugger.Break(); 

en el código. Se suspenderá el programa y luego le pedirá que elija el depurador que desea utilizar. Luego puede adjuntarlo a una instancia de Visual Studio en ejecución. Si ya está ejecutando desde un depurador, simplemente se romperá como si hubiera alcanzado un punto de interrupción.

Cuestiones relacionadas