반응형
예외에서 전체 스택 추적을 인쇄하는 방법은 무엇입니까?
예를 들어 한 곳에서 ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... 그리고 다른 곳에서 ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
내가 인쇄하는 stacktrace는 a에서 b까지만 시작하며 WebException의 내부 스택 추적을 포함하지 않습니다.
모든 스택 트레이스를 어떻게 인쇄 할 수 있습니까 ???
일반적으로 예외에 대해 .ToString () 메서드를 사용하여 전체 예외 정보 (내부 스택 추적 포함)를 텍스트로 표시합니다.
catch (MyCustomException ex)
{
Debug.WriteLine(ex.ToString());
}
샘플 출력 :
ConsoleApplication1.MyCustomException: some message .... ---> System.Exception: Oh noes!
at ConsoleApplication1.SomeObject.OtherMethod() in C:\ConsoleApplication1\SomeObject.cs:line 24
at ConsoleApplication1.SomeObject..ctor() in C:\ConsoleApplication1\SomeObject.cs:line 14
--- End of inner exception stack trace ---
at ConsoleApplication1.SomeObject..ctor() in C:\ConsoleApplication1\SomeObject.cs:line 18
at ConsoleApplication1.Program.DoSomething() in C:\ConsoleApplication1\Program.cs:line 23
at ConsoleApplication1.Program.Main(String[] args) in C:\ConsoleApplication1\Program.cs:line 13
다음과 같은 기능을 사용하십시오.
public static string FlattenException(Exception exception)
{
var stringBuilder = new StringBuilder();
while (exception != null)
{
stringBuilder.AppendLine(exception.Message);
stringBuilder.AppendLine(exception.StackTrace);
exception = exception.InnerException;
}
return stringBuilder.ToString();
}
그런 다음 다음과 같이 부를 수 있습니다.
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(FlattenException(we));
}
1. 메서드 생성 : 예외를 다음 함수에 전달하면 예외의 원인 인 모든 메서드와 세부 정보가 제공됩니다.
public string GetAllFootprints(Exception x)
{
var st = new StackTrace(x, true);
var frames = st.GetFrames();
var traceString = new StringBuilder();
foreach (var frame in frames)
{
if (frame.GetFileLineNumber() < 1)
continue;
traceString.Append("File: " + frame.GetFileName());
traceString.Append(", Method:" + frame.GetMethod().Name);
traceString.Append(", LineNumber: " + frame.GetFileLineNumber());
traceString.Append(" --> ");
}
return traceString.ToString();
}
2. 호출 방법 : 다음 과 같이 호출 할 수 있습니다.
try
{
// code part which you want to catch exception on it
}
catch(Exception ex)
{
Debug.Writeline(GetAllFootprints(ex));
}
3. 결과 얻기 :
File: c:\MyProject\Program.cs, Method:MyFunction, LineNumber: 29 -->
File: c:\MyProject\Program.cs, Method:Main, LineNumber: 16 -->
참고 URL : https://stackoverflow.com/questions/4272579/how-to-print-full-stack-trace-in-exception
반응형
'Programing' 카테고리의 다른 글
PHP에서 내 웹 사이트의 모든 쿠키를 삭제하는 방법 (0) | 2020.09.07 |
---|---|
왜“우리”와“자신”의 의미가 git-svn으로 바뀌 었습니까? (0) | 2020.09.07 |
명령 줄에서 mysql 데이터베이스를 일반 텍스트 (CSV) 백업으로 덤프 (0) | 2020.09.07 |
Redis에 저장된 값을 찾아 보거나 볼 수있는 방법 (0) | 2020.09.05 |
노드-NODE_MODULE_VERSION 51을 사용하여 다른 Node.js 버전에 대해 컴파일되었습니다. (0) | 2020.09.05 |