Visual Studio의 코드 맵 을 사용하면 큰 코드 베이스, 익숙하지 않은 코드 또는 레거시 코드에서 손실되는 것을 방지할 수 있습니다. 예를 들어 디버깅할 때 여러 파일 및 프로젝트에서 코드를 살펴봐야 할 수 있습니다. 코드 맵을 사용하여 코드 조각을 탐색하고 코드 간의 관계를 이해합니다. 이렇게 하면 머리 속에서 이 코드를 추적하거나 별도의 다이어그램을 그릴 필요가 없습니다. 따라서 작업이 중단되면 코드 맵은 작업 중인 코드에 대한 메모리를 새로 고치는 데 도움이 됩니다.
편집기에서 커서가 표시되는 위치를 표시하는 녹색 화살표
코드 맵으로 작업할 때 사용할 수 있는 명령 및 작업에 대한 자세한 내용은 코드 맵 찾아보기 및 다시 정렬을 참조하세요.
디버거 도구를 사용하여 Visual Studio의 디버깅에 대해 자세히 알아봅니다.
비고
코드 맵을 만들고 편집하려면 Visual Studio Enterprise 버전이 필요합니다. Visual Studio Community 및 Professional 버전에서는 Enterprise 버전에서 생성된 다이어그램을 열 수 있지만 편집할 수는 없습니다.
문제 이해
작업 중인 그리기 프로그램에 버그가 있다고 가정해 보겠습니다. 버그를 재현하려면 Visual Studio에서 솔루션을 열고 F5 키를 눌러 디버깅을 시작합니다.
선을 그리고 마지막 스트로크 실행 취소를 선택하면 다음 선을 그릴 때까지 아무 일도 발생하지 않습니다.
Undo 메서드를 검색하여 조사를 시작합니다.
PaintCanvas 클래스에서 찾을 수 있습니다.
코드 매핑 시작
이제 undo 메서드 및 해당 관계를 매핑하기 시작합니다. 코드 편집기에서 undo 메서드와 메서드가 참조하는 필드를 새 코드 맵에 추가합니다. 새 맵을 만들 때 코드를 인덱싱하는 데 다소 시간이 걸릴 수 있습니다. 이렇게 하면 나중에 작업을 더 빠르게 실행할 수 있습니다.
팁 (조언)
녹색 강조 표시에는 지도에 추가된 마지막 항목이 표시됩니다. 녹색 화살표는 코드에서 커서의 위치를 표시합니다. 항목 간의 화살표는 서로 다른 관계를 나타냅니다. 마우스를 위로 이동하고 도구 설명을 검사하여 맵의 항목에 대한 자세한 정보를 얻을 수 있습니다.
맵에서 코드 탐색 및 검사
각 필드에 대한 코드 정의를 보려면 지도에서 필드를 두 번 클릭하거나 필드를 선택하고 F12 키를 누릅니다. 녹색 화살표가 지도의 항목 사이를 이동합니다. 코드 편집기에서 커서도 자동으로 이동합니다.
팁 (조언)
코드 편집기에서 커서를 이동하여 지도에서 녹색 화살표를 이동할 수도 있습니다.
코드 조각 간의 관계 이해
이제 history 및 paintObjects 필드와 상호 작용하는 다른 코드가 무엇인지 알고 싶습니다. 이러한 필드를 참조하는 모든 메서드를 맵에 추가할 수 있습니다. 맵 또는 코드 편집기에서 이 작업을 수행할 수 있습니다.
비고
Windows Phone 또는 Windows 스토어와 같은 여러 앱에서 공유되는 프로젝트의 항목을 추가하는 경우 해당 항목은 항상 현재 활성 앱 프로젝트와 함께 맵에 표시됩니다. 따라서 컨텍스트를 다른 앱 프로젝트로 변경하면 맵의 컨텍스트도 공유 프로젝트에서 새로 추가된 항목에 대해 변경됩니다. 맵의 항목으로 수행하는 작업은 동일한 컨텍스트를 공유하는 항목에만 적용됩니다.
레이아웃을 변경하여 관계 흐름을 다시 정렬하고 지도를 더 쉽게 읽을 수 있도록 합니다. 항목을 끌어서 맵 주위로 이동할 수도 있습니다.
팁 (조언)
기본적으로 증분 레이아웃 은 켜져 있습니다. 이렇게 하면 새 항목을 추가할 때 맵을 가능한 한 적게 다시 정렬합니다. 새 항목을 추가할 때마다 전체 맵을 다시 정렬하려면 증분 레이아웃을 해제합니다.
이러한 메서드를 살펴보겠습니다. 지도에서 PaintCanvas 메서드를 두 번 클릭하거나 이 메서드를 선택하고 F12 키를 누릅니다. 이 메서드는 history와 paintObjects을 빈 목록으로 생성한다는 것을 알게 됩니다.
이제 동일한 단계를 반복하여 메서드 정의를 검사합니다 clear . 이전에는 몰랐던 clear 및 paintObjects로 수행하는 작업들과 history의 역할을 배웁니다. 그런 다음 메서드를 호출합니다 Repaint .
이제 메서드 정의를 검사합니다 addPaintObject . 또한 다음과 같은 historypaintObjects일부 작업을 수행합니다. 또한 Repaint을(를) 호출합니다.
맵을 검사하여 문제 찾기
history 및 paintObjects을 수정하고 Repaint를 호출하는 모든 메서드가 존재하는 것 같습니다.
undo 메서드는 동일한 필드를 수정하더라도 Repaint을 호출하지 않습니다. 그래서 당신은 undo에서 Repaint을(를) 호출하여 이 문제를 해결할 수 있다고 생각합니다.
이 누락된 호출을 표시하는 맵이 없는 경우 특히 더 복잡한 코드에서 이 문제를 찾기가 더 어려웠을 수 있습니다.
검색 및 다음 단계 공유
사용자 또는 다른 사람이 이 버그를 수정하기 전에 맵에서 문제 및 해결 방법을 기록해 두면 됩니다.
예를 들어 맵에 주석을 추가하고 색을 사용하여 항목에 플래그를 지정할 수 있습니다.
Microsoft Outlook이 설치된 경우 지도를 다른 사용자에게 전자 메일로 보낼 수 있습니다. 맵을 이미지 또는 다른 형식으로 내보낼 수도 있습니다.
문제를 해결하고 사용자가 한 작업을 표시합니다.
이 버그를 해결하려면, Repaint 호출을 undo에 추가합니다.
수정 사항을 확인하려면 디버깅 세션을 다시 시작하고 버그를 재현해 봅니다. 이제 내 마지막 스트로크 실행 취소 를 선택하면 예상대로 작동하고 올바른 수정을 했는지 확인합니다.
맵을 업데이트하여 수정한 내용을 표시할 수 있습니다.
이제 맵에 실행 취소 와 다시 칠하기 사이의 링크가 표시됩니다.
비고
맵을 업데이트할 때 맵을 만드는 데 사용된 코드 인덱스가 업데이트되었다는 메시지가 표시될 수 있습니다. 즉, 다른 사용자가 코드를 변경하여 맵이 현재 코드와 일치하지 않습니다. 이렇게 해서 맵을 업데이트하는 것을 막을 수는 없지만 코드와 일치하는지 확인하기 위해 맵을 다시 만들어야 할 수도 있습니다.
이제 조사를 완료했습니다. 코드를 매핑하여 문제를 성공적으로 찾아 해결했습니다. 또한 코드를 탐색하고, 배운 내용을 기억하고, 문제를 해결하기 위해 수행한 단계를 보여 주는 맵도 있습니다.