아직 시작되지 않은 프로세스에 Visual Studio를 연결하려면 어떻게하나요?


89

시작 이벤트를 디버깅해야하는 몇 가지 이유로 Visual Studio에서 실행할 수없는 .NET 프로그램 (Excel 2010 템플릿 프로젝트에서 만든 Excel 파일)이 있습니다.

프로그램 초기화 후 발생하는 이벤트를 디버그하려면 문제가 없습니다. 탐색기에서 프로그램을 실행하고 프로세스를 Visual Studio에 연결하고 코드에 중단 점을 추가합니다. 하지만 여기서는 시작 이벤트에 중단 점을 추가해야합니다. PID가 아니라 특정 프로세스 이름이나 작동하는 다른 솔루션에 따라 Visual Studio에 프로세스를 연결할 수 있어야합니다.

물론 Thread.Sleep(1000)Visual Studio에서 프로세스를 첨부 할 시간을주기 위해 시작 이벤트에를 추가하는 것은 의문의 여지가 없습니다!

답변:


97

실제로 할 수 있습니다. 당신은 그것에 연결하지 않고 시작합니다. 프로젝트 속성의 디버깅 탭에서 "명령"텍스트 상자에 연결할 프로그램의 경로를 지정합니다.

"명령 인수"상자에 프로그램에 대한 명령 줄 인수를 입력 할 수도 있습니다.

여기에 이미지 설명 입력

"Attach"가 "No"로 설정되어 있는지 확인하십시오.


6
좋은 해결책이지만이 경우에는 F5 키를 눌러도 작동하지 않습니다. 대신 관련 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 '디버그> 새 인스턴스 시작'을 클릭합니다.
허먼 코르

1
F5가 작동하려면 프로젝트가 솔루션의 시작 프로젝트 여야합니다. 이를 위해 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "시작 프로젝트로 설정"을 선택합니다.
Tibi

1
또한 프로그램에 외부 종속성이있는 경우 "Working Directory"도 변경해야합니다.
Priyank

확인해야 할 수 있습니다 "네이티브 코드 디버깅 사용" (프로젝트 속성 → 디버그디버거를 사용 ).
Peter Mortensen

40 개의 프로젝트가 포함 된 전체 솔루션에 대해이 작업을 어떻게 수행합니까?
Tony Tannous

23

시작시 예외를 발생시켜 충돌이 발생한 외부 생성 프로세스에서 C ++ 플러그인을 디버깅하고 있었는데 이것은 저에게 완벽하게 작동했습니다.

Visual Studio 용 무료 Reattach Extension을 추가합니다 . 시작하기 전에 프로세스 이름에 다시 연결하도록 요청하십시오. 프로세스 이름이 시작되기를 기다리고 있다는 모달 대화 상자가 나타납니다.

이제 프로세스를 시작하면 Visual Studio 디버거가 즉시 연결되어 예외를 포착하고 중단 점에 도달합니다.


천 번 그렇습니다!
itslittlejohn 2015-06-16

교착 상태가 있습니다. 내 대상이 시작될 때 관리자 인증을 요청했으며 pwd를 입력하고 다시 시작한 후 Reattach가 사라졌습니다. 관리자 인증이없는 경우에만 Reattach가 포함됩니다.
에릭

2
나를 위해 작동하지 않습니다. 충돌이 이미 발생한 후에도 여전히 너무 늦게 연결됩니다. 1 초에 한 번씩 기존 프로세스를 확인하는 것 같습니다.이 응용 프로그램에는 전혀 의미가 없습니다.
riv

20

Visual Studio 2017-2019가있는 경우 다음 단계를 따르세요.

  1. 파일> 열기> 프로젝트 / 솔루션
  2. .exe 선택
  3. 디버그> 디버깅 시작

다른 제안보다 훨씬 쉽습니다. 프로젝트 속성을 엉망으로 만들 필요가 없으며 확장이 필요하지 않습니다.


