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

2018-01-30 08:36:56 +08:00
 northisland

测试那边 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的内存地址

我的思路:

提前谢过

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

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

还需要最近几个帧的栈信息,看看你的程序空间的哪条指令调用了这个 api。
zwh2698
2018-01-30 11:02:31 +08:00
Windbg 就是最好的工具
ysc3839
2018-01-30 11:04:46 +08:00
no symbols loaded for stereopc_demo.exe
是因为你没加载 pdb 调试符号,先加载起来看看。
ysc3839
2018-01-30 11:06:21 +08:00
@yejinmo 我自己的话就只会用 VS 了,加载符号那些能基本看出是什么错误。
skylancer
2018-01-30 11:18:08 +08:00
为什么不保存好转储和准备好 pdb?
就凭这一句话只有神仙才能解决你的问题
zwh2698
2018-01-30 11:35:38 +08:00
有 map 文件就能知道这个地址在你的那个函数,然后将二进制拖到 Ida pro 中看类 c,然后分析,如果有 dump 加上 pdb 用 windbg 就是一句话就可以看到了
zwh2698
2018-01-30 11:40:41 +08:00
分析 windows 的程序 crash 不要怀疑操作系统,就是有错,一定也是你用错了,所以方向很重要,因为一般的应用很少能触发系统问题。
Athrob
2018-01-30 14:44:13 +08:00
有这个程序编译完时的 pdb 就很好找,没有 pdb 了就新编译一个然后用 ida 等反编译工具对比两个 exe,自己根据特征定位大致代码行。一般情况下不是大的修改,编译后的代码内容都是差不多的。
SmiteChow
2018-01-31 10:51:54 +08:00
可以试试,如果是和时间相关的话,可以修改系统时间

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

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

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

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

© 2021 V2EX