2013-01-21 23 views
0

我开发使用的i686-W64-的mingw32-GCC 4.7.2交叉编译的Ubuntu 12.10下一个Win32应用程序。分析调试器输出用于aplication在释放模式

当我运行我的应用程序在释放模式编译和崩溃,我可能会收到类似波纹管的输出。

我想知道如何解释呢?我能从中得到一些有用的信息吗?例如,是否有可能从堆栈转储中获取源代码中的行?

wine: Unhandled page fault on read access to 0x00006c11 at address 0x401cb1 (thread 0009), starting debugger... 
Application tried to create a window, but no driver could be loaded. 
Make sure that your X server is running and that $DISPLAY is set correctly. 
Unhandled exception: page fault on read access to 0x00006c11 in 32-bit code (0x00401cb1). 
Register dump: 
CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b 
EIP:00401cb1 ESP:007af750 EBP:007af9c8 EFLAGS:00010206( R- -- I - -P-) 
EAX:00406a20 EBX:00000004 ECX:00006c11 EDX:00006c11 
ESI:00000068 EDI:00110440 
Stack dump: 
0x007af750: 007af7df 00000030 00000043 00000004 
0x007af760: 00142fc0 3ff54e5b 00406a20 3ff57208 
0x007af770: 0207251c 3ff4cb7d 02072574 3ff51f7f 
0x007af780: ea9e6eeb 3ff49b90 e09fe868 3ff4c562 
0x007af790: 00006c11 00000045 0209c5b4 007afa0c 
0x007af7a0: 00000004 019b0000 007af7f8 00110000 
000c: sel=0067 base=00000000 limit=00000000 16-bit --x 
Backtrace: 
=>0 0x00401cb1 in analyser (+0x1cb1) (0x007af9c8) 
    1 0x00536147 in analyser (+0x136146) (0x007afd98) 
    2 0x004013fa __tmainCRTStartup+0x279() [/home/ruben/mingw-w64/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:313] in analyser (0x007afe70) 
    3 0x7b859ddc call_process_entry+0xb() in kernel32 (0x007afe88) 
    4 0x7b85b04f in kernel32 (+0x4b04e) (0x007afec8) 
    5 0x7bc71d90 call_thread_func_wrapper+0xb() in ntdll (0x007afed8) 
    6 0x7bc7486d call_thread_func+0x7c() in ntdll (0x007affa8) 
    7 0x7bc71d6e RtlRaiseException+0x21() in ntdll (0x007affc8) 
    8 0x7bc49f4e call_dll_entry_point+0x61d() in ntdll (0x007affe8) 
0x00401cb1: movl 0x0(%edx),%eax 
Modules: 
Module Address   Debug info Name (89 modules) 
PE 240000- 273000 Deferred  ssleay32 
PE 280000- 37e000 Deferred  libeay32 
... 

回答

2

我想知道如何解释呢?

看起来很明显已经:你的代码,更准确地说:指令地址0x401cb1,试图取消引用的内存地址0x00006c11。该内存访问无效,并触发了页面错误。

有没有办法,我可以从得到一些有用的信息?

是,如上所述。

例如,是否有可能从堆栈转储中获取源代码中的行?

肯定的:当你建立在发布模式下您的应用程序,添加-g标志。然后

addr2line -fe analyser 0x401cb1 

应该告诉你哪些文件/行地址0x401cb1对应。

+1

特别感谢为指出,我不知道addr2line。 –

相关问题