그러나 당신은 자동으로 찾을 수없는 경우 디버깅 심볼은 Visual Studio를 얘기해야합니다
매트 토마스에게

1
5 초 만에 빠르고 쉽게 할 수 있습니다. 감사합니다
ComradeJoecool

1
내 exe가 시작되었지만 중단 점을 설정할 수 없습니다. 어떻게해야합니까?
에릭

2
@Eric 위의 의견 이 문제를 해결하지 못하면 의견 대신 SO 질문으로 묻는 것이 좋습니다. 문제의 가시성이 더 높아지고 특정 시나리오를 설명 할 수있는 기회가 주어집니다. 그런 다음 찾은 내용을 알려주십시오!
Matt Thomas

11

비슷한 것을 찾고있을 때이 대답을 찾았습니다. 제 경우에는 쉽게 재현 할 수없는 매우 특정한 환경 (즉, cygwin에서 시작)에서 시작해야했기 때문에 실행 파일을 프로젝트의 시작 프로그램으로 단순히 사용할 수 없었습니다.

mrstrange가 제안한 Reattach Extension과 매우 유사한 Attach To Anything 을 살펴 보았습니다. 확장 봤지만 내 실행 파일이 너무 빨리 확장 프로그램이 알리고 첨부 할 수 없었습니다.

마지막으로 도움이 된 것은 https://stackoverflow.com/a/4042545/1560865 였습니다.이 문서는 MSDN 문서 How to : Launch the Debugger Automatically 를 참조 하며 다음 단계를 차례로 나열합니다.

  1. 레지스트리 편집기 (regedit)를 시작합니다.
  2. 레지스트리 편집기에서 HKEY_LOCAL_MACHINE 폴더를 엽니 다.
  3. HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image 파일 실행 옵션으로 이동합니다.
  4. 에서 이미지 파일 실행 옵션 폴더와 같은 디버깅 할 응용 프로그램의 이름을 찾을 수 MyApp.exe의를 . 디버깅 할 응용 프로그램을 찾을 수없는 경우 :
    a. 이미지 파일 실행 옵션 폴더를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 새 키를 클릭 합니다 .
    비. 새 키를 마우스 오른쪽 버튼으로 클릭하고 바로 가기 메뉴에서 이름 바꾸기를 클릭 합니다. 씨. 키 이름을 애플리케이션 이름으로 편집하십시오. myapp.exe이 예에서는 입니다.
  5. myapp.exe 폴더를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 새 문자열 값을 클릭 합니다. .
  6. 새 문자열 값을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 이름 바꾸기를 클릭합니다.
  7. 이름을 다음으로 변경하십시오. debugger .
  8. 새 문자열 값을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 수정을 클릭 합니다. 문자열 편집 대화 상자가 나타납니다.
  9. 에서 값 데이터 상자에vsjitdebugger.exe .
  10. 클릭 OK .
  11. 로부터 레지스트리 메뉴를 클릭 종료 .
  12. vsjitdebugger.exe를 포함하는 디렉토리는 시스템 경로에 있어야합니다. 시스템 경로에 추가하려면 다음 단계를 따르십시오
    . 열기 제어판을 클래식보기에서 두 번 클릭 시스템 .
    비. 고급 시스템 설정을 클릭 합니다 .
    씨. 에서 시스템 등록 정보 , 클릭 고급 탭을 선택합니다.
    디. 온 고급 탭을 클릭 환경 변수 .
    이자형. 에서 환경 변수 대화 상자에서 시스템 변수 를 선택 경로 , 다음을 클릭 편집 버튼을 클릭합니다.
    에프. 에서 편집 시스템 변수대화 상자에서 디렉터리를 추가합니다 대화 상자 . 변수 값 상자. 세미콜론을 사용하여 목록의 다른 항목과 구분하십시오.
    지. 확인 을 클릭 하여 시스템 변수 편집 대화 상자 를 닫습니다 .
    h. 확인 을 클릭 하여 환경 변수 대화 상자 를 닫습니다 .
    나는. 확인 을 클릭 하여 시스템 속성 을 닫습니다.
  13. 이제 아무 방법이나 사용하여 응용 프로그램을 시작하십시오. Visual Studio가 시작되고 응용 프로그램을로드합니다.

