답변:
System.Diagnostics
네임 스페이스를 살펴보십시오 . 거기에 많은 케이크!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
이것은 후드 아래에서 일어나는 일을 배우기 위해 주위를 찌르는 것이 정말 좋습니다.
NLog, log4net 또는 Microsoft 패턴 및 사례 엔터프라이즈 라이브러리와 같은 로깅 솔루션을 살펴보고 목적을 달성하고 일부를 달성하는 것이 좋습니다. 행운을 빌어 친구!
다른 대안 은 스택 추적의 문자열 표현을 반환하는 System.Environment.StackTraceSystem.Diagnostics.StackTrace
를 사용 하는 것입니다.
또 다른 유용한 옵션은 Visual Studio에서$CALLER
및 $CALLSTACK
디버깅 변수 를 사용하는 것 입니다. 응용 프로그램을 다시 빌드하지 않고도 런타임을 활성화 할 수 있기 때문입니다.
Environment.StackTrace
그냥 new의 인스턴스입니다 StackTrace
.
System.Environment.StackTrace
그 정보에보다 편리하게 액세스 할 수 있습니다.
System.Diagnostics.StackTrace
- 볼 msdn.microsoft.com/en-us/library/...을
Environment.StackTrace
항상 시작하는 것이 짜증나 지 at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
않습니까? 그것은 누군가가 찾고있는 시점에서 현재 스택 추적의 일부가 아닙니다.
이를 수행하는 두 가지 방법이 있습니다. 는 System.Diagnostics.StackTrace()
당신에게 현재의 스레드에 대한 스택 추적을 줄 것이다. Thread
인스턴스에 대한 참조가 있으면 오버로드 된 버전의를 통해 스택 추적을 얻을 수 있습니다 StackTrace()
.
스택 오버플로 질문 비 현재 스레드의 스택 추적을 얻는 방법은 무엇입니까? .
코드를 수정하지 않고 Visual Studio 디버거에서이 작업을 수행 할 수도 있습니다.
물론 다른 컴퓨터에서 코드를 실행하는 경우에는 도움이되지 않지만 릴리스 코드에 영향을주지 않거나 프로그램을 다시 시작할 필요없이 스택 추적을 자동으로 추출 할 수 있으면 매우 편리합니다.
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
출력은 다음과 유사합니다.
YourNamespace.Program.executeMethod (String msg)에서
YourNamespace.Program.Main (String [] args)에서
대체 Console.WriteLine
당신과 Log
방법. 실제로 .ToString()
Console.WriteLine 사례
가 필요하지 않습니다 object
. 그러나 Log (string msg) 메소드에는 필요할 수 있습니다.
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]);
}
}
나를 위해 일하는 것 같습니다
StackTrace
는 것을 명심하십시오 .