调试模板代码:在命令行上执行此操作的一些现代方法是什么?

时间:2013-07-03 01:50:01

标签: c++ debugging unix command-line gdb

现在这样可行,但它非常难看,而且当你需要做很多事情时也不太友好。

(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相比之下只是感觉很长。

所以我只是想让这项工作少一点......痛苦。需要改进的领域......

  1. 从功能签名的中间进行选项卡完成搜索,这样我只需在键入合理的人称已知功能名称后选项卡
  2. 实际上#1总结了它,但任何可行的解决方法做其他事情(行号是其中之一,我猜......叹息)是受欢迎的。你知道,我希望clang项目有一些史诗般的功能丰富的gdb前端。

1 个答案:

答案 0 :(得分:0)

哦,对,我知道这件事,但忘记了。只是偶然发现了另一个提到它的答案:

http://lldb.llvm.org/lldb-gdb.html