【发布时间】: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