Multithreading 调试多线程应用程序

Multithreading 调试多线程应用程序,multithreading,Multithreading,我有5个线程的Linux应用程序 Thread1..Thread5 我有一个关键部分,它是缓冲区,保存一些数据 我已经为这个关键部分应用了互斥锁和解锁功能 lock() bufferdata unlock 所有线程都以同步方式访问数据 比如现在 线程3获取锁并处理缓冲区数据。在处理缓冲区时,它覆盖了一些数据,导致缓冲区溢出 在损坏数据后,线程3解锁了关键部分 现在,当线程5获取锁并尝试对损坏的内存执行一些操作时,整个进程都被转储了内核 通常,如果我们将核心连接到GDB并进行回溯跟踪,它将

我有5个线程的Linux应用程序

Thread1..Thread5
我有一个关键部分,它是缓冲区,保存一些数据

我已经为这个关键部分应用了互斥锁和解锁功能

lock()

bufferdata

unlock
所有线程都以同步方式访问数据

比如现在

线程3
获取锁并处理缓冲区数据。在处理缓冲区时,它覆盖了一些数据,导致缓冲区溢出

在损坏数据后,线程3解锁了关键部分

现在,当
线程5
获取锁并尝试对损坏的内存执行一些操作时,整个进程都被转储了内核

通常,如果我们将核心连接到GDB并进行回溯跟踪,它将向您显示进程中所有线程的调用堆栈

linux系统中是否仍然存在找到罪魁祸首线程的方法(这里是
thread3
)。如果是这样,请让我知道找到罪犯线程的过程


提前感谢缓冲区溢出和其他类型的内存损坏,这可能是正确的工具。调试没有“唯一正确的方法”,调试多线程程序尤其困难。经验是无法替代的

我还应该补充一点,单元测试、断言和良好的代码文档非常有帮助