Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 193. C# - Visual Studio의 자식 프로세스 디버깅 [링크 복사], [링크+제목 복사],
조회: 6397
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

(시리즈 글이 4개 있습니다.)
VS.NET IDE: 47. Orcas - Web Browser Debugger를 이용한 보호 모드의 ActiveX 컨트롤 디버깅
; https://www.sysnet.pe.kr/2/0/500

디버깅 기술: 25. 보호 모드로 응용 프로그램 디버깅하는 방법
; https://www.sysnet.pe.kr/2/0/682

디버깅 기술: 26. 보호 모드로 응용 프로그램 디버깅하는 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/683

VS.NET IDE: 193. C# - Visual Studio의 자식 프로세스 디버깅
; https://www.sysnet.pe.kr/2/0/13720




C# - Visual Studio의 자식 프로세스 디버깅

실제로 테스트를 해볼까요? ^^

ConsoleApp1, ConsoleApp2 각각 2개의 Console Application을 다음과 같은 코드로 만듭니다.

// ConsoleApp1
using System.Diagnostics;

internal class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, ConsoleApp1!");

        Process.Start("ConsoleApp2.exe").WaitForExit();
    }
}

// ConsoleApp2

internal class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, ConsoleApp2!"); // 여기에 BP 설정
    }
}

이후 ConsoleApp1을 ("Set as Startup Project" 메뉴를 이용해) Startup Project로 설정하고, ConsoleApp2의 Console.WriteLine에 BP를 걸어 둔 다음 F5 디버깅으로 실행하면 BP가 안 걸립니다.

왜냐하면 기본적으로 Visual Studio는 (windbg와는 달리) 자식 프로세스에 대한 디버깅을 지원하지 않기 때문입니다. 대신 마이크로소프트는 이에 대한 보완으로 별도의 확장 패키지를 내놓았습니다.

Microsoft Child Process Debugging Power Tool (Visual Studio 2015, 2017, 2019)
; https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

Microsoft Child Process Debugging Power Tool 2022
; https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool2022

이것을 설치한 후, "Debug" / "Other Debug Targets" / "Child Process Debugging Settings" 메뉴를 선택하면 이런 창이 뜨는데,

vs_child_debug_1.png

위의 화면처럼 "Enable child process debugging"을 체크하고 "Save" 버튼을 누르면, 이제 자식 프로세스까지 디버깅이 가능합니다.




그런데, 위의 상태로 디버깅을 해도 여전히 ConsoleApp2의 BP는 걸리지 않습니다. 이에 대한 원인은, 위의 화면에서 잘 설명하고 있습니다.

This window controls which child processes are debugging, and what type of code is debugged within the process. Settings apply to the current solution.

This extension has two requirements: (1) the parent (launching) process must be debgged with the native (unmanaged) debug enging and (2) the parent process much launch the child process using the CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW or CreateProcessWithLogonW Win32 APIs.


따라서, 닷넷 프로세스에 대한 디버깅의 경우 "Startup Project"로 지정된 프로젝트의 속성 창에서 "Debug" / "General"의 "Open debug launch profiles UI" 링크를 눌러 나오는 "Enable native code debugging"을 체크해야 합니다.

이후, 다시 F5 디버깅을 하면 ConsoleApp2의 BP가 걸립니다. (사실, 이에 대한 언급이 "Microsoft Child Process Debugging Power Tool" 소개 페이지에 실려 있습니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/29/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 136  137  [138]  139  140  141  142  143  144  145  146  147  148  149  150  ...
NoWriterDateCnt.TitleFile(s)
1604정성태1/23/201421442오류 유형: 216. 윈도우 서버 백업 - Hyper-V 가상 머신이 백업되지 않는 경우 (2)
1603정성태1/23/201433581개발 환경 구성: 211. Hyper-V - Generation 2 유형의 VM 생성 시 ISO 부팅이 안된다면? [1]
1602정성태1/22/201423712디버깅 기술: 62. windbg - 사용자 모드 원격 디버깅
1601정성태1/22/201427349오류 유형: 215. windbg - Symbol file could not be found. Defaulted to export symbols
1600정성태1/19/201423943.NET Framework: 410. C# - 재귀호출을 스택 자료구조와 반복문을 이용해 대체하는 방법을 Paralle.For와 함께? [1]파일 다운로드1
1599정성태1/18/201432070.NET Framework: 409. C# - 재귀호출을 스택 자료구조와 반복문을 이용해 대체하는 방법 [1]파일 다운로드1
1598정성태1/17/201425480디버깅 기술: 61. NT 서비스 시작 단계에서 닷넷 메서드에 BP를 걸어 디버깅하는 방법
1597정성태1/17/201424058Phone: 9. Xamarin Android에 구글 AdMob 사용하는 방법 [1]
1596정성태1/17/201423010오류 유형: 214. Local SYSTEM 계정으로 실행된 IE에서 다운로드가 안 되는 문제
1595정성태1/16/201419996오류 유형: 213. attrib - Not resetting system file
1594정성태1/15/201422172오류 유형: 212. 마이크로소프트 라이브 계정 로그인 실패하는 경우
1593정성태1/14/201420758오류 유형: 211. ASP.NET 응용 프로그램을 IIS Express에서 디버깅할 때 "Requested registry access is not allowed" 오류 발생
1592정성태1/14/201421080오류 유형: 210. 2대의 AD가 있는 경우 도메인에 컴퓨터 추가를 실패한다면? [1]
1591정성태1/14/201423265오류 유형: 209. DebugDiag: Unable to find mscordacwks_x86_x86_[...version...].dll
1590정성태1/14/201423904오류 유형: 208. VSS Writer - NTDS 오류
1589정성태1/14/201432835Windows: 85. 컴퓨터를 껐는데도 어느 순간 자동으로 켜진다면? [2]
1588정성태1/14/201429543Windows: 84. 윈도우 7/8 - 메뉴 항목이 잔상으로 남는 문제
1587정성태1/14/201425546디버깅 기술: 60. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (2)
1586정성태1/14/201427214디버깅 기술: 59. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (1) [1]
1585정성태1/14/201430156VS.NET IDE: 84. Visual Studio를 이용한 파일 비교(diff)
1584정성태1/13/201432468Windows: 83. 윈도우 8 - UI가 있는 프로그램을 Local SYSTEM 권한의 세션 0 데스크톱에서 실행하는 방법
1583정성태1/13/201430413Windows: 82. 윈도우 8 - "Interactive Services Detection" 서비스 시작하는 방법 [1]
1582정성태1/12/201428883개발 환경 구성: 210. 원격 데스크톱(RDP) 접속 프로그램 - Royal TS [1]
1581정성태1/12/201430218.NET Framework: 408. 자바와 닷넷의 제네릭 차이점 - 중간 언어 및 공변/반공변 처리 [8]
1580정성태1/12/201440304.NET Framework: 407. 닷넷 사용자 정의 예외 클래스의 최소 구현 코드 [1]
1579정성태1/12/201422273오류 유형: 207. System.ArgumentException was unhandled - Message=[net_WebHeaderInvalidControlChars]
... 136  137  [138]  139  140  141  142  143  144  145  146  147  148  149  150  ...