C GDB不';我找不到消息来源

C GDB不';我找不到消息来源,c,debugging,gcc,gdb,C,Debugging,Gcc,Gdb,我使用以下命令启动gdb(工作目录为/home/leon/develope/tests/atomic/): 然后我添加带有源文件的目录,它了解我: Source directories searched: /home/leon/Develop/tests/atomic/third/http_parser:/home/leon/Develop/tests/atomic/src/tools:$cdir:$cwd 当我运行二进制代码时,gdb无法识别源代码中发生SEGFULT的代码行。 如何设置gd

我使用以下命令启动gdb(工作目录为/home/leon/develope/tests/atomic/):

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

Source directories searched: /home/leon/Develop/tests/atomic/third/http_parser:/home/leon/Develop/tests/atomic/src/tools:$cdir:$cwd
当我运行二进制代码时,gdb无法识别源代码中发生SEGFULT的代码行。 如何设置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.

…在我向他指出带有源代码的目录之后。

您在
gcc
调用中错过了包含调试信息的
-g

另一方面,我建议将优化级别从
-O2
降低到
-O0
,并且只使用一次(包括
gcc
调用有2个
-O2

除此之外,您还可以使用
dir
命令将目录添加到gdb的源路径:。但是,只有在
httpress
删除优化标志中提供了正确的调试信息时,这才有效:

-O2
并添加以下标志:

-g -ggdb
但调试器仍然这样说:

(gdb) info source
No current source file.
(gdb)信息来源
没有当前源文件。
…在我给他指了有资料来源的目录之后

这是意料之中的。没有当前源,因为您尚未开始执行二进制文件


您想
启动
运行
二进制文件,并将其放到某个执行位置(例如
main
,或崩溃点)。

gdb似乎已经看到调试符号(带有删除-s选项),但它找不到源。@Leonidas,请检查我对问题更新的评论。如果没有运行程序,请尝试使用
info sources
而不是
info source
,如果
info source
返回
无当前源文件
,这是正常的。您是否尝试过
信息源