성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Visual Studio 2010 - .NET Framework 소스 코드 디버깅</div> <br /> .NET Framework 소스 코드 디버깅에 대한 방법이 2가지로 나뉩니다.<br /> <br /> <ol> <li>모든 소스 코드 파일을 한꺼번에 다운로드해서 디버깅</li> <li>그때그때 필요한 소스 코드만 다운로드하면서 디버깅</li> </ol> <br /> 첫 번째 방법 먼저 설명하면, 그동안 아래와 같은 식의 우회 방법도 공개되긴 했었는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > .NET Framework 소스 전체 다운로드 - Net Mass Downloader ; <a target='_tab' href='http://www.sysnet.pe.kr/1/0/714'>http://www.sysnet.pe.kr/1/0/714</a> </pre> <br /> 이제는 아예 공식적으로 다음의 Microsoft 사이트에서 배포가 되고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > .NET Framework Libraries Available Source Code Components ; <a target='_tab' href='http://referencesource.microsoft.com/netframework.aspx'>http://referencesource.microsoft.com/netframework.aspx</a> </pre> <br /> 2011-03-29 일자 기준으로 대략 아래와 같은 .NET Framework 소스 코드들이 공개되어 있습니다.<br /> <br /> <ul> <li>.NET 8.0 </li> <li>dotnetfx1434_VistaWin2k8sp1 50727.1434 </li> <li>FXUpdate3074 50727.3074 </li> <li>ASP.NET_MVC 1.0 </li> <li>WCF 3.5SP1 </li> <li>WF 3.5SP1 </li> <li>Dotnetfx_Vista_SP2 50727.4016 </li> <li>Dotnetfx_Win7_3.5.1 3.5.1 </li> <li>ASP.NET_MVC 2.0 </li> <li>.Net 4 </li> <li>.NET_3.5_sp1_redist 50727.3053 </li> <li>ASP.NET_MVC 3 </li> </ul> <br /> 이를 이용한 소스 코드 디버깅 방법은 다음의 글에서 상세하게 설명되고 있으니 생략합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Step Into .NET Framework 4.0 Source Code ; http://blogs.microsoft.co.il/blogs/arik/archive/2010/07/12/step-into-net-framework-4-0-source-code.aspx ; <a target='tab' href='https://dzone.com/articles/step-net-framework-40-source'>https://dzone.com/articles/step-net-framework-40-source</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 닷넷 프레임워크 소스 코드 디버깅 관련해서 대부분의 개발자들이 문제를 겪는 부분은 "필요한 소스 코드만 디버깅 시에 다운로드"하는 방법을 적용할 때입니다. 왜냐하면, 이를 위한 설정에 약간의 주의를 기울여야 하는 부분이 있기 때문입니다.<br /> <br /> 소스 코드 디버깅을 위해서는 "소스 코드 연결 정보"를 가지고 있는 "PDB 심벌" 파일이 필요합니다. 그런데, 같은 System.Windows.Forms.pdb 파일이라고 해도 마이크로소프트가 제공하는 심벌 서버에 따라 2가지로 나뉜다는 데에 문제가 있습니다.<br /> <br /> <ol> <li>마이크로소프트 공용 PDB 심벌 파일 배포 서버: http://msdl.microsoft.com/download/symbols</li> <li>.NET Framework 소스 서버와 연결된 심벌 파일 배포 서버: http://referencesource.microsoft.com/symbols </li> </ol> <br /> 따라서, 만약 여러분들이 1번의 심벌 서버를 지정해서 System.Windows.Forms.pdb 파일을 다운로드하게 되면 소스 코드 디버깅이 자동으로 연동되지 않습니다. 즉, 2번 항목의 심벌 서버를 지정해 주어야 합니다.<br /> <br /> 그럼, 어떤 경우에 1번을 사용하게 될까요? 아마도 C/C++ 개발을 병행하는 경우 무심코 지정해 놓은 "_NT_SYMBOL_PATH" 환경변수를 통해서 소스 서버와 연동이 안되는 PDB 파일들이 로컬에 캐쉬되어 있을 가능성이 있습니다. 또는 Visual Studio 2010의 디버그 심벌 대화 상자에 아래와 같이 "Microsoft Symbol Servers"를 설정한 경우입니다.<br /> <br /> <img alt='how_to_debug_netfx_with_src_1.png' src='/SysWebRes/bbs/how_to_debug_netfx_with_src_1.png' /><br /> <br /> 자... 이제 거의 해답이 나온 것 같군요. 만약 자신의 컴퓨터에서 "닷넷 소스 코드 디버깅"이 안되고 있다면 로컬에 다운로드 받은 PDB 파일이 "<a target='_tab' href='http://msdl.microsoft.com/download/symbols'>http://msdl.microsoft.com/download/symbols</a>"로부터 캐시된 것이 아닌가 의심을 해봐야 합니다. 하지만, 굳이 확인 방법을 찾기보다는 그냥 "Cache symbols in this directory"에 지정된 폴더를 탐색기에서 모두 지우는 것이 편합니다. (위의 그림에서는 E:\Symbols 폴더)<br /> <br /> 그다음, 디버그 옵션 창에서 다음과 같은 3가지 옵션을 각각 설정/해제해 주면 됩니다.<br /> <br /> <img alt='how_to_debug_netfx_with_src_2.png' src='/SysWebRes/bbs/how_to_debug_netfx_with_src_2.png' /><br /> <br /> <ul> <li>Enable Just My Code (Managed only) - 해제</li> <li>Enable .NET Framework source stepping - 설정</li> <li>Require source files to exactly match the original version - 해제</li> </ul> <br /> (이와 함께, 반드시 디버깅 옵션의 Symbols 탭에서도 "Microsoft Symbol Servers"를 해제하는 것을 잊지 않아야 하겠지요.)<br /> <br /> Visual Studio 2010에서는 위와 같이만 설정해주면, PDB 파일을 우선적으로 referencesource.microsoft.com에서 받으려고 시도합니다.<br /> <br /> 마지막으로, 중요 사항 한 가지 더!<br /> <br /> 제 경험에 의하면, referencesource.microsoft.com에서 배포되는 PDB 파일들이 그다지 안정적으로 다운로드가 가능하지 않았었습니다. 실제로, 아래의 화면은 Fiddler로 네트워크 패킷을 검색한 것인데요.<br /> <br /> <img alt='how_to_debug_netfx_with_src_3.png' src='/SysWebRes/bbs/how_to_debug_netfx_with_src_3.png' /><br /> <br /> 보시는 것처럼, System.Xml.Linq.pdb, System.DataSetExpressions.pdb, System.Drawing.pdb 파일들만을 정상적으로 referencesource.microsoft.com에서 받았을 뿐 그 이외의 심벌 파일들은 msdl.microsoft.com에서 2차 시도로 다운로드 받는 것을 볼 수 있습니다. 이렇게 되면 System.Drawing에 포함된 타입(예: Bitmap)에 대해서는 소스 코드 디버깅이 가능하지만, System.Windows.Forms에 포함된 타입에 대해서는 연동이 안되는 이상한 문제를 겪게 됩니다. (음... 분명히 제가 어제 밤에 테스트했을 때는 "System.Windows.Forms.pdb" 파일도 referencesource.microsoft.com에서 받을 수가 있었습니다.)<br /> <br /> 대충 이 정도만 알고 계시면... 소스 코드 디버깅이 안되는 문제에 대한 해답은 그때그때 스스로 찾을 수 있을 것입니다.<br /> <br /> 설명 끝! ^^<br /> <br /> <br /><br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2634
(왼쪽의 숫자를 입력해야 합니다.)