使用gdb调试user程序 之 某个线程的调用栈
1.首先使用ps -aux查看我们需要debug的程序的进程id
![]()
2.使用 top -p 1167,然后按下"c",再按下“H”。或者直接运行top -p 1167 -cH

3.查看这个线程的状态
首先切换到目录 /proc/<线程id>
cd /proc/1377
通过cat status知道线程在sleeping状态

通过cat stack可以看到此时的内核的调用栈,原来是在wait。
不过只能看到内核态的调用栈,不能看到user态的调用栈,还是不能定位 我user的代码卡在哪里了。

4.怎么查看user态的调用栈呢,使用gdb
attach 进程:gdb -p 1167
查看内部线程id: info thread

5.切换到内部线程id是6的那个线程,并查看backtrace
至此,用户态的调用栈也就知道了,下面再根据地址在unstrip的对应程序中找到对应的函数名

6.使用addr2line查看在文件中的哪一行

7.至此 可以看到 这个线程 卡在什么地方了。

浙公网安备 33010602011771号