0

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

4

2 回答 2

2

对于 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
    

    在此处输入图像描述

  3. 在要列出指针的 C++ 程序中设置断点。
  4. 运行您的 C++ 程序。
  5. 当断点被命中时
  6. 返回宏窗口。
  7. 更改宏中地址变量的值。请注意,如果您不使用十六进制,则可能需要删除“0x”。
  8. 按 Ctrl+S 保存宏。
  9. 仍在宏窗口中时,按 F5 运行宏。结果将出现在输出窗口中(调试 -> 窗口 -> 输出)。也许您甚至可以向宏添加参数并从即时窗口调用它。

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

于 2013-09-24T13:14:43.727 回答
1

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

  1. 打开本地窗口(调试 -> 窗口 -> 本地)。
  2. 按 Ctrl+A 选择 Locals 窗口中的所有内容。
  3. 按 Ctrl+C 复制
  4. 将它们粘贴到 Excel 中
  5. 在 Excel 中对值列进行排序。
  6. 寻找匹配的指针。
于 2013-09-24T13:45:54.930 回答