【发布时间】:2018-01-24 12:32:32
【问题描述】:
在使用 configure+make 从源代码构建 Graphviz 2.34.0 之后,我正在尝试调试它。
这是我正在使用的 gdb 脚本:
####################
# Pagination = off #
####################
set pagination off
#######################
# Initial breakpoints #
#######################
dir /home/oren/GIT/klee/benchmarks/graphviz/graphviz-2.34.0/lib/cgraph
dir /home/oren/GIT/klee/benchmarks/graphviz/graphviz-2.34.0/lib/common
start
break input.c:570
break grammar.c:1281
break dot.c:210
run
但由于某种原因,gdb 未能添加 3 个断点中的 2 个。 (起初它看起来像this post,但我添加了开头并且没有更改):
No source file named input.c.
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
No source file named grammar.c.
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
当我尝试逐步完成时,我得到了这个:
210 while ((G = gvNextInputGraph(Gvc))) {
(gdb) stepi
0x0000000000400fba 210 while ((G = gvNextInputGraph(Gvc))) {
(gdb) stepi
0x0000000000400be0 in gvNextInputGraph@plt ()
(gdb) stepi
0x0000000000400be6 in gvNextInputGraph@plt ()
(gdb) stepi
0x0000000000400beb in gvNextInputGraph@plt ()
(gdb) stepi
0x0000000000400b80 in ?? ()
(gdb) stepi
0x0000000000400b86 in ?? ()
非常感谢任何帮助,谢谢!
编辑:
我尝试在没有共享库的情况下构建:
../graphviz-2.34.0/configure --disable-shared
并且包的构建没有错误,但是缺少一些可执行文件(包括我的)。所以我猜这个选项不在桌面上(?) 之后我尝试设置变量 LD_BIND_NOW:
LD_BIND_NOW=1 gdb -x ./gdbCommands.txt --args ./build2/cmd/dot/.libs/dot -Tjpeg -oInput.jpeg Input.txt
然后我得到(使用 step 或 stepi):
(gdb) stepi
0x0000000000400fba 210 while ((G = gvNextInputGraph(Gvc))) {
(gdb)
0x0000000000400be0 in gvNextInputGraph@plt ()
(gdb)
0x00007ffff7b7e200 in gvNextInputGraph () from /usr/lib/libgvc.so.6
(gdb)
0x00007ffff7b7e202 in gvNextInputGraph () from /usr/lib/libgvc.so.6
然后我也询问了info sharedlibrary并得到:
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00007ffff7ddab00 0x00007ffff7df5660 Yes /lib64/ld-linux-x86-64.so.2
0x00007ffff7b601a0 0x00007ffff7bb04b8 Yes (*) /usr/lib/libgvc.so.6
0x00007ffff792e310 0x00007ffff7938722 Yes (*) /usr/lib/libcgraph.so.6
(*): Shared library is missing debugging information.
【问题讨论】:
-
graphviz 共享库很可能是在没有调试信息的情况下构建的。
-
@ks1322, old CFLAGS=-g -O2 ...所以我用 CFLAGS=-ggdb ../graphviz.2.34.0/configure 重新构建,但结果仍然相同...另外,由于我能够调试三个文件之一(dot.c),它可能是其他一些东西...
-
在您尝试
stepi之前,您还可以发布info sharedlibrary的输出吗?操作系统版本、编译器版本、gdb 版本? -
@ks1322,我添加了信息共享库
标签: gdb shared-libraries graphviz