我是靠谱客的博主 感动夕阳,最近开发中收集的这篇文章主要介绍centos7之gdb调试进程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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调试进程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部