我在我的应用程序中获得了一个核心转储,当我尝试分析时,它似乎有腐败堆栈。任何人都可以帮助我如何找到问题的根源。
Program terminated with signal 11, Segmentation fault.
#0 0x40173f54 in nanosleep () from /lib/libc.so.6
(gdb) bt
#0 0x40173f54 in nanosleep () from /lib/libc.so.6
#1 0x401b2a1c in __libc_enable_asynccancel () from /lib/libc.so.6
#2 0x0000cdb8 in ?? ()
Cannot access memory at address 0x12
(gdb) info frame
Stack level 0, frame at 0xbeaedbc0:
pc = 0x40173f54 in nanosleep; saved pc 0x401b2a1c
called by frame at 0xbeaedbd8
Arglist at 0xbeaedbc0, args:
Locals at 0xbeaedbc0, Previous frame's sp is 0xbeaedbc0
(gdb) info frame 1
Stack frame at 0xbeaedbd8:
pc = 0x401b2a1c in __libc_enable_asynccancel; saved pc 0xcdb8
called by frame at Cannot access memory at address 0x12
(gdb) info frame 2
Stack frame at Cannot access memory at address 0x12
这个堆栈可能会或可能不会损坏,这也可能发生在-fomit-frame-pointer
。
对于它的价值,这是我目前的战略。我并不认为这是一个最佳策略,只是目前适合我的策略: