多线程应用程序的调试工具

时间:2010-10-17 10:15:03

标签: c debugging pthreads

我可以使用哪些免费工具来调试在Linux中使用pthread库创建的多线程程序? (除了笔和纸,当然......)

打印调试消息的常用方法效果不佳。

2 个答案:

答案 0 :(得分:2)

调试并发程序本身就很困难,因为调试工具往往会改变调度(通常会让它更加驯服,以便错误消失)。

我取得了一些成功的一项技术是登录一个不受保护的数据结构。然后,一旦系统空闲,打印数据结构或在调试器中查看它。重要的是避免在记录时进行系统调用或调用同步原语,以便日志记录对调度程序的影响最小。

static char *log_buffer[LOG_BUFFER_LENGTH];
static size_t log_index;
#define LOG(message) (log_buffer[log_index++] = (message))

如果您的线程在日志记录过程中被中断,则日志缓冲区将变得不一致。尽管必须牢记这一点,但这对于调试来说是不可能的。我从来没有在多处理器机器上尝试过这个;我认为缺乏同步会使日志缓冲区在实践中很快变得不一致。

¹ 这是不在多处理器机器上进行多线程编程的另一个原因。请改用消息传递。

答案 1 :(得分:1)

GNU gdb调试器及其ddd图形前端支持线程。