4

我搞砸了Visual Studio加載項API,試圖查看我想要做的事情是否可能。有一件事我現在正在做的是一樣的東西:如何在Visual Studio加載項中獲取當前行號/異常情況?

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled) 
    { 
     _applicationObject.Events.DebuggerEvents.OnExceptionThrown += DebuggerEvents_OnExceptionThrown; 
     handled = false; 
     if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) 
     { 
      if(commandName == "MyAddin1.Connect.MyAddin1") 
      { 
       handled = true; 
       return; 
      } 
     } 
    } 

    void DebuggerEvents_OnExceptionThrown(string ExceptionType, string Name, int Code, string Description, ref dbgExceptionAction ExceptionAction) 
    { 
     //how to get line number here? 
    } 

理想情況下,我希望能夠得到當前函數和行號每當異常由正在調試的程序拋出。這可能嗎?

回答

0

這些信息顯然是從調試信息中解除的。因此,它並不總是可用的,我想這就是爲什麼在這種情況下StackFrames對象沒有實現它的原因。

無論如何,要獲得帶有文件和行號信息(以及IL偏移量等)的堆棧跟蹤,您必須在調試應用程序的上下文中動態執行代碼。你可以使用GetExpression來做到這一點。

總結:

var tmp = dte.Debugger.GetExpression(
    "new System.Diagnostics.StackTrace(true).ToString();", true); 

這將返回一個字符串的堆棧跟蹤,包括文件和行號。不過,你必須分析這個返回的字符串實際上利用它,我承擔這是比更多的更慢common method

相關問題