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

C++ 调试模板代码:在命令行上执行此操作的一些现代方法是什么?,c++,debugging,unix,command-line,gdb,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

现在这是可行的,但它相当丑陋,当你需要做很多的时候,它也不太友好

(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)             
(gdb)断开差异匹配修补程序::差异线路
断点4位于0x100021a1c:文件diff_match_patch.h,第658行。
(gdb)
我可以从行号设置断点。这可能是我大部分时间都会采用的方法,因为:

要使用函数名设置断点,如果它恰好位于一堆模板下(例如继承STL容器的类…咕哝咕哝),您必须经历这一考验才能获得它的不虔诚签名,以便在函数上中断

下面是我如何完成的,在我的OS X 10.8.4上,在gdb提示符下键入
break
,然后开始使用前缀(在本例中是diff\u match\u patch,类的名称),然后尝试使用tab complete。此时,我使用tmux的搜索模式来隔离函数的签名(
diff_linestocharsmenge
),您可以看到我粘贴的是函数签名的开始部分,这足以让gdb愉快地在其上设置断点

现在我想让它变得更好一些,但我不知道怎么做。我希望通过使用命令行来保持事情的整洁和健壮

我认为,如果我想要一个好的(友好的)GUI界面,一个好办法就是在XCode项目中设置此代码并从中开始

但是,如果我想更多地采用核心UNIX风格的方法,我有什么样的选择呢

当然,gdb是可靠的(我很高兴它能与我的C++11编译代码无缝地工作),但它缺少许多细节,比如我们从ipython获得的细节。ipython拥有完整的语法高亮显示功能!铿锵编译器产生色彩优美且超级友好的错误和警告(至少参见gcc)。用甜美的曲线向你展示冒犯表情的部分
gdb
相比之下,感觉自己的牙齿长了

所以我只是想让这工作少一点。。。痛苦的有待改进的领域

  • 从函数签名的中间进行制表符完成搜索,这样我就可以在键入函数的合理人名后进行制表
  • 事实上,关于它的第1条总结了一下,但任何可行的解决办法都是受欢迎的(行号就是其中之一,我想……叹气)。你们知道,我希望,
    clang
    project有一些史诗般的功能丰富的gdb前端

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


    b差异匹配补丁。h:658@JRG我知道它能做到这一点,但如果我只知道函数名,我希望它更友好!break diff_match_patch::diff_linestocharsmenge应该可以工作。我认为这个特别的
    gdb
    非常老派,它的版权说明是(c)2004,版本号是6.3.50-20050815(尽管显然是在2012年11月15日编译的)。因此,它实际上对如此古老的历史非常有用。我认为将它更新为全新的东西可能会改进一两件事。这是OSX带来的。编译它有点困难,但也不太可怕。如果您想获得LLDB for Linux,您需要编译它。好处是,从svn编译将为您提供比OSX或Xcode附带的版本更为最新的版本。