Como esperar até depurador .NET remota ligada
-
21-08-2019 - |
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"?
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);