Pregunta

Hoy me encontré con un problema fuera que necesitaba remoto de depuración de un programa. El programa fue lanzado desde otro sistema, así que realmente no tienen la oportunidad de interactuar con él en la línea de comandos. Podría cambiar su fuente de fácil sin embargo.

Lo que tenía que suceder era que el programa se inicia normalmente, y luego esperó a que yo atribuyo a ella con un depurador. No pude encontrar una manera de hacerlo que me hizo feliz. Lo que encontrar el error, pero sin la ayuda del depurador.

while(true) { }

Se mantuvo vivo el proceso, y entonces pude "set siguiente sentencia" con el depurador, pero parecía torpe y grosero.

Console.ReadLine();

pareció extraño para escribir ya que no era en realidad una consola para mí pulsa Intro a. (No funcionó, tampoco. Establecer próximo estado de funcionamiento y luego te lleva de vuelta a la ReadLine () esperar.)

Entonces, ¿qué tipo de código que puede insertar en un .NET / programa CLR / C # que dice "esperar aquí hasta que pueda conectar con un depurador"?

¿Fue útil?

Solución

Puede utilizar el System.Diagnostics.Debugger. propiedad IsAttached para comprobar si un depurador asociado al proceso. Esta aplicación va a esperar hasta que un depurador se ha unido:

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");
        }
    }
}

Otros consejos

Esto suena como exactamente lo que necesita:

Debugger.Launch();

http://msdn.microsoft.com/ en-us / library / system.diagnostics.debugger.launch.aspx

"lanza y adjunta un depurador para el proceso."

No sé, ya que nunca he probado, pero me pregunto si usted podría utilizar System.Diagnostics.Debugger.Break() con el fin de ser afectada por un punto de interrupción y luego esperar a que un depurador para adjuntar. Asumo un depurador remoto podría funcionar, pero no saber con seguridad y en la actualidad no tienen acceso a mi entorno familiar en el que podía fácilmente burlarse de él y probar mi teoría. Hay un href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break.aspx" rel="nofollow noreferrer"> artículo hablando acerca de su uso en una aplicación ASP.Net así que me imagino que iba a funcionar.

Colocación de depurador remoto funciona exactamente lo mismo que usar depurador local.

En primer lugar, haga lo habitual:

System.Diagnostics.Debugger.Launch();

Usted verá un mensaje para eligieron depurador. En este punto, se suspende la ejecución, por lo que para que pueda conectar depurador remoto y seleccione "No" desde el símbolo.

Debug.Assert(true);

También debería funcionar supongo. Por cierto, también me enfrenté a este problema a veces y hago

MessageBox.Show() 

: P: P

Establecer un tiempo de espera que se le da tiempo para conectar el depurador.

Thread.Sleep(30000);
scroll top