GDB找不到来源

Leo*_*nid 6 c debugging gcc gdb

我使用这个启动gdb(工作目录是/ home/leon/Develop/tests/atomic /):

 gdb ./bin/lin64/httpress
Run Code Online (Sandbox Code Playgroud)

然后我添加了源文件的目录,它理解我:

Source directories searched: /home/leon/Develop/tests/atomic/third/http_parser:/home/leon/Develop/tests/atomic/src/tools:$cdir:$cwd
Run Code Online (Sandbox Code Playgroud)

当我运行我的二进制文件时,gdb无法识别我的源代码中发生segfault的行.如何设置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
Run Code Online (Sandbox Code Playgroud)

好的,我做了一些改变:

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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它仍然无法在二进制文件中找到符号.但是,如果我从gcc调用中删除-s选项.它写道:

Reading symbols from /home/leon/Develop/tests/atomic/bin/lin64/httpress...done.
Run Code Online (Sandbox Code Playgroud)

但调试器仍然这样说:

(gdb) info source
No current source file.
Run Code Online (Sandbox Code Playgroud)

...在我用源代码指向他的目录之后.

jcm*_*jcm 7

你错过了-g你的gcc电话,包括调试信息.

另一方面,我建议将优化级别降低-O2-O0仅使用一次(包括gcc调用有2 -O2).

除此之外,您可以使用以下dir命令将目录添加到gdb的源路径:Source_Path.但这只有在你有适当的调试信息时才有效httpress