Pergunta

Hoje eu tive um problema se eu precisava remoto depurar um programa. O programa foi lançado a partir de outro sistema, então eu realmente não têm a oportunidade de interagir com ele na linha de comando. Eu poderia mudar sua fonte facilmente embora.

O que eu precisava acontecer era para o programa para iniciar normalmente, e depois esperar por mim para anexar a ele com um depurador. Eu não poderia vir acima com uma maneira de fazer isso que me fez feliz. Eu fiz encontrar o bug, mas sem a ajuda do depurador.

while(true) { }

Mantido o processo vivo, e então eu poderia "set seguinte afirmação:" com o depurador, mas parecia estranho e rude.

Console.ReadLine();

Parecia estranho para digitar uma vez que não era realmente um Console para mim pressione insira a. (Não funcionou, tampouco. Set próxima instrução e execute o leva de volta para a espera ReadLine ().)

Assim que tipo de código que pode inserir em um / CLR / C programa .NET # que diz "esperar aqui até que eu possa anexar com um depurador"?

Foi útil?

Solução

Você pode usar o System.Diagnostics.Debugger. propriedade IsAttached para verificar se um depurador é anexado ao processo. Esta aplicação irá esperar até que um depurador foi anexado:

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

Outras dicas

Isso soa como exatamente o que você precisa:

Debugger.Launch();

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

"Lança e anexa um depurador ao processo."

Eu não sei, desde que eu nunca tentei, mas gostaria de saber se você poderia usar System.Diagnostics.Debugger.Break(), a fim de tê-lo atingido um ponto de interrupção e depois esperar por um depurador para anexar. Eu presumo que um depurador remoto iria funcionar, mas eu não sei ao certo e atualmente não têm acesso ao meu ambiente doméstico, onde eu poderia facilmente zombar-lo e testar minha teoria. Há uma href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break.aspx" rel="nofollow noreferrer"> artigo falando sobre a usá-lo em um aplicativo ASP.Net então eu imagino que ele iria trabalhar.

Anexar depurador remoto funciona exatamente o mesmo que usar depurador local.

Em primeiro lugar, fazer o habitual:

System.Diagnostics.Debugger.Launch();

Você verá um prompt para escolher depurador. Neste ponto, a execução está suspensa, de modo que você pode anexar depurador remoto e selecione "Não" a partir da linha.

Debug.Assert(true);

também deve trabalhar, eu acho. By the way, eu também enfrentam este proble às vezes e eu faço

MessageBox.Show() 

: P: P

Definir um tempo limite que lhe dá tempo para anexar o depurador.

Thread.Sleep(30000);
scroll top