请教各位老哥, Windows 下 Release 程序崩溃,应该如何定位问题?

2023-12-26 08:12:38 +08:00
 liuguangxuan

背景

在有开发环境的机器上,可以调试启动代码,复现问题后,很容易就能定位到问题代码。

但是往往给用户的程序是 Release 版本的 exe ,崩溃后,可能会产生一个 dmp 文件。

问题

  1. 这个 dmp 文件是 Release 版本 exe 产生的,如何根据这个 dmp 定位到问题代码?
  2. 如果不能根据这个 dmp 文件定位到问题代码,那么是否有其他方式,定位问题代码?
  3. 是否有定位问题,调试 bug 的其他技巧?
  4. 关于调试符号( pdb 文件),了解到有符号服务器,可以专门存储符号文件,是否有相关的最佳实践?如何编译,打包,发布,存储符号,调试定位问题?
3448 次点击
所在节点    Windows
55 条回复
proxytoworld
2023-12-26 15:30:48 +08:00
@liuguangxuan 你是什么语言打包的 exe ,python ?
ashong
2023-12-26 15:47:45 +08:00
@liuguangxuan 每次编译生成的 pdb 包含源码信息,如果源码修改后 kb 会找不到正确的对应代码行,保留好版本对应的 pdb 和 git commit 就没问题了
sloknyyz
2023-12-26 16:09:05 +08:00
没 pdb 这个崩溃就算了,别看了。重新编译一次,把 pdb 保留好,把新程序给用户替换,让用户复现,等拿到新 dump 再分析。
liuguangxuan
2023-12-26 16:09:36 +08:00
@proxytoworld #41 开发语言 C++,打包的是 buildbot 。
GreyWang
2023-12-26 16:30:45 +08:00
@liuguangxuan 自动打包工具如 Jenkins 是可以指定将 pdb 、dll 文件保存的,找配置同事修改一下打包工具的配置就行了,打包结束后自动将 pdb 文件上传至 ftp 服务器,然后你再去下载下来应对后续的问题分析。
liuguangxuan
2023-12-26 16:35:34 +08:00
@GreyWang #45 棒,老哥!
有没有 Windows 下 C++的其他调试技巧或者最佳实践,老哥传授一下呀😁
daimiaopeng
2023-12-26 17:58:00 +08:00
直接用 vs 打开 dump 文件,然后点本机调试,设置 pdb 和代码路径,可以看到奔溃的具体代码行(和平时调试一样)
mmdsun
2023-12-26 19:38:06 +08:00
什么框架开发的软件?一般都可以加一个全局的异常处理器,兜底没有处理的异常,在那里打印日志就行。
JerryV2
2023-12-27 08:11:18 +08:00
@liuguangxuan #40 是的,但是客户机上需要先启动 VS 的 Remote Debugger ,如果有防火墙需要开对应的端口,教程有很多,一看就会
liuguangxuan
2023-12-27 08:19:55 +08:00
@JerryV2 #49 这样是不是需要在客户机上运行 Debug 版本?但是 Debug 版本依赖太多以 d 结尾的 dll ,比如 msvcp100d.dll mfc100d.dll 等,估计要在客户机器上安装完整的开发环境了。
JerryV2
2023-12-27 08:39:12 +08:00
@liuguangxuan #50 release 版就可以,如果是带调试信息的就更好了
jones2000
2023-12-27 12:27:47 +08:00
windbg
GreyWang
2023-12-28 09:18:31 +08:00
@liuguangxuan 如果你的程序集成了其他的子模块,通过头文件和动态库 dll 或者静态库 lib 的方式编译,可以要到子模块的源码,和子模块的头文件放到一起,如果崩溃发生在子模块里,通过调试 dump 可以直接定位到子模块的源码代码行,不需要再手动搜索一遍源文件来定位崩溃点。
james19820515
143 天前
有结论了吗?
liuguangxuan
143 天前
@james19820515 你想知道什么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX