【发布时间】:2013-12-04 11:38:18
【问题描述】:
我使用这个启动 gdb(工作目录是 /home/leon/Develop/tests/atomic/):
gdb ./bin/lin64/httpress
然后我添加带有源文件的目录,它理解我:
Source directories searched: /home/leon/Develop/tests/atomic/third/http_parser:/home/leon/Develop/tests/atomic/src/tools:$cdir:$cwd
当我运行我的二进制文件时,gdb 无法识别我的源代码中发生段错误的行。 gdb如何设置源文件?
程序由gcc编译:
gcc -D_AMD64_ -D_LIN_ -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -m64 -march=core2 -O2 -Wall -I. -I src/include -I src/lib/zlib/ -I src/lib/otg -I third/openssl/include/ -I src/lib/otg/Tools/HostTime/Interfaces/ -I src/lib/otg/Tools/OpenToolsGate/Guest/Interfaces/ -I src/lib/otg/Tools/OpenToolsGate/Guest/Cross -I src/lib/otg/Tools/OpenToolsGate/Common/Interfaces/ -o bin/lin64/httpress -std=c99 -lpthread -lev -lgnutls -O2 -s -DWITH_SSL -Wno-strict-aliasing \
-I /usr/include/libev src/tools/httpress.c -I third/http_parser/ third/http_parser/http_parser.c
好的,我做了一些更改:
gcc -g -ggdb -D_AMD64_ -D_LIN_ -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -m64 -march=core2 -Wall -I. -I src/include -I src/lib/zlib/ -I src/lib/otg -I third/openssl/include/ -I src/lib/otg/Tools/HostTime/Interfaces/ -I src/lib/otg/Tools/OpenToolsGate/Guest/Interfaces/ -I src/lib/otg/Tools/OpenToolsGate/Guest/Cross -I src/lib/otg/Tools/OpenToolsGate/Common/Interfaces/ -o bin/lin64/httpress -std=c99 -lpthread -lev -lgnutls -s -DWITH_SSL -Wno-strict-aliasing \
-I /usr/include/libev src/tools/httpress.c -I third/http_parser/ third/http_parser/http_parser.c
在这种情况下,它仍然无法在二进制文件中找到符号。 但是如果我从 gcc 调用中删除 -s 选项。它写道:
Reading symbols from /home/leon/Develop/tests/atomic/bin/lin64/httpress...done.
但调试器仍然这样说:
(gdb) info source
No current source file.
...在我给他指出目录之后。
【问题讨论】:
-
如果你没有运行程序,
info source返回No current source file是正常的。你试过info sources吗?