gpt4 book ai didi

c++ - 使用 gdb 调试 C++ STL/Boost 的最佳实践

转载 作者:IT老高 更新时间:2023-10-28 13:59:28 25 4
gpt4 key购买 nike

使用 gdb 调试,任何使用 STL/boost 的 c++ 代码仍然是一场噩梦。任何使用过 STL 的 gdb 的人都知道这一点。例如,在代码 here 中查看一些调试 session 的示例运行。 .

我正在尝试通过收集提示来减轻痛苦。您能否评论一下我在下面收集的提示(特别是您一直在使用的提示以及您建议对它们进行的任何更改)-我列出的提示是技术性的降序。

  • 有人在用"Stanford GDB STL utils"吗?和 "UCF GDB utils" ?是否有一些用于 boost 数据结构的工具?上面的实用程序似乎不能递归使用,例如用于在一个命令中以清晰的方式打印 boost::shared_ptr 的 vector 。
  • 编写您的 .gdbinit 文件。例如,包括 C++ 相关的美化器,列在 UCF GDB 实用程序的底部。
  • 使用检查/调试 STL/Boost 库,例如 STLport。
  • 使用日志记录(例如,如 here 所述)

更新:GDB 有一个 new C++ branch .

最佳答案

也许不是您正在寻找的那种“小费”,但我不得不说,在从 C++ 和 STL 转向 C++ 和 boost 和 STL 几年后,我的经验是我现在花了很多 在 GDB 中的时间比我以前少了。我把这归结为几件事:

  • boost 智能指针(特别是“共享指针”,以及需要性能时的指针容器)。我不记得上次我必须写一个显式删除(删除是 C++ 恕我直言的“goto”)。 GDB 花费了大量时间来跟踪无效和泄漏的指针。
  • boost 充满了经过验证的代码,您可能会将其作为劣质版本的代码组合在一起。例如 boost::bimap 非常适合 LRU 缓存逻辑的常见模式。还有一大堆 GDB 时间。
  • 采用单元测试。 boost::test 的 AUTO 宏意味着设置测试用例 ( easier than CppUnit ) 绝对是轻而易举的事。这在它被内置到任何你必须附加调试器的东西之前很久就捕获了很多东西。
  • 与此相关,boost::bind 之类的工具可以更轻松地进行测试设计。例如,算法可以更通用,并且与它们所操作的类型的绑定(bind)更少;这使得将它们插入测试垫片/代理/模拟对象等变得更容易(而且暴露于 boost 的模板特性将鼓励你“敢于模板化”你以前从未考虑过的东西,从而产生类似的测试好处)。
  • boost::array。 “C 数组”性能,在调试版本中进行范围检查。
  • boost 充满了你不禁要学习的优秀代码

关于c++ - 使用 gdb 调试 C++ STL/Boost 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com