加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux多线程调试方法

发布时间:2023-01-08 10:32:30 所属栏目:Linux 来源:未知
导读: 后端开发时常要用到多线程。涉及多线程就可能发生死锁,所以在给线程传入参数时,检查读写区域,是否被公用。如果有,可以加锁,也可以指定一块新的内存地址。
下面主要介绍下如何调试死锁

后端开发时常要用到多线程。涉及多线程就可能发生死锁,所以在给线程传入参数时,检查读写区域,是否被公用。如果有,可以加锁,也可以指定一块新的内存地址。

下面主要介绍下如何调试死锁线程。主要采用pstack和gdb两个工具。

1.pstack 是 Linux(比如 Red Hat Linux 系统、Ubuntu Linux 系统等)下一个很有用的工具,它的功能是打印输出此进程的堆栈信息。可以输出所有线程的调用关系栈。

2.GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。Linux 系统中包含了 GNU 调试程序 gdblinux 线程,它是一个用来调试 C 和 C++ 程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况 .

调试流程如下

查找程序的进程号

ps -ef|grep Process_Name

2.打印进程的堆栈信息

pstack Process_NO

多次执行上述命令,比较哪几个线程有共同的函数入口,再比较传入参数地址。找到是哪个线程死锁之后,再启动gdb

gdb

启动之后,attach到死锁进程

attach Process_NO

查看进程堆栈信息

info thread

刚才我们已经初步定位了死锁的线程,现在切换到该线程

thread NO

进入到线程后,再查看线程栈信息

backtrace

切换到另一个线程,查看栈信息

thread NO_2

反复比较,能够看出,具体是哪一块内存触发死锁。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!