现在这样可行,但它非常难看,而且当你需要做很多事情时也不太友好。
(gdb) break diff_match_patch<std::__1::basic_string<wchar_t, std::__1::cha
r_traits<wchar_t>, std::__1::allocator<wchar_t> >, diff_match_patch_traits
<wchar_t> >::diff_linesToCharsMunge
Breakpoint 4 at 0x100021a1c: file diff_match_patch.h, line 658.
(gdb)
我可以从行号设置断点。这可能是我大部分时间都会诉诸的,因为:
要设置一个带有函数名称的断点,如果它恰好位于一堆模板下面(例如一个继承STL容器的类......抱怨叽叽喳喳),你必须经历这种考验以获得不敬虔的它的签名,以打破一个功能。
以下是我能够完成它的方法,在我的OS X 10.8.4上,你在gdb提示符下键入break
,然后开始使用前缀(在这种情况下,它是diff_match_patch,名称(班级),然后尝试制表完成。此时我使用tmux的搜索模式来隔离函数的签名(diff_linesToCharsMunge
),你看到我粘贴的是函数签名的开头部分,这足以让gdb愉快地设置断点在上面。
现在我想让这更好一些,但我不确定如何。我希望通过保持命令行保持干净和健壮。
我认为如果我想要一个漂亮的(友好的)GUI界面,一个好的方法就是在XCode项目中设置这个代码并从那里开始。
但是如果我想采用更多核心的UNIX风格方法,那对我来说有什么样的选择呢?
gdb是可靠的,肯定的(男孩,我很高兴它似乎与我的clang编译的C ++ 11代码无缝地工作),但是它缺少许多细节,比如我们从例如ipython
。 ipython有完整的语法突出显示! clang编译器产生漂亮的颜色和超级友好(至少参见gcc
)错误和警告。随着甜蜜的波浪线向你展示令人讨厌的表情! gdb
相比之下只是感觉很长。
所以我只是想让这项工作少一点......痛苦。需要改进的领域......
clang
项目有一些史诗般的功能丰富的gdb前端。