혹시 다른 프로젝트를 디버깅 할 수 있는 방법이 있을가요?

안녕하세요.
제가 제작한 코드는 아니고 만들어저 있는 프로젝트를 확인해 보고 있습니다.
그런데 이게 1개의 솔루션에 여러개의 프로젝트가 있고 그래서 하나의 프로젝트에서
실행하면 거기서 어떤 동작을 하다 해당 프로젝트가 종료되고 다른 프로젝트가 실행됩니다.

그래서 처음 시작하는 프로젝트에서는 브레이크 포인트가 잘 작동하는데
이제 해당 프로젝트가 종료되고 다른 프로젝트가 실행되면 브레이크 포인트가 동작을 안하네요.

그래서 뭐 Attach Process인가로 실행 중인 프로그램도 디버깅이 가능하다는 걸 검색해서
찾아서 해봤더니 여전히 브레이크 포인트에는 멈추질 않네요.

혹시 방법이 없을가요?

1개의 좋아요

다른 프로젝트가 실행 될 때 실행된 프로젝트가 Debug 구성으로 되어 있는지 확인해 보시고 또는 해당 프로젝트의 시작 위치에 System.Diagnostics.Debugger.Launch()을 삽입해서 디버깅이 가능하도록 하고 확인해보시겠어요?

2개의 좋아요

잠시 나갔다와서 이제야 글을 확인했네요.
Debugger.Launch()를 프로젝트의 시작위치라는게 처음 시작하는 프로젝트의 시작을 말씀하시는건가요?
아니면 여러 프로젝트 중 브레이크 포인트를 하고 싶은 곳이 존재하는 프로젝트의 시작점을 말씀하시는건가요? 그리고 시작점이라 하면 디자이너의 구현 코드 부분으로 InitializeComponent() 밑에 말씀하시는거죠?

1개의 좋아요

비주얼 스튜디오 상단에 프로젝트 실행 화살표 옆에 프로젝트 처음 시작 할 프로젝트 선택하고
해당 부분에서는 옆에 Debug로 되어있는데요. 그런데 그렇게 실행 할 때는 디버그여도 이 프로젝트가 종료되고 다른 프로젝트가 실행 될 때는 Debug가 아닐 수도 있는건가요? 그래서 확인이 필요하다면 어떻게 확인 할 수 있을가요? 만약에 그냥 처음 시작 할 떄 비주얼 스튜디오에서의 Debug가 되어있는지 확인이라면 Debug로 된 상태에서 실행했습니다.

1개의 좋아요

브레이크 포인트를 하고 싶은 곳입니다. 시작점은 그 지점 이후로 디버그가 가능하므로 Program.cs 지점이 적절한 것 같습니다.

2개의 좋아요

A 프로젝트에서 B 프로젝트의 실행파일을 실행한다는 것은 Process.Start()로 해당 프로젝트의 실행파일을 실행했다는 것이고 비주얼 스튜디오에서 Debug로 설정한 것과 상관없이 실행하는 경로에 pdb 파일이 존재해야 하고 디버그 정보가 실행되는 B 프로젝트의 소스코드와 대응(최신의 것) 해야 합니다.

2개의 좋아요

빌드한 bin/debug폴더에 처음 실행할 때 프로젝트의 .pdb만 있고 나머지는 없는데 그래서 안되는건가요?

1개의 좋아요

디버그로 컴파일 했다면 디버그가 가능한 구성이 이미 준비 되었을꺼에요. 그것보다 최초 실행하는 프로젝트의 앱에서 호출하는 코드 (아마도 Process.Start())의 실행 파일 경로를 살펴보시고 그 경로가 디버그 경로 /bin/Debug/...인지를 먼저 살펴보셔야 할 듯 합니다.

2개의 좋아요
        Console.WriteLine("/C " + filename + " / " + startInfo.Arguments);
        process.StartInfo = startInfo;
        process.Start();

이렇게 되어 있어서 저기 위에 로그로 경로 찍어봐서 그 경로를 확인 해본겁니다
거기에 pdb가 처음 실행하는 프로젝트에 대한 pdb밖에 없네요.

1개의 좋아요

네 그럼 맞습니다. pdb 파일이 있어야 해요. 왜 없는지는 모르겠는데 그것은 filename의 경로를 추적해보시면 답을 얻으실 수 있을 것 같습니다.

2개의 좋아요

카테고리는 내용이 윈폼에 관련된 것은 아니여서 적절한 카테고리로 변경 해드렸습니다.

2개의 좋아요

감사합니다.
아하, 윈폼 프로그램이라 윈폼 Q/A 카테고리인줄 알았는데 아니였나보군요.

아, 아예 어떻게 해야할지 몰랐는데 이제 뭐를 해봐야 할지는 적어도 방향이 생겼네요.
그럼 말씀하신대로 pdb가 있어야 하고 해당 pdb가 있으면 위에 말씀하신 것처럼
Debugger.Launch()를 사용하면 되는건가요?

2개의 좋아요

네. 맞습니다. 프로세스에 연결로도 동일하게 가능은 하지만 프로세스가 시작하여 이미 중단점을 지나갈 수도 있으므로 Debugger.Launch()을 추천합니다.

2개의 좋아요

아하, 늦은 시간까지 답변 감사합니다!!

2개의 좋아요

언제든지 질문 환영합니다. 다만 질문글은 상황을 모르는 분도 이해할 수 있도록 내용을 작성해주시면 도움이 됩니다. 그리고 문제가 해결되었을 때 어떻게 해결되었는지 기록해주시면 다른 분들께 큰 도움이 되니 해결되시면 댓글 부탁 드릴께요 ^^

2개의 좋아요

네, 알겠습니다!

2개의 좋아요