概述
2019独角兽企业重金招聘Python工程师标准>>>
yum install -y gdb
gdb attach 1 #附加到进程
(gdb) thread apply all bt #打印所有线程堆栈
Thread 1 (Thread 0x7f3bb2188900 (LWP 1)):
#0 0x00007f3bb09bd7d3 in __epoll_wait_nocancel () from /lib64/libc.so.6
#1 0x00007f3bb2229859 in sd_event_wait ()
#2 0x00007f3bb21f8933 in manager_loop ()
#3 0x00007f3bb21be751 in main ()
(gdb) detach #分离进程
Detaching from program: /usr/lib/systemd/systemd, process 1
(gdb) quit #退出
可能这样操作比较麻烦,所以我们需要用到以下几个参数 -q: 不打印gdb的版权消息 --batch: 执行批处理,不进入交互模式 --ex: 执行gdb 命令
sudo gdb -q --batch --ex "attach 1" -ex "thread apply all bt" -ex "detach"
也许你觉得这样也比较麻烦,那使用我写的一个脚本吧
vi gstack #复制以下脚本并保存
chmod u+x gstack #给gstack添加可执行权限
./gstack 1 #尝试运行下吧
cp gstack /usr/bin #加入环境变量
gstack 1#全局调用
gstack脚本
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: bstack lose param <process-id>" 1>&2
exit 1
fi
if [ -n "$(echo $1| sed -n "/^[0-9]+$/p")" ];then
r=$(ps -p $1 | grep $1)
if [ "$r" != "" ]; then
logdir="$HOME/gstack_log"
if [ ! -d $logdir ]; then
mkdir -p "$logdir"
fi
filedir=$logdir/$1_$(date '+%Y%m%d%H%M%S')
sudo gdb -q --batch --ex "attach "$1 -ex "thread apply all bt" -ex "detach" >> $filedir
echo "stack log path:"$filedir
else
echo "Process of $1 does not exist"
fi
else
echo "$1 is not a number"
exit 1
fi
转载于:https://my.oschina.net/weidedong/blog/785377
最后
以上就是感动夕阳为你收集整理的centos7之gdb调试进程的全部内容,希望文章能够帮你解决centos7之gdb调试进程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复