gdb 根据c语言二进制文件进程号查看内部多线程任务
C语言二进制文件 a 编译时添加了 -g (gdb 调试), 但是 gdb a 这种方式有时不容易复现一些场景。这时可以先正常启动 a, 然后根据 a 的进程号启动gdb调试。
# 1. 找到程序进程号
ps aux | grep a
# 2. 使用 GDB 附加到该进程
sudo gdb -p [PID]
# 3. 使用 info threads 命令来列出所有线程
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7f67884d0700 (LWP 62890) "a" 0x00007f6787dc338d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
2 Thread 0x7f6781eb2700 (LWP 62892) "a" 0x00007f6787dc338d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
3 Thread 0x7f67816b1700 (LWP 62893) "a" 0x00007f6787dc338d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
4 Thread 0x7f6780eb0700 (LWP 63052) "a" __lll_lock_wait_private () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
5 Thread 0x7f677bfff700 (LWP 63053) "a" 0x00007f6787dc338d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
6 Thread 0x7f677b7fe700 (LWP 63054) "a" 0x00007f6787dee3dd in write () at ../sysdeps/unix/syscall-template.S:84
7 Thread 0x7f677affd700 (LWP 63055) "a" 0x00007f6787dc338d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
# 4. 可见程序 a 中有 7 个进程正在运行,选中其中一个进程查看
thread 1
# 5. 切换到感兴趣的线程后,使用 bt(或 backtrace)命令可以查看线程的调用堆栈。
bt
# 6. 完成调试后,可以使用 detach 命令来从进程中分离,然后使用 quit 退出 GDB
(gdb) detach
(gdb) quit
以上方法来自chatgpt, 个人实践验证,特此记录,留作后续参考。
gdb 根据c语言二进制文件进程号查看内部多线程任务的更多相关文章
- Linux如何查看进程、杀死进程、查看端口等常用命令
查看进程号 1.ps 命令用于查看当前正在运行的进程.grep 是搜索 例如: ps -ef | grep java表示查看所有进程里 CMD 是 java 的进程信息2.ps -aux | grep ...
- 【Linux】查看进程号
1.查看占用8080端口的进程号 lsof -i: | awk '{print $2}' | uniq | grep -P -o "[0-9]{2,5}" 2.查看使用java进程 ...
- 系统中sshd进程的查看,数量统计,进程号输出,进程清理命令
1. 查看sshd进程 ps -ef|grep sshd ps -ef:打开所有的进程 grep sshd:过滤出含有“sshd”字符的进程. 2. 查看sshd进程中的sftp进程,不含查询的进程 ...
- Linux下查看端口占用进程号,程序名的方法
Linux下查看端口占用进程号,程序名的方法,方便我们查找什么进程导致系统变慢等需要.linux下查看端口占用情况: 1. 查看哪个进程占用了819端口: case9-sghfofo:/usr/loc ...
- linux篇---根据端口号查看进程位置
1)说明:Linux的所有进程都保存在/proc/目录下,保存形式为:/proc/进程号.进入到进程号目录后,里面有一个cwd链接文件即指向的进程的的目录. 2) 操作: A:根据端口号查进程 如:l ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
- [转]gdb结合coredump定位崩溃进程
[转]gdb结合coredump定位崩溃进程 http://blog.sina.com.cn/s/blog_54f82cc201013tk4.html Linux环境下经常遇到某个进程挂掉而找不到原因 ...
- 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...
- Android进程命令查看
• 进程 是指一个具有独立功能的程序在某个数据集上的一次动态运行过程,它是系统进行资源分配和调度的最小单元. • 一个进程能够拥有多个线程.每一个线程必须有一个父进程. • ...
- ●linux进程的查看与操作●
查看进程:ps -le | more ,ps -aux | more ,ps & 后台运行 jobs 查看后台进程 fg [n]调到前台 bg放到后台 ctrl +c 终止 ctrl ...
随机推荐
- link标签的media属性
media属性表示被链接的文档将显示在什么设备上.比如下面的例子: <head> <link rel="stylesheet" type="text/c ...
- nim 7. nimble--制作包
1. nim的包管理工具: nimble nim的包管理工具,是nimble. 在安装nim的时候,已经自带了nimble. nible通常需要使用git服务器存储包,因此,本地需要git命令的支持. ...
- QT中各控件的属性和方法
1.在QT6中,QLabel类具有许多属性和方法,以下是QLabel类的常见属性和调用方法:setText(const QString &text):设置标签的文本内容.setAlignmen ...
- group_concat 和 case when 的坑
SELECT size,instrument_id, (CASE side WHEN "sell" THEN group_concat(id ORDER BY id) END )a ...
- 在kubernetes里使用AppArmor限制容器对资源的访问
目录 一.系统环境 二.前言 三.AppArmor简介 四.AppArmor和SELinux的区别 五.使用AppArmor限制nginx程序访问目录 5.1 安装nginx 5.2 修改nginx的 ...
- zabbix笔记_001
zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管 ...
- 算法金 | 详解过拟合和欠拟合!性感妩媚 VS 大杀四方
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今天我们来战 过拟合和欠拟合,特别是令江湖侠客闻风丧胆的 过拟合,简称过儿, Emmm ...
- ansible搭建
ansible配置步骤 1.创建用户 2.用户提权 3.用户免密 4.cp ansible配置文件 5.配置主机清单 6.修改ansible 用户路径下的配置文件 1.创建用户(都要做) [root@ ...
- pandas基础--数据结构:DataFrame
从本文开始介绍pandas的相关知识. pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas ...
- Symbol.for()
当我们在不同的模块或文件中需要共享一个特定的Symbol时,可以使用Symbol.for()方法来实现. 假设我们有两个模块,分别是module1.js和module2.js.我们希望在这两个模块中使 ...