2010-10-20 30 views
6

用GDB调试C++程序的一些常用技巧是什么?使用gdb的C++专用调试技巧

有兴趣在所有的招数也

  1. 你怎么称呼的对象的方法(可能是虚拟的)从GDB中

  2. 检查STL对象(漂亮打印它们)

  3. 防止gdb进入STL代码,并继续处理内联,线程,tcma处理内存问题

  4. 处理内联,线程,tcma LLOC(或自定义分配器)gdb命令的

  5. 饲养历史跨越不同的会话

+0

我会对大部分poi nts你已经列在那里...非常好的问题 – MOnsDaR 2010-10-20 16:53:57

+1

另一个项目:通过初始化列表单步执行(可以用​​gdb完成吗?) – nobar 2010-11-01 03:24:27

回答

3

尝试DDD当您调试C++; DDD可以动态加载共享库的源代码,并在调试时显示多个变量。

+0

这是*非常*上次我尝试它的马车。不确定在此期间是否有所改善。 – 2010-10-20 16:50:09

+0

它仍然是非常错误的。与我在Mac(Xcode)或Windows(Studio)上看到的相比,它比光年落后。 – user231536 2010-10-20 17:09:21

+0

Totalview更好,但花钱和Xcode/Studio是平台相关的,所以DDD有时是唯一的选择。 – 2010-10-20 17:24:52

2

1.

set print object 

这使得对象层次的评价通过查看虚表。所以你可以看到什么类型的引用/指向基类的指针。

2.

获取调试相关信息或剥开库系统库:否则调试多线程应用程序是不是在gdb工作很好(最重要的并行线程和libstdC++)。

0

因为我发现我如何使用在〜/ .gdbinit挂钩美化GDB(列表,回溯等),我不能没有那个...的输出

这里是一个blogentry它展示了如何美化代码输出,并把一些“分水岭”你的意见之间: Beautify GDB

我美化了我的回溯过,是非常有用的寻找到一个错误已经发生......也许我当我有权访问它们时我会上传需要的文件(我现在不工作)

+0

链接似乎已经死亡。 – Oak 2013-05-28 08:16:04

+0

你说得对。但是,您可以在互联网档案中找到快照:http://web.archive.org/web/20101217181206/http://www.michaelkelleher.info/?p=51 – MOnsDaR 2013-05-28 18:24:32