developer tip

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

copycodes 2020. 11. 14. 10:44
반응형

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


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

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

물론 Thread.Sleep(1000)Visual Studio에서 프로세스를 연결할 시간을주기 위해 시작 이벤트에 추가하는 것은 불가능합니다!


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

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

여기에 이미지 설명 입력

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


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

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

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


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

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

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


비슷한 것을 찾고있을 때이 대답을 찾았습니다. 제 경우에는 쉽게 재현 할 수없는 매우 특정한 환경 (즉, 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가 시작되고 응용 프로그램을로드합니다.

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


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

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


One little solution that might suit many people.

  • in the first line of code that the exe will run, add this command

    System.Threading.Thread.Sleep(20000)

That will make the exe sleep for 20 seconds before it starts processing anything. Then you have 20 seconds to attach to the process, which can be done quickly with ctrl+alt+p, then find the process, then enter to attach.

Not much of an answer but worked a treat for me :--)


You can show a MessageBox, this would block the application, then you attach or reattach the debugger to the process and click ok to continue:

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

you can add it to the Form constructor (if you use winforms), so this would be executed before anything else, except for the initialization of components:

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

When you finish your debugging, comment out that line.

참고 URL : https://stackoverflow.com/questions/8167610/how-do-i-attach-visual-studio-to-a-process-that-is-not-started-yet

반응형