.NET에서 현재 스택 추적을 예외 없이 인쇄하는 방법은 무엇입니까?
저는 일반적인 C# 코드를 가지고 있습니다.저는 예외가 없습니다.디버깅을 위해 현재 스택 추적을 프로그래밍 방식으로 기록하고 싶습니다.예:
public void executeMethod()
{
logStackTrace();
method();
}
네임스페이스를 확인합니다.그 안에 맛있는 것들이 많이 있습니다!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
이것은 후드 아래에서 무슨 일이 일어나고 있는지 알아보기 위해 둘러보는 것이 정말 좋습니다.
목적을 달성할 수 있는 로깅 솔루션(예: NLog, log4net 또는 Microsoft 패턴 및 관행 Enterprise Library)을 검토해 보는 것이 좋습니다.
의 대안System.Diagnostics.StackTrace
시스템을 사용합니다.환경.스택 추적 - 스택 추적의 문자열 표현을 반환합니다.
또 다른 유용한 옵션은 다음을 사용하는 것입니다.$CALLER
그리고.$CALLSTACK
Visual Studio의 디버깅 변수는 응용 프로그램을 다시 빌드하지 않고 런타임에 활성화할 수 있기 때문입니다.
두 가지 방법이 있습니다.그System.Diagnostics.StackTrace()
현재 스레드에 대한 스택 추적을 제공합니다.에 대한 참조가 있는 경우Thread
인스턴스, 당신은 오버로드된 버전을 통해 그것에 대한 스택 추적을 얻을 수 있습니다.StackTrace()
.
스택 오버플로 문제 비현재 스레드의 스택 추적을 가져오는 방법을 확인할 수도 있습니다.
코드를 수정하지 않고 Visual Studio 디버거에서도 이 작업을 수행할 수 있습니다.
- 스택 추적을 볼 중단점을 만듭니다.
- 중단점을 마우스 오른쪽 단추로 클릭하고 "수행"을 선택합니다.VS2015에서.VS2010에서 "When Hit..."를 선택한 다음 "Print a message..."를 사용하도록 설정합니다.
- "실행 계속"이 선택되었는지 확인합니다.
- 인쇄할 텍스트를 입력합니다.
- 스택 추적을 보고 싶은 곳에 $CALLSTACK을 추가합니다.
- 디버거에서 프로그램을 실행합니다.
물론 다른 컴퓨터에서 코드를 실행하는 경우에는 도움이 되지 않지만 릴리스 코드에 영향을 주거나 프로그램을 다시 시작할 필요 없이 스택 추적을 자동으로 뱉을 수 있기 때문에 매우 편리할 수 있습니다.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
출력은 다음과 유사합니다.
사용자 네임스페이스에서.프로그램.executeMethod(문자열 메시지)
사용자 네임스페이스에서.프로그램.주(문자열[] 인수)
교체하다Console.WriteLine
당신과 함께Log
방법.사실, 그럴 필요는 없습니다..ToString()
콘솔용입니다.WriteLine 대소문자를 그대로 사용합니다.object
그러나 Log(string msg) 메서드에 필요할 수도 있습니다.
이것은 저에게 효과가 있었습니다.
Debug.WriteLine(Environment.StackTrace);
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
나한테 효과가 있는 것 같아요.
언급URL : https://stackoverflow.com/questions/531695/how-to-print-the-current-stack-trace-in-net-without-any-exception
'programing' 카테고리의 다른 글
Swift의 닙에서 사용자 지정 UITableViewCell (0) | 2023.05.24 |
---|---|
Razor_layout.cshtml에 파일 이름에 선행 밑줄이 있는 이유는 무엇입니까? (0) | 2023.05.24 |
따옴표를 자동으로 닫는 성가신 일식 (0) | 2023.05.24 |
'WinMain@16'에 대한 정의되지 않은 참조 (0) | 2023.05.24 |
int를 두 개의 반바지(.NET)로 나누는 좋은 방법이 있습니까? (0) | 2023.05.24 |