[visual-studio] 아직 시작되지 않은 프로세스에 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가 연결할 수 없습니다. .

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


답변

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

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

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

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

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


답변

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

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

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

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