성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Visual Studio 2010 - Parallel Stacks</div><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;' > Parallel Stacks - another new VS2010 debugger window ; <a target='_tab' href='http://www.danielmoth.com/Blog/Parallel-Stacks-Another-New-VS2010-Debugger-Window.aspx'>http://www.danielmoth.com/Blog/Parallel-Stacks-Another-New-VS2010-Debugger-Window.aspx</a> </pre> <br /> 오... 멋집니다. 다중 스레드의 생성 흐름을 시각적으로 보여줍니다.<br /> <br /> 일례로 [그림 1]은 WPF 응용 프로그램 실행 시에 Application::OnStartup 이벤트에서 디버거 중단점을 잡고 "Debug" / "Windows" / "Parallel Stacks" 뷰를 선택한 것입니다. 기본 설정으로는 "Tools" / "Options" / "Debugging" - "Enable Just My Code" 옵션을 켠 상태의 콜 스택 뷰처럼 로드된 프로젝트와 소스 코드가 연관된 다이어그램으로 제한해서 보여줍니다. 만약 "Enable Just My Code"를 끈 효과를 내려면 "Parallel Stacks" 뷰의 오른쪽 버튼 메뉴에서 "Show External Code"를 선택하면 다음과 같이 자세하게 나옵니다.<br /> <br /> [그림 1: 새로 추가된 Parallel Stacks 뷰]<br /> <img alt='vs2010_Parallel_Stacks_view_1.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_1.png' /><br /> <br /> 해석하는 방법은 간단합니다. 맨 아래에 있는 "파란색 상자"를 실행하는 스레드가 최초 실행이 되었는데, 거기서 스레드를 3개 생성한 것입니다. 각각의 다이어그램에 있는 "n Threads" 위에 마우스를 올리면 관련 스레드의 ID를 알아낼 수 있습니다.<br /> <br /> [그림 2: 스레드 ID 확인]<br /> <img alt='vs2010_Parallel_Stacks_view_2.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_2.png' /><br /> <br /> 또한, 현재 "Call Stack" 뷰에서 다뤄지고 있는 스레드가 어떤 스레드인지를 "파란색 화살표"와 "파란색 상자"를 통해서 알 수 있습니다. 나머지 회색 상자는 실행은 되고 있지만 현재 디버깅 대상으로 선택되지 않은 스레드(즉, Call stack에 나타나지 않는 스레드)임을 나타냅니다. <br /> <br /> [그림 3: 검은색 화살표와 회색 상자 - 현재 선택된 스레드가 아님]<br /> <img alt='vs2010_Parallel_Stacks_view_3.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_3.png' /><br /> <br /> [그림 4: 파란색 화살표와 파란 상자 - 선택된 스레드]<br /> <img alt='vs2010_Parallel_Stacks_view_4.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_4.png' /><br /> <br /> 메서드 옆에 나타나는 3개의 아이콘에 대해서도 설명을 하고 있는데, 의미는 "Call Stack"과 연계해서 보면 그리 어렵지 않게 알 수 있습니다.<br /> <br /> [그림 5: 노란색 화살표 - 현재 스레드의 활성화된 스택 프레임]<br /> <img alt='vs2010_Parallel_Stacks_view_5.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_5.png' /><br /> <br /> 즉, 노란색 화살표는 "디버깅 대상으로 선택된 스레드"가 실행하고 있는 코드를 담은 메서드임을 알려줍니다.<br /> <br /> 반면에 녹색 화살표는 "디버깅 대상으로 선택된 스레드"의 스택 프레임 중에 있는 메서드를 나타냅니다. 쉽게 생각해서 "Call Stack" 뷰에서 "노란색 화살표"가 있는 메서드를 실행하기까지 거쳐온 콜 스택의 한 메서드임을 알려줍니다. 사실, ^^ 별다르게 새로울 것이 없는 데 이미 기존에도 아래와 같이 노란색 화살표와 녹색 화살표가 동일하게 사용되어져 왔습니다.<br /> <br /> [그림 6: Call Stack에서와 동일한 의미의 녹색 화살표]<br /> <img alt='vs2010_Parallel_Stacks_view_6.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_6.png' /><br /> <br /> 마지막으로 물결 모양 아이콘(Cloth Icon이라고 써있지만.)도 있는 데, 디버깅 대상으로 선택되어 있지 않은 스레드들이 실행하고 있는 메서드의 스택 프레임을 가리킵니다.<br /> <br /> [그림 7: 물결 모양 아이콘 - 활성화된 스택 프레임]<br /> <img alt='vs2010_Parallel_Stacks_view_7.png' src='/SysWebRes/bbs/vs2010_Parallel_Stacks_view_7.png' /><br /> <br /> 이 정도면, 대략 눈에 익어지셨나요? <br /> <br /> 멀티 스레드 응용 프로그램을 위한 디버깅 도구를 Visual Studio 2010에서 제대로 지원해 주고 있군요. 두말할 것도 없이, 스레드 호출 관계의 시각화는 정말 반가운 기능입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 사용하다 보니, 한 가지 아쉬운 점이 있는데요.<br /> <br /> [그림 6]에서 보면 "Parallel Stacks" 뷰가 "Enable Just My Code"가 꺼진 것과 동일하게 모든 호출 스택 프레임을 보여주고 있습니다. 사실 "Show External Code" 메뉴와 "Enable Just My Code" 설정은 동일한 역할을 합니다. 그렇기 때문에 차라리 이 부분은 "Enable Just My Code"로 통합하면 좋았을 것 같습니다.<br /> <br /> 아쉬움을 넘어서 문제가 되는 부분도 있습니다. "Parallel Stacks" 뷰에서 선택한 "Show External Code" 설정이 "Parallel Stacks" 뷰를 닫은 상태에서도 유효하다는 것입니다. 심지어 프로젝트를 닫고 다시 열어도 "Call Stack"뷰는 "Enable Just My Code"가 켜져 있음에도 불구하고 여전히 모든 스택 프레임을 보여줍니다.<br /> <br /> 누가 이 부분에 대해 벌써 ^^ Bug Feedback을 제출해 놓았군요.<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;' > "Enable Just My Code" is turned off when "Show External Code" is checked once. ; <a target='_tab' href='https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=456565'>https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=456565</a> </pre> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
6406
(왼쪽의 숫자를 입력해야 합니다.)