programing

.NET에서 현재 스택 추적을 예외 없이 인쇄하는 방법은 무엇입니까?

megabox 2023. 5. 24. 21:50
반응형

.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 디버거에서도 이 작업을 수행할 수 있습니다.

  1. 스택 추적을 볼 중단점을 만듭니다.
  2. 중단점을 마우스 오른쪽 단추로 클릭하고 "수행"을 선택합니다.VS2015에서.VS2010에서 "When Hit..."를 선택한 다음 "Print a message..."를 사용하도록 설정합니다.
  3. "실행 계속"이 선택되었는지 확인합니다.
  4. 인쇄할 텍스트를 입력합니다.
  5. 스택 추적을 보고 싶은 곳에 $CALLSTACK을 추가합니다.
  6. 디버거에서 프로그램을 실행합니다.

물론 다른 컴퓨터에서 코드를 실행하는 경우에는 도움이 되지 않지만 릴리스 코드에 영향을 주거나 프로그램을 다시 시작할 필요 없이 스택 추적을 자동으로 뱉을 수 있기 때문에 매우 편리할 수 있습니다.

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

반응형