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

查看 162|回复 10
作者:liuguangxuan   
背景
在有开发环境的机器上,可以调试启动代码,复现问题后,很容易就能定位到问题代码。
但是往往给用户的程序是 Release 版本的 exe ,崩溃后,可能会产生一个 dmp 文件。
问题
[ol]
  • 这个 dmp 文件是 Release 版本 exe 产生的,如何根据这个 dmp 定位到问题代码?
  • 如果不能根据这个 dmp 文件定位到问题代码,那么是否有其他方式,定位问题代码?
  • 是否有定位问题,调试 bug 的其他技巧?
  • 关于调试符号( pdb 文件),了解到有符号服务器,可以专门存储符号文件,是否有相关的最佳实践?如何编译,打包,发布,存储符号,调试定位问题?
    [/ol]

    dmp, 代码, 定位, release

  • snailya   
    我不会,我就知道打印日志。
    ysc3839   
    用 Visual Studio 打开 dmp 文件
    liuguangxuan
    OP
      
    @ysc3839 #2 这个 dmp 文件是 Release 版本产生的,能看到堆栈信息吗?
    corcre   
    打印日志+1
    实在不行让客户给个权限, 你丢个 debug 版本的过去远程调试一下
    StubbornHuang   
    日志大法 解决问题
    ysc3839   
    @liuguangxuan 能
    liaixiao   
    打印日志 or ,查看 windows 的日志,windows 管理有一个日志功能,会记录程序异常退出的日志。最保险的办法还是自己打印日志
    DTCPSS   
    Windbg
    nevermoreluo   
    排除 release 编译环境问题,dmp 没法定位到问题代码,就开对应的参数 例如 zi ,降低优化之类的,注意自己到底是 mingw 还是 msvc ,两者不一样,去找下对应的编译器怎么让 dmp 文件有符号链接。
    感觉大概率是什么两边配置对不上。
    vs 的话就仔细对比 vcproject 文件,两个环境有啥区别,cmake 注意不要关掉 return 空的警告(曾经在某个 gcc 版本上遇到没写 return debug 好的,release 崩了的情况)
    最后实在不行,你永远可以相信打印日志。。。先把作业做了,后面有空再折腾 release 的 dump 文件如何获取堆栈问题
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部