Multithreading 调试多线程应用程序
我有5个线程的Linux应用程序Multithreading 调试多线程应用程序,multithreading,Multithreading,我有5个线程的Linux应用程序 Thread1..Thread5 我有一个关键部分,它是缓冲区,保存一些数据 我已经为这个关键部分应用了互斥锁和解锁功能 lock() bufferdata unlock 所有线程都以同步方式访问数据 比如现在 线程3获取锁并处理缓冲区数据。在处理缓冲区时,它覆盖了一些数据,导致缓冲区溢出 在损坏数据后,线程3解锁了关键部分 现在,当线程5获取锁并尝试对损坏的内存执行一些操作时,整个进程都被转储了内核 通常,如果我们将核心连接到GDB并进行回溯跟踪,它将
Thread1..Thread5
我有一个关键部分,它是缓冲区,保存一些数据
我已经为这个关键部分应用了互斥锁和解锁功能
lock()
bufferdata
unlock
所有线程都以同步方式访问数据
比如现在
线程3
获取锁并处理缓冲区数据。在处理缓冲区时,它覆盖了一些数据,导致缓冲区溢出
在损坏数据后,线程3解锁了关键部分
现在,当线程5
获取锁并尝试对损坏的内存执行一些操作时,整个进程都被转储了内核
通常,如果我们将核心连接到GDB并进行回溯跟踪,它将向您显示进程中所有线程的调用堆栈
linux系统中是否仍然存在找到罪魁祸首线程的方法(这里是thread3
)。如果是这样,请让我知道找到罪犯线程的过程
提前感谢缓冲区溢出和其他类型的内存损坏,这可能是正确的工具。调试没有“唯一正确的方法”,调试多线程程序尤其困难。经验是无法替代的 我还应该补充一点,单元测试、断言和良好的代码文档非常有帮助