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

C 多线程应用程序的调试工具,c,debugging,pthreads,C,Debugging,Pthreads,我可以使用哪些免费工具调试Linux中使用pthread库创建的多线程程序?(当然除了纸笔……) 打印调试消息的常用方法效果不佳。GNU gdb调试器及其ddd图形前端支持线程 调试并发程序本质上是困难的,因为调试工具往往会改变调度(通常会使调度更简单,从而使bug消失) 我已经成功地使用了一种技术,即登录到不受锁保护的数据结构。然后,一旦系统空闲,打印数据结构或在调试器中查看它。重要的是避免在日志记录时进行系统调用或调用同步原语,以便日志记录对调度程序的影响最小 static char *lo

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


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

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

调试并发程序本质上是困难的,因为调试工具往往会改变调度(通常会使调度更简单,从而使bug消失)

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

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

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

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