我在Linux中有5个线程的应用程序。
Thread1..Thread5
我有一个关键部分,它是缓冲区,包含一些数据。
我已为此关键部分应用互斥锁定和解锁功能
lock()
bufferdata
unlock
所有线程都以同步方式访问数据。
现在举例来说
thread 3
获取了锁并处理了缓冲区数据。在处理缓冲区时,它覆盖了一些使缓冲区溢出的数据
在破坏数据后,线程3解锁了关键部分。
现在当thread 5
获得锁定并尝试对损坏的内存执行某些操作时,由于这一点,整个过程都被核心转储。
通常,如果我们将核心附加到GDB并进行后向跟踪,它将显示进程中所有线程的调用堆栈。
无论如何在linux系统中找到罪魁祸首线程(这里是thread 3
)。如果是这样,请让我知道找到罪魁祸首线程的过程
提前致谢
答案 0 :(得分:0)
对于缓冲区溢出和其他类型的内存损坏,valgrind可能是正确的工具。没有一种正确的方式"调试,调试多线程程序尤其困难。没有经验可以替代。
我还应该补充说,单元测试,断言和良好的代码文档非常有用。