【问题标题】:debug multi-threaded programs tips [closed]调试多线程程序提示[关闭]
【发布时间】:2014-02-26 05:29:48
【问题描述】:

我想知道如何有效地调试multi-threaded programs

到目前为止我做了什么:

  1. 我阅读了一些 gdb 参考资料,但他们都很少提及 multi-thread 调试。
  2. 我使用gdb 来调试我的c++ 程序。
  3. linux thread reference

你有什么技巧要分享?

技能

  1. 1> 很好理解代码结构。 2> 逐个线程调试。 3> 就实施的确切时间戳而言。

PS:该方法仍然无法解决我的问题。

【问题讨论】:

  • This 可能对你有帮助。
  • @Borgleader 无法打开网址。同样感谢您。
  • 一开始就做对,完全避免这个问题。几十年来我从未遇到过多线程错误。
  • @EJP 我调试程序以查看手头的内容一步一步地进行。我想把线程模型做一个清晰的画面。
  • @luoluo 我只调试有错误的程序。如果您不理解自己的代码,请编写您理解的代码。

标签: c linux multithreading debugging gdb


【解决方案1】:
  1. 禁用看门狗
  2. 为每个线程分配一个唯一的 ID/名称。通过这种方式,您可以在任何函数中获取线程 ID,并确定执行它的线程。
  3. 了解如何在 Visual Studio 中使用线程窗口: http://msdn.microsoft.com/en-us/library/w15yf86f.aspx

【讨论】:

  • -1:这在 Linux 上不起作用。
  • 线程名称适用于 Linux (pthread_setname_np)。
  • 如何在linux中禁用看门狗???
【解决方案2】:

使用调试器理解程序可能适用于单线程系统。

对于涉及多个线程的问题,它肯定不起作用(很好)。这是每个设计,因为人性是单线程的。

所以要进入多线程系统:

  1. 通过阅读和理解源代码,确定所有线程以及它们如何依赖于另一个线程。
  2. 单独调试每个线程。这可能意味着禁用或同步其他线程。
  3. 根据实现的确切时间戳添加详细日志记录,以不向线程添加同步

这种方法遵循一次只做一件事的范式。

【讨论】:

  • 因为我自己写了源代码,所以我很了解源代码。有时会出现一些问题,我不得不对其进行调试。所以我可以做些什么来弄清楚发生了什么。无论如何,谢谢。
  • @luoluo:见第 2 点,第 2 句。
  • 布局不错,有什么详细的吗?
  • @luoluo:我加了第三点。
  • 我怎样才能达到第三点?
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多