Question

Aujourd'hui, je suis tombé sur un problème était que je devais-débogage à distance un programme. Le programme a été lancé à partir d'un autre système, donc je n'ai pas vraiment l'occasion d'interagir avec lui sur la ligne de commande. Je pourrais changer sa source facilement si.

Ce que je devais arriver était que le programme démarre normalement, puis attendre pour moi d'y attacher avec un débogueur. Je ne pouvais pas trouver une façon de le faire qui m'a fait plaisir. J'ai trouvé le bug, mais sans l'aide du débogueur.

while(true) { }

Gardé le processus vivant, et alors je pourrais « établir la déclaration suivante » avec le débogueur, mais il semblait maladroit et grossier.

Console.ReadLine();

Semblait étrange de taper car il n'y avait pas vraiment une console pour moi à appuyer sur Entrée . (Il n'a pas fonctionné non plus. Définir l'instruction suivante, puis sur Exécuter vous ramène dans le ReadLine () attendre.)

Alors, quel genre de code puis-je insérer dans un programme .NET / CLR / C # qui dit « attendre ici jusqu'à ce que je peux joindre un débogueur »?

Était-ce utile?

La solution

Vous pouvez utiliser le System.Diagnostics.Debugger. IsAttached propriété pour vérifier si un débogueur est attaché au processus. Cette application attendra jusqu'à ce qu'un débogueur est attaché:

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

Autres conseils

Cela ressemble exactement ce dont vous avez besoin:

Debugger.Launch();

http://msdn.microsoft.com/ fr-fr / bibliothèque / system.diagnostics.debugger.launch.aspx

« lance et attache un débogueur au processus. »

Je ne sais pas, puisque je ne l'ai jamais essayé mais je me demande si vous pouvez utiliser pour System.Diagnostics.Debugger.Break() avoir atteint un point d'arrêt, puis attendre un débogueur pour attacher. Je suppose un débogueur distant fonctionnerait, mais je ne sais pas pour sûr et actuellement n'ont pas accès à mon environnement familial où je pourrais facilement moquer et tester ma théorie. Il y a une article MSDN parler de l'utiliser dans une application ASP.Net donc j'imagine que cela fonctionnerait.

Fixation débogueur distant fonctionne exactement le même que l'utilisation débogueur local.

Tout d'abord, procédez comme d'habitude:

System.Diagnostics.Debugger.Launch();

Vous verrez une invite à choisir débogueur. A ce stade, l'exécution est suspendue, de sorte que vous pouvez joindre débogueur distant et sélectionnez « Non » à l'invite.

Debug.Assert(true);

devrait également travailler je suppose. Soit dit en passant, j'ai aussi fait face à ce problème et parfois je fais

MessageBox.Show() 

: P: P

Définissez un délai que vous donne le temps d'attacher le débogueur.

Thread.Sleep(30000);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top