디버깅을 위한 방법
- VS의 경우 디버그 메뉴 -> 프로세스에 연결: IED에서 설정한 중단점은 작동하지 않음
응용프로그램 스스로 Debugger.Break 호출
Debugger 클래스
namespace System.Diagnostics
{
public sealed class Debugger
{
// 사용되지 않음 - 인스턴스를 만들지 말고 써야함
public Debugger();
// 디버거와 연결되어 있는지 여부
public static bool IsAttached { get; }
// 디버거와 연결되어 로깅이 활성화 되어있는지 여부
public static bool IsLogging();
// 디버거를 띄워서 현재 프로세스에 부착, 해당 지점에서 실행 정지
public static void Break();
// 디버거를 띄워서 현재 프로세스에 부착, 실행
public static bool Launch();
// 디버거의 출력창에 메세지를 직접 기록
public static void Log(int level, string category, string message);
// 상수를 포함하는 메시지의 기본 범주 (?)
public static readonly string DefaultCategory;
// 실행에서 크로스 스레드 종속성과 관련된 경로를 입력한다고 디버거에 알림 (?)
public static void NotifyOfCrossThreadDependency();
}
}
- 디버거 연동을 위한 기본 기능 제공
DebuggerStepThrough 특성
- 디버거에게 사용자 상호작용 없이 함수를 단계별로 실행하라고 요청
반응형
DebuggerHidden 특성
- 프록시 메서드 등에 적용하여 실제 보고자 하는 내부 메서드에 집중
위 두 특성의 복합
- 자동으로 생성된 메서드들과 프록시 메서드들에 유용
- 프록시 메서드가 실행하는 실제 메서드에 중단점을 걸어도 호출 스택에는 프록시 메서드가 표시되기 때문에,
이를 피하기 위해서 위 두 속성을 적용 함
// 프록시 메서드
[DebuggerStepThrough, DebuggerHidden]
void Proxy()
{
// ...
Work();
// ...
}
// 실제 로직 메서드
void Work()
{
// ...
}
반응형
'C#' 카테고리의 다른 글
[C#] Stopwatch (0) | 2023.10.30 |
---|---|
[C#] PerformanceCounter, PerformanceCounterCategory (0) | 2023.10.28 |
[C#] EventLog (Windows 이벤트 로그) (0) | 2023.10.26 |
[C#] StackTrace, StackFrame (0) | 2023.10.24 |
[C#] Contract, Code Contracts(코드 계약) (0) | 2023.10.20 |
[C#] Debug, Trace (0) | 2023.10.18 |
[C#] WeakReference (0) | 2023.10.14 |
[C#] GC, GCSettings, 쓰레기 수거(Garbege Collection) (0) | 2023.10.12 |