Coredump-N:多线程破坏栈的调试方法

简介

栈空间的破坏,有一种可能性就是其他线程意外访问本线程的栈空间,导致数据破坏产生coredump。

这种是超级难找原因的一种,因为:
- 非本线程的程序,也就是将代码走查这条路堵死,
- 而且其他线程于本线程没有任何同步的机制,所以产生的机率可能非常的低。

方法

如何调试:

  1. 使用gdb watch 功能,如果出现的概率非常低,就非常困难。如果每次都能复现,可以尝试这种方法;
  2. 使用mprotect函数保护被破坏的地址空间。但是这个函数只能整页的做保护;
  3. 如果出现的地方比较固定也可以尝试加一段时间的等待;
  4. 或者改写对应的kernel部分的mprotect函数,对于特定的线程做特殊的处理。这种和下一个方法,比较麻烦,但是可以一劳永逸的外出检查。
  5. 还可以尝试的一个方法就是在kernel里加code:这个方向属于完全正向的方法:
    先写一个kernel module,在出现问题的代码里,添加代码,通过这个modul向kernel发送将要被破坏的地址空间;问题是需要写一个kernel module实现这个功能,也算是一个一劳永逸的事情。
    如果

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/125670575