2010-06-01 2 views
4

동일한 Visual Studio 창에서 프로세스를 디버깅하는 동안 C#에서 Visual Studio 추가 기능을 작성하고 있으며 해당 프로세스의 스택 추적 기능을 내 추가 기능 내에서 사용해야합니다. 이 코드를 추가 기능에 넣으려고했지만 디버깅하는 프로세스가 아니라 추가 기능의 스택 추적을 반환합니다.Visual Studio 애드 인에서 실행중인 프로세스의 스택 추적을 얻는 방법은 무엇입니까?

System.Diagnostics.StackTrace stacktrace = new System.Diagnostics.StackTrace (true); System.Diagnostics.StackFrame stackframe = stacktrace.GetFrame (0);

도움을 주시면 감사하겠습니다.

답변

-1

코드를 호출 할 때 VS에서 추가 기능이 "현재 프로세스"이므로 코드가 예상대로 작동합니다.

"현재 실행중인 프로세스"(VS에서 프로세스가 실행 중/디버깅 중이라는 것을 의미합니까?)가 무슨 뜻인지 확실하지 않지만 다른 프로세스의 스택 추적을 얻는 것이 가능하지 않다고 생각합니다.

+0

예 동일한 Visual Studio 창에서 프로세스를 디버깅하는 동안 추가 기능을 Visual Studio에서 실행하고 있으며 해당 프로세스의 스택 추적을 내 추가 기능 내부에 있어야합니다. – Jack

4

가장 쉬운 방법은 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 애드 인이기 때문에, 디버거가 당신을 위해 무거운 짐을 덜어 주도록 할 수 있습니다!

+0

답변 해 주셔서 감사합니다. 나는 이것을 분명히 시도 할 것이다. – Jack

+0

줄 번호 및/또는 기능 서명을 얻는 방법을 알고 계십니까? – Earlz

+0

Nevermind, 알아 냈어 (하지만 예쁜 것은 아니야) http://stackoverflow.com/a/14251675/69742 – Earlz

관련 문제