使用GDB中的多个链接文件进行调试

时间:2016-05-16 15:31:35

标签: c++ gdb

我正在调试一个程序,它有一些文件:arr.h是列表类的头文件,它创建一个链表列表(随机生成)。 Howard.cpp是实现文件,main.cpp是我放置调用函数的主函数在列表类的对象上的位置。它包括list.h.我的一个函数遇到了一个seg错误(在Howard.cpp中实现)。我进入了GDB。当seg故障发生时,我知道输入“where”或“list”来获得导致seg故障的函数调用。在这种情况下,当我到达发生seg错误的函数(第0帧)时,我想看到变量以及它们在该函数中的值。但是,当我尝试进入该特定功能,或者键入“info locals”时,我收到消息“没有可用的符号表信息”。我知道这不是真的,但我无法弄清楚如何能够看到它失败的地方。此外,不会显示有关该功能/文件的任何行信息。我认为这与错误是在一个不是可执行文件的文件中的函数有关;但是我能做些什么呢?如果这个问题令人困惑,请随时向我澄清。我对这一切都很陌生。

这是在我的班级教授创建的linux终端环境中,用于练习链表和递归。

好的,我将在这里加一个例子:

我有一个递归复制链接列表数组的函数。递归函数称为table :: reverse_table(node *&,node *,node *)。我调试了它,我知道停止点没有问题。当程序段错误时,我将输入“where”,它将输出:

#0  0x0000000000400e6e in table::reverse_table(node*&, node*, node*) ()
#1  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#2  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#3  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#4  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#5  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#6  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#7  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#8  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#9  0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#10 0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#11 0x0000000000400df1 in table::reverse_table(node*&, node*, node*) ()
#12 0x0000000000400f87 in table::reverse_table(table&, int, int) ()
#13 0x0000000000400fe7 in table::reverse_table(table&) ()
#14 0x0000000000401087 in main ()

然后,当我输入“第0帧”时,它会显示:

#0  0x0000000000400e6e in table::reverse_table(node*&, node*, node*) ()

当我输入“info locals”时,会显示“No symbol table info available”。我无法获得有关segfault在函数中的位置的任何信息; GDB似乎没有那些信息。在调试时是否需要做些什么来包含它?

1 个答案:

答案 0 :(得分:2)

我希望在compilaton期间启用调试标志(-g)。 您收到此消息是因为该进程已终止并且没有可用的符号表信息。您应该尝试通过gdb运行程序并且何时会发生seg错误;使用bt(backtrace)命令检查导致分段错误的最后一个函数。通过在该函数入口点上使用断点再次运行程序。使用next命令或info命令检查locals的值。