원격 .NET 디버거가 부착 될 때까지 기다리는 방법
-
21-08-2019 - |
문제
오늘 나는 프로그램을 원격으로 비방해야한다는 문제에 도달했다. 이 프로그램은 다른 시스템에서 시작되었으므로 명령 줄에서 상호 작용할 기회가 없습니다. 그래도 소스를 쉽게 변경할 수 있습니다.
내가해야 할 일은 프로그램이 정상적으로 시작하고 디버거로 부착하기를 기다리는 것이 었습니다. 나는 나를 행복하게하는 방법을 생각해 낼 수 없었다. 나는 버그를 찾았지만 디버거의 도움없이.
while(true) { }
프로세스를 살아있게 유지 한 다음 디버거로 "다음 진술을 설정"할 수 있었지만 어색하고 무례 해 보였습니다.
Console.ReadLine();
실제로 압박 할 콘솔이 없기 때문에 유형이 이상하게 보였습니다. 입력하다 에. (또한 작동하지 않았습니다. 다음 진술을 설정 한 다음 실행하면 readline () 대기로 돌아갑니다.)
그렇다면 "디버거로 첨부 할 때까지 기다리는".net/clr/c# 프로그램에 어떤 종류의 코드를 삽입 할 수 있습니까?
해결책
당신은 사용할 수 있습니다 System.diagnostics.debugger.isattached 디버거가 프로세스에 부착되어 있는지 확인하는 속성. 이 응용 프로그램은 디버거가 첨부 될 때까지 기다립니다.
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");
}
}
}
다른 팁
이것은 정확히 당신이 필요한 것 같습니다.
Debugger.Launch();
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx
"프로세스에 디버거를 시작하고 첨부합니다."
나는 그것을 시도한 적이 없기 때문에 모르겠지만 당신이 사용할 수 있는지 궁금합니다. System.Diagnostics.Debugger.Break()
중단 점을 누른 다음 디버거가 부착 될 때까지 기다리십시오. 나는 원격 디버거가 작동한다고 가정하지만 확실하지 않으며 현재 내 이론을 쉽게 조롱하고 테스트 할 수있는 가정 환경에 접근 할 수 없다. 있습니다 MSDN 기사 ASP.NET 애플리케이션에서 사용하는 것에 대해 이야기하여 효과가 있다고 생각합니다.
원격 디버거를 첨부하는 것은 로컬 디버거를 사용하는 것과 정확히 동일하게 작동합니다.
먼저 평소를 수행합니다.
System.Diagnostics.Debugger.Launch();
디버거를 선택하라는 프롬프트가 표시됩니다. 이 시점에서 실행이 중단되므로 원격 디버거를 연결하고 프롬프트에서 "NO"를 선택할 수 있습니다.
Debug.Assert(true);
또한 작동해야합니다. 그건 그렇고, 나는 또한 때때로이 Proble에 직면하고
MessageBox.Show()
: p : p
디버거를 연결할 시간을 제공하는 시간 초과를 설정하십시오.
Thread.Sleep(30000);