문제

오늘 나는 프로그램을 원격으로 비방해야한다는 문제에 도달했다. 이 프로그램은 다른 시스템에서 시작되었으므로 명령 줄에서 상호 작용할 기회가 없습니다. 그래도 소스를 쉽게 변경할 수 있습니다.

내가해야 할 일은 프로그램이 정상적으로 시작하고 디버거로 부착하기를 기다리는 것이 었습니다. 나는 나를 행복하게하는 방법을 생각해 낼 수 없었다. 나는 버그를 찾았지만 디버거의 도움없이.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top