V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
northisland
V2EX  ›  程序员

发测程序,崩在 ntdll.dll!0000 0000 7763 a561()。能否仅凭这一条信息定位错误?

  •  1
     
  •   northisland · 2018-01-30 08:36:56 +08:00 · 4122 次点击
    这是一个创建于 2489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    测试那边 win64 可执行文件,用的是公司的 win7 sp1。 跑了 7 天,第 8 天崩了。很难复现的错误。

    崩了以后,只能用 vs2010 收尸,只能发现 stack frame 停止在:

    [Frames below may be incorrect and/or missing, no symbols loaded for stereopc_demo.exe]
    xxxx.exe!0000 0001 3f7b ba34()
    xxxx.exe!0000 0001 3f7b 8df5()
    kernel32.dll!0000 0000 7750 59cd()
    ntdll.dll!0000 0000 7763 a561()
    

    貌似是 ntdll 里的7763 a561的内存地址

    我的思路:

    • 大家都建议我复现错误,但我觉得下次复现可能得过年了。
    • no symbols loaded for stereopc_demo.exe ?请教各位能否甩锅给运行 1 周以上的 win7 sp1 ?
    • dumpbin -all ntdll.dll ,能查看到很多信息,请教各位能否直接定位到调用的函数?

    提前谢过

    20 条回复    2018-01-31 10:51:54 +08:00
    xenme
        1
    xenme  
       2018-01-30 08:47:04 +08:00 via iPhone
    这个没法甩锅给 ntdll
    或者 os
    TinySec
        2
    TinySec  
       2018-01-30 08:55:45 +08:00 via iPhone
    哈哈哈哈
    linxy
        3
    linxy  
       2018-01-30 08:56:45 +08:00   ❤️ 1
    no symbols loaded 是说没有调试符号,跟运行环境没啥关系。
    按道理来说,如果加载了符号,ntdll 也会显示出调用函数的。
    不过我不觉得是导出函数的锅。
    崩的时候应该导出一份 dump 文件的,这样就不用再复现了。
    TinySec
        4
    TinySec  
       2018-01-30 08:57:36 +08:00 via iPhone   ❤️ 1
    l 需要收集 dump 和.pdb 文件来辅助分析,你贴的信息太少,99.99%是你自己写的程序有 bug
    zwh2698
        5
    zwh2698  
       2018-01-30 09:15:08 +08:00 via Android   ❤️ 1
    编译成 release 带调试信息的版本或者 debug 版,使用 windbg 在应用 crash 时挂起
    janxin
        6
    janxin  
       2018-01-30 09:31:42 +08:00   ❤️ 1
    你有 dump 吗....仅这么一句只能掐指一算了
    zn
        7
    zn  
       2018-01-30 09:50:17 +08:00   ❤️ 1
    99.999999999999999% 是你程序问题,别甩锅。
    下次吧 pdb 文件放到 exe 旁边,崩了可以看到你自己程序的 stackframe
    lrxiao
        8
    lrxiao  
       2018-01-30 09:53:26 +08:00   ❤️ 1
    甩锅是没得甩啊 就是没配置好 VS 的符号
    没重启的话拿个 windbg 看下 u 7763 a561 是啥...
    enenaaa
        9
    enenaaa  
       2018-01-30 10:12:22 +08:00   ❤️ 1
    下次把 pdb 带上。
    另外可以看看 exe 里的
    3f7b 8df5
    3f7b ba34
    是哪个函数
    yejinmo
        10
    yejinmo  
       2018-01-30 10:20:06 +08:00
    借楼问问。。有没有啥好的 Windows dump 文件分析文章
    lrxiao
        11
    lrxiao  
       2018-01-30 10:31:08 +08:00   ❤️ 1
    @yejinmo 张银奎老师的软件调试和格蠢汇编 不过我也只能读懂皮毛
    wizardforcel
        12
    wizardforcel  
       2018-01-30 10:47:01 +08:00 via Android   ❤️ 1
    这个地址只能找到 api。

    还需要寄存器信息看看哪个参数传错了。

    还需要最近几个帧的栈信息,看看你的程序空间的哪条指令调用了这个 api。
    zwh2698
        13
    zwh2698  
       2018-01-30 11:02:31 +08:00 via Android   ❤️ 1
    Windbg 就是最好的工具
    ysc3839
        14
    ysc3839  
       2018-01-30 11:04:46 +08:00 via Android   ❤️ 1
    no symbols loaded for stereopc_demo.exe
    是因为你没加载 pdb 调试符号,先加载起来看看。
    ysc3839
        15
    ysc3839  
       2018-01-30 11:06:21 +08:00 via Android   ❤️ 1
    @yejinmo 我自己的话就只会用 VS 了,加载符号那些能基本看出是什么错误。
    skylancer
        16
    skylancer  
       2018-01-30 11:18:08 +08:00   ❤️ 1
    为什么不保存好转储和准备好 pdb?
    就凭这一句话只有神仙才能解决你的问题
    zwh2698
        17
    zwh2698  
       2018-01-30 11:35:38 +08:00 via Android   ❤️ 1
    有 map 文件就能知道这个地址在你的那个函数,然后将二进制拖到 Ida pro 中看类 c,然后分析,如果有 dump 加上 pdb 用 windbg 就是一句话就可以看到了
    zwh2698
        18
    zwh2698  
       2018-01-30 11:40:41 +08:00 via Android
    分析 windows 的程序 crash 不要怀疑操作系统,就是有错,一定也是你用错了,所以方向很重要,因为一般的应用很少能触发系统问题。
    Athrob
        19
    Athrob  
       2018-01-30 14:44:13 +08:00 via iPhone   ❤️ 1
    有这个程序编译完时的 pdb 就很好找,没有 pdb 了就新编译一个然后用 ida 等反编译工具对比两个 exe,自己根据特征定位大致代码行。一般情况下不是大的修改,编译后的代码内容都是差不多的。
    SmiteChow
        20
    SmiteChow  
       2018-01-31 10:51:54 +08:00
    可以试试,如果是和时间相关的话,可以修改系统时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:37 · PVG 23:37 · LAX 07:37 · JFK 10:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.