使用gdb进行调试,任何使用STL/boost的c ++代码仍然是一场噩梦.任何使用过STL的gdb的人都知道这一点.例如,请参阅此处代码中的一些调试会话的示例运行.
我试图通过收集提示来减轻疼痛.您能否对我在下面收集的提示发表评论(特别是您使用过的提示以及您建议的任何更改) - 我列出的提示是技术性的降序.
有人使用"Stanford GDB STL utils"和"UCF GDB utils"吗?是否有一些这样的工具用于boost数据结构?上面的util似乎不是递归可用的,例如用于在一个命令内以清晰的方式打印boost :: shared_ptr的向量.
写你的.gdbinit文件.例如,包括C++相关的美化器,列在UCF GDB工具的底部.
使用checked/debug STL/Boost库,例如STLport.
使用日志记录(例如描述这里)
更新:GDB有一个新的C++分支.
也许不是那种"小费"你要找的人,但我不得不说,几年后由C++ STL移动到C++&提升&STL的我的经验是,我现在花了大量的时间更少的GDB比我以前.我把它归结为以下几点:
提升智能指针(特别是"共享指针",以及需要性能时的指针容器).我不记得上次我必须写一个明确的删除(删除是C++恕我直言的"转到").有很多GDB时间跟踪无效和泄漏指针.
boost充满了经过验证的代码,你可能会把它们组合成一个低级版本.例如boost::bimap
,对于LRU缓存逻辑的通用模式非常有用.还有另一堆GDB时间.
采用单元测试. boost::test
的AUTO宏意味着设置测试用例绝对轻而易举(比CppUnit更容易).这很长一段时间内它会被内置到你必须附加调试器的任何东西之前.
与此相关的是,工具boost::bind
更容易设计测试.例如,算法可以更通用,并且与它们所操作的类型的联系更少; 这使得将它们插入测试垫片/代理/模拟对象等更容易(事实上,暴露于boost的模板 - tasticness将鼓励你"敢于模板化"你以前从未考虑过的事情,产生类似的测试好处).
boost::array
."C阵列"性能,在调试版本中进行范围检查.
提升充满了伟大的代码,你不能不学习
你可能会看:
使用gdb检查标准容器(std :: map)内容