【问题标题】:Search through memory in VS2017在 VS2017 中搜索内存
【发布时间】:2020-01-01 14:32:15
【问题描述】:

我在 Visual Studio 2017 中打开了我的 C++ 应用程序的 minidump 文件。转储文件是程序因访问冲突而崩溃。我怀疑堆/堆栈损坏,所以我花了很多时间在内存/反汇编窗口中,试图解释堆栈。

如果我可以在内存中搜索一些值(例如函数调用的返回地址),那将非常方便。我知道 WinDbg 可以做到,但它目前没有正确设置符号路径,我更愿意留在一个调试器中。

我发现 this link 说 Visual Studio 2010 支持在即时窗口中输入类似 .S -D 0x20B4EC L100 0x12EC9275 的内容,但是当我在 VS2017 中尝试时,我只得到 expected an expression

我错过了什么吗?

(注意,虽然我现在正在分析故障转储,但在调试实时程序时它似乎也不起作用)

澄清

  • 我有一个包含内存的小型转储
  • 常规分析工作正常:我有 pdb 文件,我可以看到线程、堆栈、手表,应有尽有。只是我怀疑stack corruption,所以那些没有多大意义。 (要么这样,要么优化器在惹我)
  • 因此,我打开了内存窗口(单击 Debug->Windows->Memory->Memory 1)。在那里,我可以看到(原始)内存。现在,我想在该内存中搜索特定值。

【问题讨论】:

  • but it currently doesn't have symbol paths set up correctly 为什么不直接设置一下?
  • 我对WinDbg一点也不熟悉。所以在学习了如何设置符号路径之后,我必须学习如何进一步使用它。我当然可以,但这更像是不得已而为之。如果我熟悉的调试器支持相同的功能,那就更好了。
  • 我猜你需要的是获取崩溃的堆栈跟踪。我会选择 WinDbg 选项 + *.pdb 文件。您可以在 WinDbg 中加载所有内容并运行,例如,!analyze -v 命令。它可以帮助您更好地理解问题。
  • 如果你有VS2017的企业版,不妨试试Reverse Debugging。我相信 VS 称之为“IntelliTrace”。
  • 如果你能真正重现问题,反向调试很方便。我不能。我正在调查我们的一位客户创建的故障转储。这个问题很难(如果不是几乎不可能)重现,但经常发生足以惹恼我们的客户。再说了,我“只”有VS专业

标签: c++ memory visual-studio-2017 visual-studio-debugging postmortem-debugging


【解决方案1】:

这是一个很好的教程: https://docs.microsoft.com/en-us/visualstudio/debugger/using-dump-files?view=vs-2019

基本上,查看转储中的内存有一些硬性要求:

  • minidump 必须带有堆
  • 您必须向 Visual Studio 提供 .exe 及其 .pdb

如果不满足这些条件,您将仅获得堆栈跟踪,可能还有一些堆栈变量。

编辑: 带有监视和变量的堆栈跟踪是您要搜索的同一内存。没有实时调试。这是崩溃的快照。

【讨论】:

  • 感谢您的回答。我已经涵盖了所有这些基础。该教程对于我正在尝试做的事情来说太基础了。另请参阅上面的说明。
  • 我更新了我的答案。您正在寻找实时调试。您所拥有的就是您通过转储获得的。
  • 正如我的问题所述,WinDbg 可以做到(带有转储),VS2010 也可以(据称)。此外,在实时调试中,似乎也没有搜索功能。 (我感觉你不理解我)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2014-11-20
  • 2020-11-12
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多