如何在运算符上设置断点<与GDB

时间:2013-03-08 19:38:26

标签: c++ gdb

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

bool operator< (... lhs, ... rhs)

我想打破。 'b operator&lt;(...)'给了我错误:

malformed template specification in command

如何阻止GDB思考&lt;是一个模板揭幕战?我也尝试按行号设置断点,但是这个定义是在头文件中,由于某种原因,GDB认为头文件中不存在行号。

GDB 6.8

2 个答案:

答案 0 :(得分:7)

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

注意:只要您使用{{.h进行编译,只要您使用.cppg++文件编辑,此技术就可以正常工作1}}

-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 ) {

答案 1 :(得分:2)

尝试将其放在单引号中:

break 'operator<(Blah, Blah)'

您还可以使用TAB-completion来帮助GDB帮助您

如果这不能帮助您,则需要更加具体地说明运营商的签名,而不是说&#34; ...&#34;,因为您需要省略问题的重要部分!

哦,我刚看到你正在使用即将庆祝5岁生日升级的GDB 6.8。 GDB 7在解析C ++声明方面要好得多。