0

在Visual Studio中進行調試時,是否有任何方法可以查找指向特定地址的所有指針(如果已知它們位於當前範圍內)?查找存儲特定地址的所有指針

+1

不知道,但一個稍微黑客的方法可能是刪除指向的對象,看看程序落在哪裏。這可能會給你一個粗略的指示。 –

+1

@ dr.mo:你在開玩笑吧?免費後使用會導致失敗出現在完全不相關的代碼中。 –

+0

這就是爲什麼我說它_might_給你一個_rough_跡象 –

回答

1

對於VS2010,您可以使用宏。

  1. 打開宏窗口,點擊「工具 - >宏 - >宏IDE」。
  2. 複製並粘貼下面的宏

    Imports System 
    Imports EnvDTE 
    Imports EnvDTE80 
    Imports EnvDTE90 
    Imports EnvDTE90a 
    Imports EnvDTE100 
    Imports System.Diagnostics 
    Public Module Module1  
        Sub DumpLocals() 
         Dim outputWindow As EnvDTE.OutputWindow 
         Dim address As String = "0x009efedc" 
    
         outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object 
         Dim currentStackFrame As EnvDTE.StackFrame 
         currentStackFrame = DTE.Debugger.CurrentStackFrame 
         outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf) 
         For Each exp As EnvDTE.Expression In currentStackFrame.Locals 
          If exp.Value = address Then 
           outputWindow.ActivePane.OutputString("Match: " + exp.Name + " = " + exp.Value.ToString() + vbCrLf) 
          End If 
         Next 
        End Sub  
    End Module 
    

    enter image description here

  3. 設置在你的C++程序斷點要列出指針。
  4. 運行你的C++程序。
  5. 當斷點被擊中時
  6. 回到宏窗口。
  7. 更改宏中地址變量的值。請注意,如果您不使用十六進制,則可能需要刪除「0x」。
  8. 按下Ctrl + S保存宏。
  9. 仍然在宏窗口中,按F5運行宏。結果將在Output窗口中(Debug - > Windows - > Output)。 也許你甚至可以給宏添加參數並從立即窗口調用它。

P/S:此宏從http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx

+0

你能解釋多一點(即時工作在C + +)? – iajnr

+0

嘿回答變異解釋多一點:) – fxam

1

錯誤修改,我對你的另一個更簡單的解決方案。當你打斷點:

  1. 打開本地窗口(調試 - > Windows - >本地)。
  2. 按Ctrl + A在本地窗口中選擇所有內容。
  3. 按Ctrl + C複製
  4. 它們粘貼到Excel
  5. 排序在Excel中值列。
  6. 查找匹配的指針。