我有一个SIGSEGV我试图在我的代码中找到它,但是我从GDB那里得到了奇怪的回溯:
#1 0x00407d15 in print_banner (msg=0x2e2e2e2e <Address 0x2e2e2e2e out of bounds>)
at ../include/test_util.hh:20
#2 0x2e2e2e2e in ?? ()
#3 0x2e2e2e2e in ?? ()
#4 0x2e2e2e2e in ?? ()
#5 0x2e2e2e2e in ?? ()
#6 0x2e2e2e2e in ?? ()
#7 0x2e2e2e2e in ?? ()
#8 0x2e2e2e2e in ?? ()
#9 0x2e2e2e2e in ?? ()
#10 0x2e2e2e2e in ?? ()
#11 0x2e2e2e2e in ?? ()
#12 0x2e2e2e2e in ?? ()
#13 0x2e2e2e2e in ?? ()
#14 0x2e2e2e2e in ?? ()
#15 0x2e2e2e2e in ?? ()
#16 0x2e2e2e2e in ?? ()
#17 0x2e2e2e2e in ?? ()
#18 0x2e2e2e2e in ?? ()
#19 0x2e2e2e2e in ?? ()
#20 0x2e2e2e2e in ?? ()
#21 0x2e2e2e2e in ?? ()
#22 0x2e2e2e2e in ?? ()
#23 0x2e2e2e2e in ?? ()
#24 0x2e2e2e2e in ?? ()
#25 0x2e2e2e2e in ?? ()
#26 0x2e2e2e2e in ?? ()
#27 0x2e2e2e2e in ?? ()
#28 0x2e2e2e2e in ?? ()
#29 0x2e2e2e2e in ?? ()
#30 0x2e2e2e2e in ?? ()
#31 0x2e2e2e2e in ?? ()
#32 0x2e2e2e2e in ?? ()
#33 0x2e2e2e2e in ?? ()
#34 0x2e2e2e2e in ?? ()
#35 0x2e2e2e2e in ?? ()
#36 0x2e2e2e2e in ?? ()
#37 0x2e2e2e2e in ?? ()
#38 0x2e2e2e2e in ?? ()
#39 0x2e2e2e2e in ?? ()
#40 0x2e2e2e2e in ?? ()
#41 0x2e2e2e2e in ?? ()
#42 0x2e2e2e2e in ?? ()
#43 0x2e2e2e2e in ?? ()
#44 0x2e2e2e2e in ?? ()
#45 0x2e2e2e2e in ?? ()
#46 0x2e2e2e2e in ?? ()
#47 0x2e2e2e2e in ?? ()
#48 0x2e2e2e2e in ?? ()
除了告诉我print_banner得到0x2e2e2e2e,因为它的msg参数(const char *),所有这些值来自哪个,GDB是否试图告诉我这里的特定内容时,这不是很有帮助?
答案 0 :(得分:11)
当你损坏堆栈并覆盖gdb需要的东西时,你会得到这个。 听起来你已经用一堆“......”字符溢出了一个缓冲区。
像valgrind这样的工具可以更轻松地帮助您诊断此类问题。