找到存储特定地址的所有指针

时间:2013-09-24 11:44:06

标签: visual-studio-2010 visual-studio visual-c++ visual-studio-2012

虽然在Visual Studio中调试是否有任何方法可以找到指向特定地址的所有指针,如果知道它们在当前范围内?

2 个答案:

答案 0 :(得分: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运行宏。结果将显示在“输出”窗口中(Debug - > Windows - > Output)。 也许你甚至可以在宏中添加参数并从立即窗口调用它。
  10. P / S :此宏已从http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx

    修改

答案 1 :(得分:1)

呃,我还有另一种更简单的解决方案。当你遇到一个断点时:

  1. 打开“本地”窗口(“调试” - >“Windows - >本地人员”)。
  2. 按Ctrl + A选择“本地”窗口中的所有内容。
  3. 按Ctrl + C复制
  4. 将它们粘贴到Excel
  5. 在Excel中对“值”列进行排序。
  6. 寻找匹配的指针。