我在c ++程序中使用GDB时遇到问题。我想为我的班级成员函数设置一个断点,我不确定如何做到这一点的语法。我的程序现在正在查找,我只是想学习使用GDB。我的问题是我在线找到的所有信息只是真正处理一个main()文件而没有其他函数或类,如果它们涉及类,它只使用带有void return语句的函数。
我有一个二叉搜索树类。我想在程序中的函数中设置一个断点。 这是我头文件的一部分。
class BST
{
BST()
...
private:
int add((BST * root, BST *src);
}
我正在进入学校的命令行linux服务器。 我可以使用g ++ -g * .cpp(还有其他正常工作的文件)使用我的程序运行GDB,并将文件保存为a.out。 我用
运行GDBgdb ./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])
如何为像这样的成员函数设置断点?我假设观察点的格式相同,如果没有,你能否解释一下。
答案 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;