2014-07-06 216 views
0

我在Linux有5个线程的应用程序。调试多线程应用程序

Thread1..Thread5 

我有一个关键部分是缓冲区保存一些数据。

我有申请互斥锁定和解锁功能这一关键部分

lock() 

bufferdata 

unlock 

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

现在例如

thread 3获得锁和处理所述缓冲的数据。在处理缓冲区时,它已经覆盖了导致缓冲区溢出的一些数据。

破坏数据后,线程3解锁临界区。

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

通常,如果我们将内核附加到GDB并执行回溯,它将向您显示进程中所有线程的调用堆栈。

在linux系统中是否有找到罪魁祸首的线程(这里是thread 3)。如果是这样,请不要让我知道过程中找到罪魁祸首线程提前

回答

0

对于缓冲区溢出和其他类型的内存损坏的

谢谢,valgrind可能是合适的工具。没有“一个正确的方法”来调试,而调试多线程程序特别困难。没有经验的替代品。

我还应该补充一点,单元测试,断言以及良好的代码文档都有很大的帮助。