运行时出现了段错误,然后来看内存转储后得到的内容。
1、首先查看栈帧的内容
- (gdb)
bt - #0
0x6a696968 in ?? () - #1
0x6c6b6b6a in ?? () - #2
0x6e6d6d6c in ?? () - #3
0x706f6f6e in ?? () - #4
0x72717170 in ?? () - #5
0x74737372 in ?? () - #6
0xbff60074 in ?? () - Backtrace
stopped: previous frame inner to this frame (corrupt stack?)
然后看最后1行,它就提示我们有可能是栈指针出现的错误,所以我们需要做的事情就是去查看这个栈指针怎么回事。
- (gdb)
x/30c $esp-15 - 0xbff6a311:
99 'c' 99 'c' 100 'd' 100 'd' 101 'e' 101 'e' 102 'f' 102 'f' - 0xbff6a319:
103 'g' 103 'g' 104 'h' 104 'h' 105 'i' 105 'i' 106 'j' 106 'j' - 0xbff6a321:
107 'k' 107 'k' 108 'l' 108 'l' 109 'm' 109 'm' 110 'n' 110 'n' - 0xbff6a329:
111 'o' 111 'o' 112 'p' 112 'p' 113 'q' 113 'q' - (gdb)
p (char *)$esp-20 - $1
= 0xbff6a30c "\005aabbccddeeffgghhiijjk kllmmnnooppqqrrsstt" - (gdb)
p (char *)$esp+20 - $2
= 0xbff6a334 "t"
3、定位源码中的错误。