【问题标题】:Debugging multithread application with eclipse cdt使用 eclipse cdt 调试多线程应用程序
【发布时间】:2020-11-24 12:19:45
【问题描述】:

我正在使用 eclipse cdt 使用 c++ 开发多线程应用程序。我需要调试我的代码,我尝试使用 printf 写入控制台,但它不是很有用。如何调试我的多线程代码?

【问题讨论】:

  • 它通常可以开箱即用。你遇到什么问题?您使用的是什么编译器/调试器?
  • 我的代码突然停止,我试图找到我的错误。我的编译器是 Mingw
  • 当您(尝试?)从 Eclipse 启动调试器时遇到什么问题?
  • 请更新问题,详细说明您的情况。为什么 printf 不完全有用? (猜测是由于多个线程写入相同的输出,但这是一个猜测)您已经尝试过什么,为什么没有成功?此外,正如您在此处的评论中提到的,您在寻找什么样的错误?这也应该会影响您想要使用的工具类型,这也可能对其他人在未来的观点有用
  • 此外,添加代码 sn-ps 或您当前正在尝试的伪代码也可以让其他可能遇到相同情况的人更容易理解您的情况

标签: c++ multithreading eclipse debugging eclipse-cdt


【解决方案1】:

这取决于您要查找的内容,但调试多线程应用程序可能与调试单线程应用程序非常相似或极其不同。

首先,一些您仍然可以使用的示例方法:

  1. 在 IDE 中使用断点
  2. 使用各种可靠的相关调试工具,例如 Valgrind。这是一篇充满工具的好文章的链接:C++ TUTORIAL MULTI-THREADED PROGRAMMING DEBUGGING - 2020
  3. 输出到单独的文件或在输出到同一个文件/流时使用锁(不推荐,但会涉及到这一点)

我假设您在使用 printf 时遇到的问题是,它就像多个线程写入同一个文件 - 这是您将在屏幕上看到的输出的竞争条件。如果您遇到多线程错误,我个人仍然建议使用 valgrind 之类的工具,但如果您想继续使用简单的控制台输出,请尝试...

  • 写入不同的文件而不是标准输出/控制台
  • 使用锁/互斥锁来确保只有 1 个线程同时写入标准输出(这可能会掩盖竞争条件或由于在打印之前为该锁添加阻塞而导致的此类问题)
  • 一个更疯狂的想法:共享状态(通过锁定以避免多个线程同时读取或写入数据)或以其他方式将输出返回到专用于写出调试信息的单个线程。与上述类似,但在实现上略有不同,如果您想设计一个专用的多线程日志系统以供将来改进,则很有用

总而言之,您应该在此处使用的确切工具取决于您所面临的确切问题,因此目前还没有强烈的建议。请应用上述工具(包括 Eclipse 中的断点)以适合您的情况。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 2013-03-19
    • 2013-12-23
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2014-08-13
    • 2016-09-01
    相关资源
    最近更新 更多