이것이 앞으로 다른 사람에게 도움이되기를 바랍니다!


3
다음은 최신 버전의 VS (2019 년까지)에서 동일한 프로세스에 대한 지침입니다. docs.microsoft.com/en-us/visualstudio/debugger/…
brichins

3

프로세스가 없으면 Visual Studio가 연결할 수 없습니다. .

그러나 프로젝트의 시작 프로그램을 프로젝트의 출력이 아닌 다른 것으로 설정할 수 있습니다.


나는 내가하고 싶은 것이 옳은지 이미 조사했고 실제로는 옳았다. 내 상황은 일반적인 Visual Studio 디버깅 사례가 아닙니다. Visual Studio에서 개발 된 Excel 2010 템플릿 프로젝트가 있고 템플릿 시트에 시작 이벤트가 있습니다. Visual Studio에서이 템플릿을 실행하고 Excel 시트에 데이터를 추가하고 파일을 디스크에 저장합니다. 그런 다음 템플릿 어셈블리에 의존하는이 파일을 열 수있는 유일한 방법은 탐색기에서 파일을 여는 것이므로이 경우 시작 이벤트를 디버그 할 수 없으며 물론 데이터 바인딩과 같은 시작시 데이터 처리가 일부 있습니다.
Ucodia 2011

확인해야 할 수 있습니다 "네이티브 코드 디버깅 사용" (프로젝트 속성 → 디버그디버거를 사용 ).
Peter Mortensen

3

MessageBox를 표시하면 응용 프로그램이 차단되고 디버거를 프로세스에 연결하거나 다시 연결하고 확인을 클릭하여 계속합니다.

MessageBox.Show("Attach process to debugger and click ok!");

Winforms를 사용하는 경우 Form 생성자에 추가 할 수 있으므로 구성 요소 초기화를 제외하고 다른 작업보다 먼저 실행됩니다.

public MainForm()
{
    InitializeComponent();
    MessageBox.Show("Attach process to debugger and click ok!");
}

디버깅이 끝나면 해당 줄을 주석 처리하십시오.


3

다음을 통해 코드에서 디버거를 시작할 수 있습니다.

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

그러나 응용 프로그램을 배송하기 전에이 줄을 제거하지 마십시오. 컴파일러 플래그를 사용하여 다음을 확인하고 싶을 수도 있습니다.

    public static void Main(string[] args)
    {
      #if debug
      System.Diagnostics.Debugger.Launch();
      #endif
    }

2
이것은 외부 프로세스가 애플리케이션을 시작하기를 기다리는 모든 경우에 허용되는 답변이어야합니다.
TravelingFox

2

많은 사람들에게 적합한 하나의 작은 해결책.

  • exe가 실행할 코드의 첫 번째 줄에 다음 명령을 추가합니다.

    System.Threading.Thread.Sleep (20000)

그러면 exe가 처리를 시작하기 전에 20 초 동안 잠자기 상태가됩니다. 그런 다음 ctrl + alt + p를 사용하여 신속하게 수행 할 수있는 프로세스에 연결하는 데 20 초가 걸립니다. 그런 다음 프로세스를 찾은 다음 입력하여 연결합니다.

대답은 많지 않지만 나를 위해 치료를 받았습니다 :-)


소스 코드가있는 "C"로 작성된 CGI를 디버깅해야했습니다. 저는 배경 프로세스에 시간을 할애 할 수있는 간단하고 쉬운 솔루션이었습니다.
Joël Hecht
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.