我有一个带调用堆栈的寡妇崩溃转储,显示导致崩溃的函数的模块!函数名+偏移量。该模块内置,无调试信息使用gcc。从非调试内置模块追踪崩溃的源代码行
崩溃的原因是由一种异常未能在给定的地址写的,即访问冲突(05),写冲突(01)
在我的机器我可以访问相同的模块用调试信息构建。我正在寻找的是一种通过使用模块!函数名+偏移量信息作为起点追踪导致崩溃的相应源代码行的方法。
调用堆栈顶部框架的方法名是一个类的析构 错位的函数名_ZN20ViewErrorDescriptionD0Ev + X79
objdump察看了模块-d搜索functionname +偏移给出:
.... call *%eax
.... mov 0xffffffbc(%ebp), %eax
.... cmpl 0x0, 0x148(%eax)
试图找到这在调试内置文件没有给出匹配
析构函数的源代码只包含两个删除婆interX电话。
用gdb加载调试内置模块(sharedlibrary),然后调用信息行给了我一个起始和结束地址,使用的objdump的输出的grep显示相应的反汇编代码,它看起来非常像从一个该模块没有调试信息,但仍相差甚远。
NB! - 从信息输出行说_ZN20ViewErrorDescriptionD2Ev没有_ZN20ViewErrorDescriptionD0Ev作为崩溃转储说。
来自ABI文档摘自: :: = D1#完整对象的析构 :: = D2#基础对象的析构
我在哪里何去何从?
问候 的Kristofer^h
我一直在这样做很长一段时间,现在我有一个实用的例子,thx。 – Kristofer 2010-12-17 11:30:31