2009-09-02 3 views
13

Visual Studio 디버거에서 실행중인 .NET 응용 프로그램 의 현재 디렉터리는 어떻게 찾을 수 있습니까?Visual Studio 디버깅 세션 중에 현재 디렉터리 찾기?

업데이트 1. 명확히하려면 : 코드 을 변경하거나 프로그램 자체에서 정보를 얻고 싶지 않습니다. 단지 에 대한 정보를 얻으려면 현재 디버깅 중입니다.

닷넷 Windows Forms 응용 프로그램 (혼합 VB.NET 및 C#)를 디버깅하는 동안

은 내가 XML 파일을 에서 읽을 된 위치에서 확실하지 않았다. 현재 디렉터리가 응용 프로그램의 디렉터리가 될 것으로 예상했습니다. 그러나, 프로세스 탐색기에서의 처리 결과에 대한 속성을 사용하여 :

D : \ 프로그램 파일 마이크로 소프트 비주얼 스튜디오 \ (86) 9.0 \ Common7 \

(오른쪽 클릭 프로세스/등록/탭 이미지/현재 디렉토리).

D : \ dproj \ DTASCall \ DTASuperCharge \ 빈 \

프로세스 탐색기 의 주요보기에서 프로세스에 커서를 가져 가면

다른 결과 (스크린 샷은 아래 참조)를 밝혀

무엇이 맞습니까?

응용 프로그램 독립형 디스플레이를 예상 현재 디렉토리,

D 시작 : 프로세스 탐색기 프로세스 속성 창에서

\ 빈 \ \ dproj \ DTASCall \ DTASuperCharge합니다.


프로세스 탐색기의

주석 스크린 샷 : 당신의 디버그 속성을 변경하지 않는 한 코드 내에서

Alt text http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

답변

4

, 기본적으로 기능을

System.IO.Directory.GetCurrentDirectory() 

전화 프로젝트가 있으면 현재 디렉터리는 프로젝트의 bin \ Debug 디렉터리 (.exe가 실행되는 위치)로 시작됩니다.

+0

실제 프로그램이 실행되고 있지 않다는 것은 무엇을 의미합니까? 스크린 샷을 찍을 때 중단 점에서 프로그램이 중지되었습니다. –

+0

흠, 무슨 뜻인지 알 겠어. 나는 .vshost에 관해서 틀 렸습니다. 나는 똑같은 것을 체크했고, procexp는 문제없이 현재 작업 디렉토리를 추적합니다. System.IO.Directory.GetCurrentDirectory()의 출력을 기본 프로젝트 설정과 비교해보십시오. 이것은 응용 프로그램의 bin \ Debug 디렉토리 여야합니다. 읽으려고하는 XML 파일이 프로젝트 항목 인 경우 Build Action 속성을 "Content"로 설정하고 Output Directory로 복사 속성을 적절하게 설정해야합니다. 또한 현재 디렉토리가 아닌 응용 프로그램의 루트 디렉토리에서 읽을 가치가 있습니다. – Richard

+0

디버그 페이지의 "작업 디렉터리"필드가 비어 있습니다. 그러나 컴파일 페이지에서 "출력 경로 빌드"필드에는 "bin \"이 포함됩니다. 그것은 비어 있어야 하는가? 이 프로젝트는 2003 년 Visual Studio에 의해 만들어졌으며 그 이후로 두 번의 Visual Studio 업데이트가있었습니다. 현재 응용 프로그램은 bin 디렉토리가 아니라 bin 디렉토리에서 시작합니다. –

22

Visual Studio의 디버그 탭에있는 프로젝트 설정에서 원하는 경우 "작업 디렉터리"를 설정할 수 있습니다.

코드에서 현재 작업 디렉토리를 결정하거나 브레이크 포인트에서 직접 실행 창에

System.IO.Directory.GetCurrentDirectory() 
+1

직접 실행 창 : "Debug.Print (System.IO.Directory.GetCurrentDirectory())"가 아닌가요? –

+2

직접 실행 창의 다른 방법 : 디버그/빠른보기/<표현식 필드에 입력>/재평가를 누릅니다. 또는 일반 조사 식 창의 이름 열의 마지막 행에 Return 키를 입력하십시오. –

+4

또는 직접 실행 창에서 항상 "? System.IO.Directory.GetCurrentDirectory()"를 수행 할 수 있습니다. –

-3

가장 좋은 방법은 WinDbg (윈도우 디버거)에서 응용 프로그램을 실행하는 것입니다 시도, 프로세스에 연결하려면 !handle 명령을 실행하십시오. 각각의 열린 파일에는 연관된 핸들이 있습니다.해당 프로세스의 모든 핸들을 덤프하면 해당 파일 경로가 표시됩니다.

!handle 0 f process-id 

이 프로세스 ID의 값으로 프로세스 ID를 교체 : 여기

은 예입니다. 프로세스 ID 대신 프로세스 주소를 사용할 수도 있습니다. 여기에 파일 객체가 표시되지 않으면 파일 핸들이 이미 닫혔습니다. 이 경우 핸들을 추적해야합니다. 이것은 !htrace 명령으로 수행 할 수 있습니다.

+0

아래의 필립 리엑의 게시물이 정답입니다 : "System.IO.Directory.GetCurrentDirectory()" –

관련 문제