调试多线程应用程序

时间:2014-07-06 12:50:44

标签: multithreading

我在Linux中有5个线程的应用程序。

Thread1..Thread5

我有一个关键部分,它是缓冲区,包含一些数据。

我已为此关键部分应用互斥锁定和解锁功能

lock()

bufferdata

unlock

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

现在举例来说

thread 3获取了锁并处理了缓冲区数据。在处理缓冲区时,它覆盖了一些使缓冲区溢出的数据

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

现在当thread 5获得锁定并尝试对损坏的内存执行某些操作时,由于这一点,整个过程都被核心转储。

通常,如果我们将核心附加到GDB并进行后向跟踪,它将显示进程中所有线程的调用堆栈。

无论如何在linux系统中找到罪魁祸首线程(这里是thread 3)。如果是这样,请让我知道找到罪魁祸首线程的过程

提前致谢

1 个答案:

答案 0 :(得分:0)

对于缓冲区溢出和其他类型的内存损坏,valgrind可能是正确的工具。没有一种正确的方式"调试,调试多线程程序尤其困难。没有经验可以替代。

我还应该补充说,单元测试,断言和良好的代码文档非常有用。