成员函数的C ++ GDB断点

时间:2016-03-04 21:14:33

标签: c++ gdb breakpoints member-functions

我在c ++程序中使用GDB时遇到问题。我想为我的班级成员函数设置一个断点,我不确定如何做到这一点的语法。我的程序现在正在查找,我只是想学习使用GDB。我的问题是我在线找到的所有信息只是真正处理一个main()文件而没有其他函数或类,如果它们涉及类,它只使用带有void return语句的函数。

我有一个二叉搜索树类。我想在程序中的函数中设置一个断点。 这是我头文件的一部分。

class BST
{
    BST()
    ...
    private:
    int add((BST * root, BST *src);
}

我正在进入学校的命令行linux服务器。 我可以使用g ++ -g * .cpp(还有其他正常工作的文件)使用我的程序运行GDB,并将文件保存为a.out。 我用

运行GDB
gdb ./a.out

我进入GDB。我可以通过

获得空白显示功能的断点
b BST::disp_block()

但我如何使用我尝试过的添加功能

b BST::int add(BST*, BST *)
b int BST::add(BST*, BST *)
b BST::add(BST*, BST *)

我甚至尝试使用参数名称

b BST::int add(BST * root, BST * src)
b int BST::add(BST * root, BST * src)
b BST::add(BST * root, BST * src)

我不断收到错误

Function "____" not defined.
Make break point pending on future shared library load? (y or [n])

如何为像这样的成员函数设置断点?我假设观察点的格式相同,如果没有,你能否解释一下。

2 个答案:

答案 0 :(得分:13)

正如黑暗猎鹰所说,如果你没有超载,break BST::add应该有效。

您也可以输入:

(gdb) break 'BST::add(<TAB>

(注意单引号)。这应该提示GDB执行tab-completion,并完成这样的行:

(gdb) break 'BST::add(BST*, BST*)

您可以在哪一点添加终止'&#39;然后按Enter键添加断点。

  

我可以获得空白显示功能的断点

函数返回类型不是其签名的一部分,并且 nothing 与发生的事情无关。

答案 1 :(得分:4)

如果为类定义了命名空间,则可能需要指定命名空间。如果它不是标准命名空间std。如果您正在执行正确的二进制文件,则文件名是可选的。您可以验证可执行文件上是否存在该符号。 &#34; nm -C&#34;命令,其中-C处理C ++的名称修改。

所以总结一个例子:如果命名空间是&#34; mySpace&#34;而且班级是&#34; X&#34;其成员是&#34; Y&#34;,那么断点应该如下所示,&#34;(gdb)b mySpace :: X :: Y&#34;