2014-04-28 10 views
1

C# WinForms 응용 프로그램이 있고 외부 프로그램에서 간단히 Process.Start(MyModule.exe)을 사용하여 시작한다고 가정합니다. (물론 디렉토리을 적절한 설정 작업과 함께)>시작 외부 프로그램 ->디버그 - ->시작 액션Process.Start()로 외부 프로그램에서 내 코드를 시작할 때 디버깅

나는 내 프로젝트 속성를 사용하여 내 코드를 디버깅하기 위해 노력했습니다.

내 enother 시도가 디버그이었다 ->는 프로세스에 연결

UPDATE : 내 모듈과 외부 프로그램 모두 하나 개의 자원을 사용합니다. 그래서 외부 프로그램이 그것을 해제하고, Process.Start()를 호출하고, 프로세스가 ans를 종료 할 때까지 기다렸다가 리소스를 다시 캡처합니다. 따라서 프로그램이 이미 실행 중일 때는 연결할 수 없습니다.

두 가지 모두 실패했습니다. Program.cs에서 중단 점이 발생하지 않았습니다.

그런 상황에서 어떻게 코드를 디버깅 할 수 있습니까?

+0

* * ** 프로그램에 이미 첨부되어있는 경우 ** 첨부 ** 프로세스 **가 작동해야합니다. 귀하의 신청서 또는 그 프로그램을 시작한 다른 프로그램에 첨부 하였습니까? – Kobi

+0

외부 프로그램에 첨부합니다. 일부 정보를 위해 내 게시물을 업데이트했습니다. – bairog

답변

6

이 문제를 쉽게 해결할 수있는 두 가지 방법이 있습니다. 첫 번째 방법은 프로그램의 요청이 디버거가
enter image description here

이 허용됩니다 이것은 다음 쇼 같은 대화 상자를 만들 것입니다 Debugger.Launch()

public static void Main(string[] args) 
{ 
    Debugger.Launch(); 

    //Rest of your code here 
} 

통해 홈페이지에서하는 첫 번째 일은로 부착이있다 실행중인 Visual Studio에 연결하거나 새 인스턴스를 시작할 수 있습니다.

이전 방법을 사용할 수 없을 때이 문제를 해결하는 또 다른 방법은 (예를 들어 서비스 내에서 작동하지 않는다고 생각하는 등) 디버거가 끝날 때까지 루프를 반복하는 코드 시작 부분에 루프를 넣는 것입니다 첨부하면 프로그램을 진행시키지 않고 앞에서 시도한 "Attach to Process"방법을 수행 할 수있는 충분한 시간을 갖게됩니다.

public static void Main(string[] args) 
{ 
    while(!Debugger.IsAttached) 
    { 
     Thread.Sleep(1000); //Sleep 1 second and then check again. 
    } 

    //Rest of your code here 
} 
+0

Thx, 저에게 효과적입니다. – bairog

+0

내 관심 분야 : 디버거 구성에서 코드를 컴파일하는 경우 Debugger.Launch() 또는 Debugger.IsAttached() 만 활성화됩니까? –

+1

@ this.myself 이들 메독은 모두 릴리스 모드에서 활성화되지만 ['Debug'] (http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.)의 일부 기능입니다. debug (v = vs.110) .aspx) 릴리스 중에 컴파일되지 않는'Debugger '가 아닙니다. 메서드를 마우스 오른쪽 단추로 클릭하고 '탐색 대상 ->을 수행하면 [조건부] (http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.conditionalattribute) 특성을 통해이 작업을 수행 할 수 있습니다. 메타 데이터 '를 보면 궁금한 방법이'[Conditional ("DEBUG")] 속성을 가지고 있는지 알 수 있습니다. –

0

System.Diagnostics.Debugger.Launch() 또는 System.Diagnostics.Debugger.Break() 두 가지 다른 방법이 있습니다. 첫 번째는 디버거를 부착 한 다음 (아무 것도 선택하지 않음) 아무 것도하지 않습니다. 사람이 이미 붙어있는 경우에는 아무 일도 일어나지 않을 것입니다. 디버거가 연결되어 있지 않은 경우 후자는 정확히 Launch으로 수행되며 연결되어 있으면 중단 점으로 사용됩니다.

따라서 간단하게 중단 점을 지정하려면 System.Diagnostics.Debugger.Break();을 작성하십시오.

프로그램을 디버깅 할 방법을 묻는 대화 상자가 발생합니다

(물론 또한 의미 당신의 당신의 디버깅을 완료 한 줄 제거해야합니다) (VS의 적절한 인스턴스를 선택 대화 상자에서

또는 새로운 것을 생성하십시오.) 그리고 평소와 같이 디버깅을 계속하십시오.

+0

['Debugger.Break()'] (http://msdn.microsoft.com/en-us/en-en/library/system.diagnostics.debugger.break (v = vs.100) .aspx) - is corrent 구문을 사용하지만 작동하지 않습니다. – bairog

+0

무엇이 작동하지 않습니까? 릴리스 또는 디버그 빌드를 사용하는 프로그램 빌드입니까? –

+0

디버그. ** 외부 프로그램 시작 ** 시도 - 외부 프로그램에서 해당 버튼을 클릭하면 모듈이 열립니다. – bairog