visual - Cómo esperar hasta que se adjunte el depurador.NET remoto
remote debugger remote debugger exe (6)
Establezca un tiempo de espera que le da tiempo para adjuntar el depurador.
Thread.Sleep(30000);
Hoy me encontré con un problema si necesitaba depurar un programa a distancia. El programa se lanzó desde otro sistema, por lo que realmente no tengo la oportunidad de interactuar con él en la línea de comandos. Sin embargo, podría cambiar su fuente fácilmente.
Lo que necesitaba que sucediera era que el programa comenzara normalmente, y luego esperara a que lo adjuntara con un depurador. No pude encontrar una manera de hacerlo que me hiciera feliz. Encontré el error, pero sin la ayuda del depurador.
while(true) { }
Mantuve vivo el proceso, y luego pude "establecer la siguiente declaración" con el depurador, pero me pareció incómodo y grosero.
Console.ReadLine();
Parecía extraño escribir, ya que en realidad no había una consola para presionar Enter at. (Tampoco funcionó. Establecer la siguiente declaración y luego ejecutar lo lleva de regreso a la espera ReadLine ()).
Entonces, ¿qué tipo de código puedo insertar en un programa .NET / CLR / C # que dice "espere aquí hasta que pueda adjuntarlo con un depurador"?
Esto suena exactamente a lo que necesitas:
Debugger.Launch();
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx
"Inicia y adjunta un depurador al proceso".
La conexión del depurador remoto funciona exactamente igual que con el depurador local.
Primero, haz lo usual:
System.Diagnostics.Debugger.Launch();
Verás un mensaje para elegir el depurador. En este punto, la ejecución se suspende, por lo que puede adjuntar un depurador remoto y seleccionar "No" en el aviso.
No sé, ya que nunca lo he intentado, pero me pregunto si podría usar System.Diagnostics.Debugger.Break()
para que llegue a un punto de interrupción y luego esperar a que se adjunte un depurador. Supongo que un depurador remoto funcionaría, pero no estoy seguro y actualmente no tengo acceso a mi entorno doméstico, donde podría simularlo fácilmente y probar mi teoría. Hay un artículo de MSDN hablando sobre su uso en una aplicación ASP.Net así que me imagino que funcionaría.
Puede usar la propiedad System.Diagnostics.Debugger.IsAttached para verificar si un depurador está conectado al proceso. Esta aplicación esperará hasta que se haya adjuntado un depurador:
using System;
using System.Diagnostics;
using System.Threading;
namespace DebugApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Waiting for debugger to attach");
while (!Debugger.IsAttached)
{
Thread.Sleep(100);
}
Console.WriteLine("Debugger attached");
}
}
}
Debug.Assert(true);
también debería funcionar, supongo. Por cierto, también me enfrento a este problema a veces y lo hago
MessageBox.Show()
: P: P