.NET 소스 코드가 디버깅 중단 점을 하드 코딩 할 수 있습니까?
디버거에서 특정 중단 점을 설정하는 것을 기억할 필요없이 해당 지점에서 중단 점이 설정된 것처럼 소스 코드가 디버깅 중단을 트리거하는 방법을 .NET (2.0, 특히 C #)에서 찾고 있습니다. 프로덕션 런타임을 방해하지 않고
우리 코드는 프로덕션에서 예외를 삼켜야하므로 우리에게 연결되는 클라이언트 응용 프로그램을 방해하지 않도록 설정하려고합니다.하지만 디버거에서 실행되는 경우 이러한 오류가 분석되도록 팝업되도록 설정하려고합니다. , 그렇지 않으면 안전하게 무시됩니다.
사용하려는 시도 Debug.Assert(false)
는 이상적이지 않았 Debug.Fail()
으며 동일한 방식으로 작동 할 것이라고 가정합니다 . 이론적으로 프로덕션에 영향을 미치지 않아야하며 디버깅 할 때 성공적으로 중지되지만 실제 중단 점에서 할 수있는 것처럼 해당 오류를 무시하려는 경우 실행을 계속할 방법은 없습니다 (내가 말할 수있는 한). , 그리고 우리가 오류를 삼키는 프로덕션에서하는 것처럼. 또한 디버거가 실제로 우리 코드가 아닌 네이티브 시스템 코드에서 중지되기 때문에 변수 상태 평가가 중단되므로 디버깅 도움말이 제한됩니다. (어쩌면 변수 등을 살펴보기 위해 상황으로 되돌아가는 방법을 놓치고있을 수 있습니다. ???)
나는 Debug.Break()
.NET의 최신 버전에 있지 않는 한 존재하지 않는 것 같고 다른 Debug
방법도 적용 되지 않는 것 같습니다.
업데이트 : ctacke의 답변이 내가 찾고 있던 것과 가장 잘 어울리는 반면, 이후 Debug.Assert ()를 사용하여 트릭을 발견했습니다. 디버거에서 실행할 때 디버거를 일시 중지하고 디버그 코드로 이동하십시오. 호출 보류 (프레임 워크 코드에서 다운되었으므로 녹색으로 강조 표시됨)를 어설 션하고 Step-Out (shift-F11)을 누른 다음 어설 션 대화 상자에서 무시를 누르십시오. 이렇게하면 어설 션이 반환 될 때 디버거가 일시 중지 된 상태로 유지됩니다 (그리고 무시 되었기 때문에 발생하지 않은 것처럼 실행을 계속할 수 있음). 동일한 작업을 수행하는 다른 방법이있을 수 있지만 (재 시도를 누르면이 작업이 더 직접적으로 수행됩니까?),이 방법은 직관적이었습니다.
아마도 다음과 같은 것입니다.
if(System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
물론 그것은 릴리스 빌드에서 여전히 컴파일됩니다. 릴리스 빌드에 코드가 존재하지 않는 Debug 객체처럼 작동하도록하려면 다음과 같이 할 수 있습니다.
// Conditional("Debug") means that calls to DebugBreak will only be
// compiled when Debug is defined. DebugBreak will still be compiled
// even in release mode, but the #if eliminates the code within it.
// DebuggerHidden is so that, when the break happens, the call stack
// is at the caller rather than inside of DebugBreak.
[DebuggerHidden]
[Conditional("DEBUG")]
void DebugBreak()
{
if(System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
}
그런 다음 코드에 호출을 추가하십시오.
System.Diagnostics.Debugger.Break
?
4 줄이 아닌 한 줄의 코드 만 사용하려면
#if DEBUG
if (Debugger.IsAttached)
Debugger.Break();
#endif
으로
public static class DebugHelper
{
[DebuggerHidden]
[Conditional("DEBUG")]
public static void Stop()
{
if (Debugger.IsAttached)
Debugger.Break();
}
}
그리고 사용
DebugHelper.Stop();
DebuggerHiddenAttribute
디버거가 Stop
메서드 의 내부 코드에서 중지 하고 F11
.
한 번 작동하지 않는 상황이 발생했습니다.
System.Diagnostics.Debugger.Break();
그러나 이것은했다
System.Diagnostics.Debugger.Launch();
삼키더라도 디버거가 팝업되도록 Visual Studio를 구성하는 것은 어떻습니까?
이 작업을 수행:
- 디버그-> 예외 ...로 이동하십시오.
- 적절한 예외를 찾거나 자신의 경우 추가
- 예외에 대해 "Thrown"확인란을 선택합니다.
This will stop Visual Studio on the location that exception is thrown, not just if it isn't handled.
You can see more information here.
A nice trick I found is putting Debugger.Break() in the ctor of your Exception.
In Visual Studio 2010, hitting Retry on a Debug.Assert
dialog takes you to the failed debug assertion, just as if you had a breakpoint.
참고URL : https://stackoverflow.com/questions/361468/can-net-source-code-hard-code-a-debugging-breakpoint
'Development Tip' 카테고리의 다른 글
자바 스크립트 확장 클래스 (0) | 2020.11.03 |
---|---|
"IIS Express 웹 서버를 시작할 수 없습니다." (0) | 2020.11.03 |
Java 맵 항목 업데이트 (0) | 2020.11.03 |
Perl : if (목록의 요소) (0) | 2020.11.03 |
파이썬에서 정수를 반올림하는 방법 (0) | 2020.11.03 |