2013-11-20 60 views
1

我开始使用这个GDB(工作目录是/ home /莱昂/开发/测试/原子/):GDB不找货源

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 -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编译。 但如果我从gcc调用中删除-s选项。它写道:

Reading symbols from /home/leon/Develop/tests/atomic/bin/lin64/httpress...done. 

但Debugger仍这样说:

(gdb) info source 
No current source file. 

...我点他与源目录后。

+0

如果你没有运行该程序,那么'info source'返回'没有当前源文件'是正常的。你尝试过'信息源'吗? – jcm

回答

4

您错过了-g在您的gcc调用中包含调试信息。另一方面,我建议将优化级别从-O2降低到-O0并且只使用一次(包括gcc调用有2 -O2)。

除此之外,您可以使用dir命令:Source_Path将目录添加到gdb的源路径。但是,如果你在httpress

+1

看来gdb已经看到调试符号(带去除-s选项),但它没有找到源代码。 – Leonid

+0

@Leonidas请检查我对问题更新的评论。试试'info sources'而不是'info source' – jcm

2

删除优化标志已经提供适当的调试信息这只会工作:

-O2 

,并添加标志:

-g -ggdb 
2

但Debugger仍说这:

(gdb)info source
No current sourc e文件。
...之后,我指出他的目录与来源。

预计。目前没有源代码,因为你还没有开始执行你的二进制文件。

您想要startrun您的二进制文件并将其传送到某个执行位置(例如main或崩溃点)。