基本上标题是什么。我有一个功能:
bool operator< (... lhs, ... rhs)
我想打破。 'b operator&lt;(...)'给了我错误:
malformed template specification in command
如何阻止GDB思考&lt;是一个模板揭幕战?我也尝试按行号设置断点,但是这个定义是在头文件中,由于某种原因,GDB认为头文件中不存在行号。
GDB 6.8
答案 0 :(得分:7)
您可以先打印所有出现的运算符<
,抓取您感兴趣的函数的地址并在其上设置断点。
注意:只要您使用{{.h
进行编译,只要您使用.cpp
或g++
文件编辑,此技术就可以正常工作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 ++声明方面要好得多。