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;
}