用gdb调试运行中的程序

2023-10-27

  今天一早到了公司,策划就和我说,前几天出过问题的那台服务器,玩家又登陆不上游戏了。
  上去一看,又是CPU使用100%。这问题最近经常出现,又不好查,就干脆让运维先别重启了,直接上线调试。
  一开始以为是lua脚本的死循环,后来才发现原来是底层的定时器问题。查了一整个上午,学到了一些gdb的东西,这里记录一下。

1、使用gdb调试正在运行的程序:
先使用top或者ps命令,查出进程的ID。
然后使用:
gdb 程序名 进程ID
可以看到Attaching to program:xxx,process 18675 这样的输出,表示已经附上进程开始调试。
对于多线程,可以先列出线程的信息
(gdb) info thread
得到线程的序号

  9 Thread 0xb7fb1b90 (LWP 18676)  0x0073f402 in __kernel_vsyscall ()
  8 Thread 0xb75b0b90 (LWP 18677)  0x0073f402 in __kernel_vsyscall ()
  7 Thread 0xb6bafb90 (LWP 18678)  0x0073f402 in __kernel_vsyscall ()
  6 Thread 0xb61aeb90 (LWP 18679)  0x0073f402 in __kernel_vsyscall ()
  5 Thread 0xb57adb90 (LWP 18680)  0x0073f402 in __kernel_vsyscall ()
  4 Thread 0xb4dacb90 (LWP 18681)  0x0073f402 in __kernel_vsyscall ()
  3 Thread 0xb41a9b90 (LWP 18682)  0x0073f402 in __kernel_vsyscall ()
  2 Thread 0xb37a8b90 (LWP 18683)  0x0073f402 in __kernel_vsyscall ()
* 1 Thread 0xb7fb26e0 (LWP 18675)  0x0073f402 in __kernel_vsyscall ()

然后就可以选择需要调试的线程:
(gdb) thread 2
调试完成后,要使用detach 命令,让程序可以继续跑起来。

(gdb) detach
Detaching from program: xxx, process 18675

2、查看lua脚本的调用
当前调用的数据,在L->ci中可以查到,上一层调用的数据保存在L->ci - 1中,一直到L->base_ci
调用的文件名,以及行数,可以查看:
l->ci->func->value->gc->cl->l->p->source
l->ci->func->value->gc->cl->l->p->lineinfo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用gdb调试运行中的程序 的相关文章

  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 从 Python 访问 802.11 无线管理帧

    我想从 Linux 上的 Python 嗅探 802 11 管理 探测请求 帧 这可以从 Scapy 中实现 如下所示 coding utf 8 from scapy all import def proc p if p haslayer
  • 从 php/linux 获取 pdf 的布局模式(横向或纵向)

    给定一个 PDF 如何使用 PHP lib 或 Linux 命令行工具获取 PDF 的布局模式 或相对宽度 高度 Using http www tecnick com public code cp dpage php aiocp dp tc
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判

