2012-03-27 27 views
17

Según tengo entendido ahora, la única forma de utilizar el depurador remoto es iniciar la aplicación de destino y luego adjuntarla a través de Visual Studio. ¿Hay alguna forma de capturar todos los puntos de corte desde el comienzo del programa? Hay un código dentro de mi programa que necesito depurar, y nunca puedo conectar el depurador lo suficientemente rápido como para capturar ese código de ejecución.Depuración remota de Visual Studio al iniciar la aplicación

+0

@HaraldDutch describe una gran solución aquí: http://stackoverflow.com/questions/19512041/remote-debugging-how-to-start-the-debugging-process-on-a-different-computer – eFloh

Respuesta

13

Si puede cambiar el código, intente inyectar esta línea de código en el punto de partida de su aplicación:

System.Diagnostics.Debugger.Launch(); 

Cuando se golpea esta línea se le pedirá que adjuntar un depurador, a la espera de manera efectiva para usted responder. Como está utilizando un depurador remoto, debería poder conectarse en ese punto y luego cancelar el diálogo. Espero que esto ayude.

+0

Buena respuesta. ¡Gracias! – Tim

+1

¿No debería ser 'System.Diagnostics.Debugger.Launch();'? Es una llamada a método sin argumentos, y necesita punto y coma al final como cualquier instrucción. –

3

Con Visual Studio Pro 2010 construyendo una aplicación .NET 4, esto no funciona para mí.

Al parecer, este es un error conocido:

https://connect.microsoft.com/VisualStudio/feedback/details/611486/debugger-launch-is-now-crashing-my-net-application-after-upgrading-to-net-4-0

A (un poco hacky) solución para el momento en que está trabajando para mí es sólo para tener la aplicación lanzar un cuadro de mensaje() justo al comienzo de la ventana principal de inicialización:

public partial class MainWindow : Form 
{ 
    public MainWindow() 
    { 
     // To allow you time to attach a remote debugger ... 
     MessageBox.Show("Please attach debugger"); 

     InitializeComponent(); 
     ... 

Ahora se puede conectar el depurador remoto VS en su tiempo libre, y después haga clic en OK en el cuadro de mensaje.

Feo pero funcional.

7

La solución

System.Diagnostics.Debugger.Launch 

no funcionó para mí tampoco. Sin embargo, he conseguido resolver mi problema de escribir en mi aplicación puesta en marcha de los siguientes:

while (!System.Diagnostics.Debugger.IsAttached) 
    System.Threading.Thread.Sleep(100); 

De esta manera la aplicación a estar esperando hasta que un depurador se adjunta.

+0

Esa es una buena solución en realidad. Embalado en '' '#ifdef DEBUG''' y' '' endif''' no molesta a las versiones Release y funciona sin problemas cuando depuro en mi máquina. Pero cuando necesito depurar de forma remota, simplemente espera. ¡Gracias! – ecth

Cuestiones relacionadas