30 votos

Cómo esperar hasta remoto .NET depurador

Hoy me he topado con un problema que necesitaba remoto-depuración de un programa. El programa fue lanzado desde otro sistema, así que realmente no tienen la oportunidad de interactuar con ella en la línea de comandos. Yo podría cambiar su fuente fácilmente.

Lo que tenía que suceder era que el programa se inicie normalmente y, a continuación, espere a que me conecte con un depurador. Yo no podía llegar a hacerlo de una manera que me hizo feliz. Me hizo encontrar el error, pero sin la ayuda del depurador.

while(true) { }

Mantiene el proceso vivo, y entonces yo podría "establecer la siguiente declaración" con el depurador, pero parecía torpe y grosero.

Console.ReadLine();

Parecía raro tipo ya que no había en realidad una Consola para que me presione entrar . (No funcionó, tampoco. Establecer instrucción siguiente y, a continuación, ejecute lo lleva de vuelta a la ReadLine() esperar.)

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

54voto

Daniel Richardson Puntos 2558

Usted puede utilizar el Sistema.Los diagnósticos.Depurador.IsAttached propiedad para comprobar si está conectado un depurador al proceso. Esta aplicación va a esperar hasta que un depurador se ha adjuntado:

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

6voto

Martin Sherburn Puntos 1897

Esto suena como exactamente lo que usted necesita:

Debugger.Launch();

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

"Lanza y adjuntar un depurador al proceso".

4voto

Steven Behnke Puntos 2149

No sé, ya que yo nunca lo he probado pero me pregunto si se puede usar System.Diagnostics.Debugger.Break() con el fin de tener golpeó un breakpoint y, a continuación, esperar a que un depurador para adjuntar. Supongo un depurador remoto iba a funcionar, pero no estoy seguro y en la actualidad no tienen acceso a mi ambiente de la casa en la que fácilmente podría burlarse de ella y probar mi teoría. Hay un artículo de MSDN hablando sobre el uso de la misma en un ASP.Net aplicación por lo que me imagino que sería el trabajo.

0voto

Arron S Puntos 2302

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

Thread.Sleep(30000);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X