일반 C # 코드가 있습니다. 나는 예외가 없다 . 디버깅 목적으로 현재 스택 추적을 프로그래밍 방식으로 기록하고 싶습니다. 예:
public void executeMethod()
{
logStackTrace();
method();
}
답변
System.Diagnostics
네임 스페이스를 살펴보십시오 . 거기에 많은 케이크!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
이것은 후드 아래에서 일어나는 일을 배우기 위해 주위를 찌르는 것이 정말 좋습니다.
NLog, log4net 또는 Microsoft 패턴 및 사례 엔터프라이즈 라이브러리와 같은 로깅 솔루션을 살펴보고 목적을 달성하고 일부를 달성하는 것이 좋습니다. 행운을 빌어 친구!
답변
다른 대안 은 스택 추적의 문자열 표현을 반환하는 System.Environment.StackTraceSystem.Diagnostics.StackTrace
를 사용 하는 것입니다.
또 다른 유용한 옵션은 Visual Studio에서$CALLER
및 $CALLSTACK
디버깅 변수 를 사용하는 것 입니다. 응용 프로그램을 다시 빌드하지 않고도 런타임을 활성화 할 수 있기 때문입니다.
답변
이를 수행하는 두 가지 방법이 있습니다. 는 System.Diagnostics.StackTrace()
당신에게 현재의 스레드에 대한 스택 추적을 줄 것이다. Thread
인스턴스에 대한 참조가 있으면 오버로드 된 버전의를 통해 스택 추적을 얻을 수 있습니다 StackTrace()
.
스택 오버플로 질문 비 현재 스레드의 스택 추적을 얻는 방법은 무엇입니까? .
답변
코드를 수정하지 않고 Visual Studio 디버거에서이 작업을 수행 할 수도 있습니다.
- 스택 추적을 보려는 중단 점을 작성하십시오.
- 중단 점을 마우스 오른쪽 단추로 클릭하고 VS2015에서 “조치 …”를 선택하십시오. VS2010에서 “히트시 …”를 선택한 다음 “메시지 인쇄”를 활성화하십시오.
- “계속 실행”이 선택되어 있는지 확인하십시오.
- 인쇄 할 텍스트를 입력하십시오.
- 스택 추적을보고 싶은 곳에 $ CALLSTACK을 추가하십시오.
- 디버거에서 프로그램을 실행하십시오.
물론 다른 컴퓨터에서 코드를 실행하는 경우에는 도움이되지 않지만 릴리스 코드에 영향을주지 않거나 프로그램을 다시 시작할 필요없이 스택 추적을 자동으로 추출 할 수 있으면 매우 편리합니다.
답변
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]);
}
}
나를 위해 일하는 것 같습니다