windows - 在 windbg 中调试 "release-mode"二进制文件/转储

标签 windows debugging windbg dump

我还没有找到在 windbg 中调试 RELEASE 模式二进制文件或转储的好资源。

据我了解,启用编译器优化后,调试会变得更加受限。但有时我别无选择——例如,对不可重现的问题进行故障转储分析。

如果有一些文章描述发布二进制文件的可能性(或注意事项),那就太好了。有人知道这样的资源吗?

我正在寻找类似 this 的内容, 但有更多的细节。我希望 Advanced Windows Debugging会有一些东西,但没有这样的运气。

最佳答案

第一条规则:保留来自您发布的每个构建的所有 pdb:来自 exe 和您生成的任何其他 dll

第二条规则:尝试获得重现步骤,因为能够在您自己的机器上重现崩溃比费力浏览崩溃日志更有效地利用您的时间。

除此之外,关于您可以从发布构建崩溃中获取多少信息,您完全听天由命。一些崩溃分析大师可以通过崩溃转储创造奇迹,但对于我们这些普通人来说,这取决于崩溃的性质和重现性。

要检查的一件事是您的优化发布版本已将“省略帧指针”设置为“否”。仅此一项就可以使调试变得更加容易,因为 99% 的时间您会得到一个意义模糊的堆栈。

请注意,大多数情况下,“this”指针在发布版本中将显示为 NULL,但有时您可以在堆栈中上下导航以找到它作为参数传递的位置。不过,一般来说,不要依赖调试器中变量的显示。如果这些值看起来合理,那么它们可能是正确的。如果它们看起来大错特错,那么要么是您的错误,要么就是经过优化的变量的虚假显示。

哦,请查看传奇人物 John Robbins(Bugslayer)以获得一些很棒的崩溃转储分析资源。

关于windows - 在 windbg 中调试 "release-mode"二进制文件/转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428703/

相关文章:

c - 如何测试我的应用程序是否兼容 UNICODE?

python - windows 的二进制 python 包(模块)的无人值守安装

c++ - `myLibrary!__scrt_stub_for_is_c_termination_complete+0x12345`是什么符号

javascript - 如果没有抛出错误,如何在 IE 中进行调试?

multithreading - 在调用堆栈中搜索

c++ - en_US.UTF-8 语言环境的 Windows 等效项是什么?

windows - 为什么需要 IP_MULTICAST_IF 和 IPV6_MULTICAST_IF?

asp.net - 调试时观察 session 内容

.net - 定位托管 .NET 应用程序中的 native 内存泄漏,DebugDiag 缺少堆栈跟踪

.net-core - WinDbg+SOS : How to view the . NET 对象包装句柄?