Frage

Heute habe ich ein Problem geführt haben, waren ich auf Remote-debug benötigt ein Programm. Das Programm wurde von einem anderen System gestartet, so dass ich wirklich nicht die Gelegenheit, mit ihm auf der Kommandozeile zu interagieren. Ich konnte seine Quelle allerdings leicht ändern.

Was ich brauchte, war zu geschehen für das Programm normal zu starten, und dann warten, bis ich es mit einem Debugger zu befestigen. Ich konnte nicht mit einem Weg kommen, es zu tun, die mich glücklich gemacht. Ich habe den Fehler finden, aber ohne die Hilfe des Debuggers.

while(true) { }

den Prozess am Leben gehalten, und dann konnte ich mit dem Debugger „nächste Anweisung gesetzt“, aber es schien unbeholfen und unfreundlich.

Console.ReadLine();

ungerade Schien, da es zu geben war nicht wirklich eine Konsole für mich drücken Sie . (Es funktionierte auch nicht. Nächste Anweisung einstellen und dann Lauf führt Sie zurück in die Readline () warten.)

Also, welche Art von Code kann ich einfügen in eine .NET / CLR / C # Programm, das sagt, dass „hier warten, bis ich mit einem Debugger anhängen“?

War es hilfreich?

Lösung

Sie können die System.Diagnostics.Debugger. IsAttached Eigenschaft zu überprüfen, ob ein Debugger an den Prozess angeschlossen ist. Diese Anwendung wird warten, bis ein Debugger angefügt wurde:

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

Andere Tipps

Das klingt wie genau das, was Sie brauchen:

Debugger.Launch();

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

"startet und fügt einen Debugger an den Prozess."

Ich weiß es nicht, da ich es nie versucht habe, aber ich frage mich, ob Sie System.Diagnostics.Debugger.Break() zu haben, um verwenden könnte es einen Haltepunkt erreicht und dann warten, einen Debugger zu befestigen. Ich gehe davon aus einem Remote-Debugger funktionieren würde, aber ich weiß es nicht sicher und habe derzeit keinen Zugang zu meiner häuslichen Umgebung, wo ich es leicht nach oben verspotten konnte und meine Theorie testen. Es gibt einen MSDN-Artikel darüber zu reden mit in einer ASP.Net-Anwendung so stelle ich mir vor, es würde funktionieren.

Anbringen Remote-Debugger funktioniert genauso wie mit lokalen Debugger.

Erstens haben die übliche:

System.Diagnostics.Debugger.Launch();

Sie werden sehen, eine Aufforderung Debugger zu wählen. An dieser Stelle wird die Ausführung unterbrochen, so so können Sie Remote-Debugger anhängen und „Nein“ von der Eingabeaufforderung aus.

Debug.Assert(true);

sollte auch funktionieren, denke ich. By the way, ich auch vor diesem Proble manchmal und ich

MessageBox.Show() 

: P: P

Stellen Sie einen Timeout, die Ihnen Zeit gibt, die Debugger zu befestigen.

Thread.Sleep(30000);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top