如何在operator <with GDB上设置断点

soo*_*iln 2 c++ gdb

基本上标题是什么.我有一个功能:

bool operator< (... lhs, ... rhs)
Run Code Online (Sandbox Code Playgroud)

我想打破.'b operator <(...)'给了我错误:

malformed template specification in command
Run Code Online (Sandbox Code Playgroud)

如何阻止GDB认为<是模板开启者?我也尝试按行号设置断点,但是这个定义是在头文件中,由于某种原因,GDB认为头文件中不存在行号.

GDB 6.8

Tux*_*ude 7

您可以先打印所有出现的运算符<,获取您感兴趣的函数的地址并在其上设置断点.

注意:此方法会工作,不论你的函数定义的是.h.cpp作为您与编译为长文件g++使用-g

$ 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 ) {
Run Code Online (Sandbox Code Playgroud)

我测试了以下代码:

/* 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;
}
Run Code Online (Sandbox Code Playgroud)