C++ 如何在运算符<;上设置断点;使用GDB
基本上就是标题所说的。我有一个功能:C++ 如何在运算符<;上设置断点;使用GDB,c++,gdb,C++,Gdb,基本上就是标题所说的。我有一个功能: bool operator< (... lhs, ... rhs) 我怎样才能阻止GDB认为
bool operator< (... lhs, ... rhs)
我怎样才能阻止GDB认为<是一个模板开启器?我也尝试过按行号设置断点,但这个定义在头文件中,出于某种原因,GDB认为头文件中不存在行号
GDB 6.8试着用单引号括起来:
break 'operator<(Blah, Blah)'
break'操作符您可以首先打印所有出现的操作符单引号都不起作用,当我尝试制表符完成时,我发现这个操作符功能根本没有被GDB列出。让我做一些测试看看它是否真的被使用。。。我希望我可以升级GDB,但我正在一台没有root的服务器上进行远程调试。好的,我将定义移动到了cpp文件,并且能够按行号设置断点,但仍然不能按符号设置断点,错误与以前相同。更大的问题似乎是这个函数从未被调用,这解释了为什么我的multiset如此有效…你不需要root来安装gdb,只需在home目录中安装它并从那里运行它
break 'operator<(Blah, Blah)'
$ gdb test
(gdb) p 'operator <'
$1 = {bool (MyClass &, MyClass &)} 0x4009aa <operator<(MyClass&, MyClass&)>
(gdb) b *0x4009aa
Breakpoint 1 at 0x4009aa: file test.h, line 5.
(gdb) r
Starting program: /home/agururaghave/.scratch/gdb-test/test
Breakpoint 1, operator< (obj1=..., obj2=...) at test.cpp:6
6 friend bool operator < ( MyClass &obj1, MyClass &obj2 ) {
/* test.h */
#include <iostream>
class MyClass {
public:
friend bool operator < ( MyClass &obj1, MyClass &obj2 ) {
std::cout << "operator <" << "\n";
return true;
}
};
/* test.cpp */
#include "test.h"
int main() {
MyClass myObj1;
MyClass myObj2;
bool result = myObj1 < myObj2;
std::cout << result << "\n";
return 0;
}