목록(List) 타입의 값을 디버깅 중 Watch 창에서 확인하는 방법
간단한 예로, 다음과 같은 코드를 디버거로 구동해 BreakPoint를 찍어 list를 watch 창에서 확인하면,
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
for (int i = 0; i < 5; i ++)
{
list.Add(i); // 이 라인에 BreakPoint를 걸음.
}
}
}
다음과 같이 "Value" 칼럼에는 Count만 나옵니다.
값을 보기 위해 "list" 이름의 왼쪽에 있는 화살표를 누르면 다음과 같이 펼쳐지긴 하는데요.
문제는, F10/F11 키를 눌러 디버깅을 진행하면 항목이 추가될 때마다 펼쳐놓은 것이 접히게 되어 값을 확인하려면 다시 Watch 창에서 왼쪽의 펼침 마크를 눌러줘야 합니다. 디버깅하다보면 이 작업이 여간 귀찮지 않은데요. 그냥 차라리 Value 칼럼에 값을 보여주면 좋겠는데... 애석하게도 방법이 없습니다.
얼핏, 비주얼 스튜디오에서 제공하는 Visualizer 확장을 이용해 해결할 수 있을 듯 싶지만,
How to: Write a Visualizer
; https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/debugger/how-to-write-a-visualizer
Comprehensive list of Debugger Visualizers for Visual Studio
; http://alexpinsker.blogspot.kr/2009/06/comprehensive-list-of-debugger.html
아쉽게도 디버거 비주얼라이저는 반드시 창을 띄워서 해결해야 하고, 게다가 모달(modal) 형식으로 뜨기 때문에 F10/F11 키를 눌러 디버깅을 진행하려면 다시 창을 닫아야 하는 불편함이 있습니다. 다음은 이에 대한 개선 요청입니다. (저도 투표했습니다. ^^)
Make the debugging Visualizers non-modal windows
; http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/5711364-make-the-debugging-visualizers-non-modal-windows
정식 해결책은 아니지만, 그래도 개인적으로 쓰고 있는 팁이 있다면 다음과 같은 식입니다. DEBUG 모드에서만 컴파일되도록 도우미 클래스를 하나 만들고,
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
#if DEBUG
ListDebugHelper<int> listLDH = new ListDebugHelper<int>(list, ", ");
#endif
for (int i = 0; i < 5; i++)
{
list.Add(i);
}
}
}
#if DEBUG
class ListDebugHelper<T>
{
IEnumerable<T> _list;
string _split = string.Empty;
public ListDebugHelper(IEnumerable<T> list) : this(list, string.Empty)
{
}
public ListDebugHelper(IEnumerable<T> list, string split)
{
_list = list;
_split = split;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
foreach (var item in _list)
{
sb.Append(item);
sb.Append(_split);
}
return sb.ToString();
}
}
#endif
그것의 인스턴스를 Watch 창에 등록해 두면 다음과 같이 Value 칼럼을 통해 직접 확인할 수 있습니다.
혹시 개인적으로 사용하고 있는 더 나은 팁이 있으시다면 덧글 공유 부탁드립니다. ^^
(
첨부한 파일은 위의 예제를 테스트한 코드입니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]