본문 바로가기
C#

[C#] Debugger

by DANEW 2023. 10. 22.

디버깅을 위한 방법

- VS의 경우 디버그 메뉴 -> 프로세스에 연결: IED에서 설정한 중단점은 작동하지 않음
                                            응용프로그램 스스로 Debugger.Break 호출

 

Debugger 클래스

 

Debugger 클래스 (System.Diagnostics)

디버거와 통신할 수 있습니다. 이 클래스는 상속될 수 없습니다.

learn.microsoft.com

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