成员函数的 C++ GDB 断点
C++ GDB breakpoint for member functions
我在我的 C++ 程序中使用 GDB 时遇到问题。我想为我的 class 成员函数设置一个断点,但我不确定如何使用语法。我的程序现在正在查找,我只是想学习使用 GDB。我的问题是我在网上找到的所有信息实际上只涉及一个 main() 文件,没有其他函数或 classes,如果它们涉及 classes,它只使用带有 void return声明。
我有一个二叉搜索树class。我想在我的程序中的一个函数处设置一个断点。
这是我的头文件部分。
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])
如何为这样的成员函数设置断点?我假设观察点是相同的格式,如果不是,你也能解释一下吗?
正如 Dark Falcon 所说,如果您没有过载,break BST::add
应该可以工作。
您还可以输入:
(gdb) break 'BST::add(<TAB>
(注意单引号)。这应该会提示 GDB 执行制表符补全,并像这样完成该行:
(gdb) break 'BST::add(BST*, BST*)
以及您可以在哪个点添加终止 '
' 并按 Enter 键添加断点。
I can get a break point for the void display function
函数 return 类型不是其签名的一部分,与正在发生的事情没有任何关系。
如果为 class 定义了命名空间,您可能需要指定命名空间。如果它不是标准命名空间 std。如果您正在执行正确的二进制文件,则文件名是可选的。您可以验证符号是否存在于可执行文件中。 "nm -C" 命令,其中 -C 处理 C++ 的名称修饰。
所以用一个例子来总结一下:如果命名空间是"mySpace",class是"X",其成员是"Y",那么断点应该像下面一个,“(gdb) b mySpace::X::Y”
我在我的 C++ 程序中使用 GDB 时遇到问题。我想为我的 class 成员函数设置一个断点,但我不确定如何使用语法。我的程序现在正在查找,我只是想学习使用 GDB。我的问题是我在网上找到的所有信息实际上只涉及一个 main() 文件,没有其他函数或 classes,如果它们涉及 classes,它只使用带有 void return声明。
我有一个二叉搜索树class。我想在我的程序中的一个函数处设置一个断点。 这是我的头文件部分。
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])
如何为这样的成员函数设置断点?我假设观察点是相同的格式,如果不是,你也能解释一下吗?
正如 Dark Falcon 所说,如果您没有过载,break BST::add
应该可以工作。
您还可以输入:
(gdb) break 'BST::add(<TAB>
(注意单引号)。这应该会提示 GDB 执行制表符补全,并像这样完成该行:
(gdb) break 'BST::add(BST*, BST*)
以及您可以在哪个点添加终止 '
' 并按 Enter 键添加断点。
I can get a break point for the void display function
函数 return 类型不是其签名的一部分,与正在发生的事情没有任何关系。
如果为 class 定义了命名空间,您可能需要指定命名空间。如果它不是标准命名空间 std。如果您正在执行正确的二进制文件,则文件名是可选的。您可以验证符号是否存在于可执行文件中。 "nm -C" 命令,其中 -C 处理 C++ 的名称修饰。
所以用一个例子来总结一下:如果命名空间是"mySpace",class是"X",其成员是"Y",那么断点应该像下面一个,“(gdb) b mySpace::X::Y”