2

是否有可能使用EnvDTE爲.vsix visual studio擴展捕獲本地調試窗口使用的調試數據?或者是否有可能通過另一種方法?在EnvDTE中調試時捕獲VS局部變量

我想創建一個自定義的本地窗口,我們可以修改它來顯示我們喜歡的一些更重的內容,而不會犧牲高級用戶的原始本地窗口。理想的解決方案是獲取發送到當地人窗口的數據,以便我可以構建自己的樹。

回答

9

原來這其實很簡單!

DTE dte = (DTE).Package.GetGlobalService(typeof(DTE)); 
if(dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running 
{ 
    EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals; 
    foreach(EnvDTE.Expression local in locals) 
    { 
     EnvDTE.Expressions members = expression.DataMembers; 
     // Do this section recursively, looking down in each expression for 
     // the next set of data members. This will build the tree. 
     // DataMembers is never null, instead just iterating over a 0-length list. 
    } 
} 

每個表達式包含:

  • 名稱(字符串)
  • (在局部變量窗口顯示字符串值)
  • 類型(類型的字符串名稱)
  • 父母(類型是父類)
  • 數據成員(其子女可重複的集合(不能爲null))
  • 的IsValid(布爾)

希望這有助於任何人都希望做類似的東西!

+1

還有一件事。注意你如何往下看成員樹,因爲有許多類型可能形成無限參考循環的實例。 – Kunan