我在这里阅读golang官方gdb文档 https://golang.org/doc/gdb
我很好奇在检查堆栈时导致问号的原因。
(gdb) bt # backtrace
#0 regexp.TestFind (t=0xf8404a89c0) at /home/user/go/src/regexp/find_test.go:148
#1 0x000000000042f60b in testing.tRunner (t=0xf8404a89c0, test=0x573720) at /home/user/go/src/testing/testing.go:156
#2 0x000000000040df64 in runtime.initdone () at /home/user/go/src/runtime/proc.c:242
#3 0x000000f8404a89c0 in ?? ()
#4 0x0000000000573720 in ?? ()
#5 0x0000000000000000 in ?? ()
那么,gdb优化是否引起了问号?或者究竟是什么导致了这样的问号?
还有一个问题,如何检索问号背后隐藏的信息?
答案 0 :(得分:0)
代码可能已经剥离了调试符号:
gcc -s
您可以使用此简单示例
查看该行为#include <stdio.h>
void riskyCode() {
char *error_str = "This code will fail with SIGSEGV";
*error_str = 'g';
}
int c() {
riskyCode();
return 1;
}
int b() {
return c();
}
int a() {
return b();
}
int main() {
return a();
}
像这样编译
gcc -s -O0 -o main main.c
在gdb中运行代码
gdb main
> run
然后,你会看到??在堆栈位置
bt
#0 0x000000000040056a in ?? ()
#1 0x000000000040057d in ?? ()
#2 0x0000000000400592 in ?? ()
#3 0x00000000004005a2 in ?? ()
#4 0x00000000004005b2 in ?? ()
#5 0x00002aaaaacebc36 in __libc_start_main () from /lib64/libc.so.6
#6 0x0000000000400429 in ?? ()
#7 0x00007fffffff93f8 in ?? ()
#8 0x000000000000001c in ?? ()
#9 0x0000000000000001 in ?? ()
#10 0x00007fffffff9ca2 in ?? ()
#11 0x0000000000000000 in ?? ()
尝试使用相同的库,但使用调试符号编译?