가장 쉬운 방법은 DTE
자동화 개체를 통해 스택 프레임을 디버거에 요청하는 것입니다. 추가 기능을 통해 DTE
개체를 사용할 수 있어야합니다. 원하는 속성이 Debugger.CurrentThread.StackFrames
입니다.
static string GetCurrentStackTrace(DTE dte)
{
bool canGetStackTrace =
(dte != null) &&
(dte.Debugger != null) &&
(dte.Debugger.CurrentThread != null) &&
(dte.Debugger.CurrentThread.StackFrames != null);
if (!canGetStackTrace)
return string.Empty;
StringBuilder stackTrace = new StringBuilder();
foreach (StackFrame frame in dte.Debugger.CurrentThread.StackFrames)
{
stackTrace.AppendFormat("{0}\n", frame.FunctionName);
}
return stackTrace.ToString();
}
고통스러운 및 참여 방법은 ICorDebug
을 사용하는 것입니다 및 StackWalk64
관리 및 기본 얻을 : 당신이 할 수있는, 그렇지 않으면
static string GetCurrentStackTrace(DTE dte)
{
bool canGetStackTrace =
(dte != null) &&
(dte.Debugger != null) &&
(dte.Debugger.CurrentThread != null) &&
(dte.Debugger.CurrentThread.StackFrames != null);
if (!canGetStackTrace)
return string.Empty;
return string.Join(
"\n",
dte.Debugger.CurrentThread.StackFrames.Cast<StackFrame>().Select(f => f.FunctionName)
);
}
을 : 당신은 .NET 4를 사용하는 경우, 당신은 할 수있다 별도로 쌓은 다음 손으로 함께 꿰맬 수 있습니다. 당신이 VS 애드 인이기 때문에, 디버거가 당신을 위해 무거운 짐을 덜어 주도록 할 수 있습니다!
예 동일한 Visual Studio 창에서 프로세스를 디버깅하는 동안 추가 기능을 Visual Studio에서 실행하고 있으며 해당 프로세스의 스택 추적을 내 추가 기능 내부에 있어야합니다. – Jack