随机推荐

  • 一键生成App图标所有尺寸的三个酷站分享

    目前很多app设计新手不懂如何去生成各种APP图标尺寸 其实很简单的 目前网上有很多一键生成App图标所有尺寸酷站和工具 在这里25学堂不啰嗦了 大家可以前往iOS和安卓APP启动图标的尺寸和圆角大小详解 去查看图标的尺寸大小 常见的ios
  • c++ 函数返回引用

    一 c 函数的返回分为以下几种情况 1 主函数main的返回值 这里提及一点 返回0表示程序运行成功 2 返回非引用类型 函数的返回值用于初始化在跳用函数出创建的临时对象 用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的 如果返
  • 用实例去看看url传参怎么用

    用实例去剖析url传参方式 常见的url传参 1 传确定的值 2 传的是变量 3 传定值 多个 4 传变量 多个 常见的url传参 1 传确定的值 url https www baidu com data 123 通过一个例子去看一下怎么用
  • 国产开源python IDE 介绍

    1 目的 纯粹为了宣传 2 测试版本 1 2 4 3 感受 如果是写脚本还是挺好用的 而且轻便 但是如果写django项目等可能就要麻烦一些 纯粹个人感受 我之前使用pycharm 中间使用sublime 目前正在学习使用vscode 因为
  • 图的邻接矩阵、邻接表存储和图的广度优先搜索(BFS)、深度优先搜索(DFS)

    图的邻接矩阵 邻接表存储和图的广度优先搜索 BFS 深度优先搜索 DFS 图及其存储方式 广度优先搜索 深度优先搜索 本文将先介绍图的存储方式 邻接矩阵和邻接表 接着介绍图的基本算法 广度优先搜索和深度优先搜索 图及其存储方式 图是一种非线
  • [架构之路-201]-《软考-系统分析师》- 关键技术 - 结构化分析方法与面向对象分析(分析与设计的区别、pre架构设计、架构前设计)

    目录 前言 一 分析与设计的区别 二 结构化分析方法 2 1 实体关系图 E R 图 名词 2 2 数据流图 数据的流动 1 顶层图 2 逐层分解 2 3 状态转换图 动作 2 4 数据字典 三 面向对象分析方法 3 1 用例模型 3 2
  • 相量的加减乘除计算

    相量的加减乘除计算 矢量是物理学中的术语 是指具有大小 magnitude 和方向的量 如速度 加速度 力等等就是这样的量 向量是数学中的术语 也称为欧几里得向量 几何向量 矢量 与向量对应的量叫做数量 在物理学中称为标量 数量只有大小 没
  • docker容器启动的问题 - docker容器和虚拟机的比较 - docker的底层隔离机制

    目录 一 docker容器启动的问题 二 什么是docker仓库 三 虚拟机和docker容器的区别 docker的优势 docker的缺点 对比 四 docker的底层隔离机制 参考文献 LXC linux容器简介 在操作系统层次上为进程
  • java代码比较数据_比对两个数据库的差异:Java篇

    人类之所以进步 在于会使用工具 我们知道 有代码比对工具 有版本控制控制工具比对同一个文件不同人修改的地方 还有eclipse工具提供的Compare History 工具 我同事比较 同情 我每次发布产品版本都要手动比对本地和在线数据库的
  • 解决Navicat远程服务器2013-Lost connection to MYSQL server at 'reading for initial communication packet'

    问题所在 使用Navicat远程服务器mysql数据库时报错误 2013 Lost connection to MYSQL server at reading for initial communication packet system
  • 工具类Util中的@Value注解注入为空

    1 原因分析 在后端开发当中我们可能会使用到工具类 而一般的工具类中的方法都是静态方法 而 Value注解只能给普通变量注入值 不能直接给静态变量赋值 2 延伸 静态变量 即类变量 是一个类的属性 而不是对象的属性 spring依赖注入是基
  • 【Java基础知识 4】秒懂数组拷贝,感知新境界

    目录 一 前言 二 为什么数组的起始索引是0而不是1 三 起别名 四 System arraycopy与Arrays copyOf 浅拷贝
  • socat工具

    socat socat 是一个功能强大的网络工具 它允许在两个连接的数据流之间建立双向通信 该工具可以用于创建虚拟串口 转发网络流量 调试和测试网络应用程序等 以下是 socat 的一些主要特点和用途 连接不同类型的套接字 socat 可以
  • Asymmetric Gained Deep Image Compression With Continuous Rate Adaptation文献复现

    前言 相关论文阅读自行解决 这里主要是记录代码的学习与实验的复现 github地址 此代码非官方部署代码 而是私人实现的 本博客仅做学习记录 1 代码学习 1 1 主要框架部分 这里的主编解码器与高斯建模的方式 采用的是同joint上下联合
  • 推荐系统与深度学习-学习笔记六

    仅供学习 第六章 基于深度学习的推荐模型 6 1 基于DNN的推荐算法 wide deep 6 2 基于DeepFM的推荐算法 6 3 基于矩阵分解和图像特征的推荐算法 6 4 基于循环网络的推荐算法 6 5 基于生成对抗网络的推荐算法 第
  • 发布镜像【DockerHub或阿里云】

    发布镜像到DockerHub 登录DockerHub root us4ci6jaxom1jjz2 docker login u windrose0318 Password WARNING Your password will be stor
  • vs2013中静态库lib文件的生成与使用

    一 静态库lib文件的生成 1 文件 新建项目 Visual C win32项目 输入项目名称 例如 CMath 2 项目右键 添加 新建项 CMath h class CMath public CMath CMath void setX
  • 【iOS】UserDefaults使用的一些“坑”

    UserDefaults使用的一些 坑 项目场景 问题1 初始化程序组对应UserDefaults失败 原因分析 问题2 没有记录数据的时候 读取值为0 or false 导致配置使用时错误 原因分析 问题3 extension进程中监听需
  • google lab 深度学习_Google 深度学习笔记 - 深度神经网络实践

    优化 Regularization 在前面实现的RELU连接的两层神经网络中 加Regularization进行约束 采用加l2 norm的方法 进行负反馈 代码实现上 只需要对tf sgd relu nn中train loss做修改即可
  • 用gdb调试运行中的程序

    今天一早到了公司 策划就和我说 前几天出过问题的那台服务器 玩家又登陆不上游戏了 上去一看 又是CPU使用100 这问题最近经常出现 又不好查 就干脆让运维先别重启了 直接上线调试 一开始以为是lua脚本的死循环 后来才发现原来是底层的定时