在 Visual Studio 中进行调试时,如果已知它们在当前范围内,是否有任何方法可以找到指向特定地址的所有指针?
问问题
165 次
2 回答
2
对于 VS2010,您可以使用宏。
- 通过单击“工具 -> 宏 -> 宏 IDE”打开宏窗口。
复制并粘贴以下宏
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
- 在要列出指针的 C++ 程序中设置断点。
- 运行您的 C++ 程序。
- 当断点被命中时
- 返回宏窗口。
- 更改宏中地址变量的值。请注意,如果您不使用十六进制,则可能需要删除“0x”。
- 按 Ctrl+S 保存宏。
- 仍在宏窗口中时,按 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
呃,我有另一个更简单的解决方案给你。当你遇到断点时:
- 打开本地窗口(调试 -> 窗口 -> 本地)。
- 按 Ctrl+A 选择 Locals 窗口中的所有内容。
- 按 Ctrl+C 复制
- 将它们粘贴到 Excel 中
- 在 Excel 中对值列进行排序。
- 寻找匹配的指针。
于 2013-09-24T13:45:54.930 回答