首页 > 系统相关 >gdb 根据c语言二进制文件进程号查看内部多线程任务

gdb 根据c语言二进制文件进程号查看内部多线程任务

时间:2024-04-26 16:34:09浏览次数:16  
标签:Thread .. 二进制 LWP unix gdb sysdeps 多线程

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, 个人实践验证,特此记录,留作后续参考。

标签:Thread,..,二进制,LWP,unix,gdb,sysdeps,多线程
From: https://www.cnblogs.com/brian-sun/p/18160379

相关文章

  • python多线程
    多线程的原理是在同一进程内创建多个线程来执行不同的任务,这些线程共享同一进程的资源,包括内存空间、文件句柄等。每个线程拥有独立的执行路径,可以并行执行任务,从而提高程序的效率。在代码中,通过调用threading.Thread类创建了多个线程对象。每个线程对象都有一个target参数......
  • 【python】pyqt中使用多线程处理耗时任务
    在PyQt中使用多线程通常是为了避免界面冻结,特别是在执行耗时的任务时。PyQt本身是基于Qt的,而Qt不允许在除主线程之外的线程中直接操作GUI元素。因此,任何涉及GUI更新的操作都应该在主线程中执行。importsysimportthreadingfromPyQt5.QtWidgetsimportQApplic......
  • 深入理解多线程编程
    title:深入理解多线程编程date:2024/4/2517:32:02updated:2024/4/2517:32:02categories:后端开发tags:线程同步互斥锁死锁避免竞态条件线程池异步编程性能优化第一章:多线程基础1.1线程概念与原理线程:在操作系统中,一个程序可以被划分为多个执行流,每个......
  • Qt 中多线程对应的信号槽
    Qt中通过moveToThread方式来实现的多线程之间数据交互一般是通过信号槽来进行的,信号槽不仅可以用于同一个线程中,也可以用于多线程之间,当用于多线程之间时,其连接方式为Qt::QueuedConnection,即队列连接。多线程之间建立的信号槽主要为如下两个:主线程发送信号:来触发子线程的......
  • etcd集群节点扩容【二进制】
    1、更新etcd集群证书信息#生成新证书cfsslgencert-initcaca-csr.json|cfssljson-bareca-cfsslgencert-ca=ca.pem-ca-key=ca-key.pem-config=ca-config.json-profile=wwwserver-csr.json|cfssljson-bareserver2、拷贝证书到旧节点和新节点#旧节点cp~/TLS/e......
  • python 一个开箱即用的多线程代码
    适合数据采集的多线程代码!#coding=utf-8#coding=gbk#coding=gb2312importrequestsimportthreadingimportqueuedefget_response(source):returnresponsedefdecode(source,response):##保存数据passdefmains():whileTrue:......
  • 多线程中frida定位关键线程的方法
    pthread_create会先得到一个pthread_internal_t结构体最后会调用__pthread_internal_add并将返回值赋给pthread_create的第一个参数thread_out__pthread_internal_add会将传入的pthread_internal_t加入到g_thread_list全局线程列表中,然后将传入的pthread_internal_t返回,也......
  • 多线程如何和连接池交互获取数据?
    在多线程环境中使用连接池来获取数据库连接时,每个线程都可以从池中请求一个连接,然后使用这个连接来执行数据库操作。由于连接池会管理连接的创建和回收,因此它可以有效地减少数据库连接的创建和关闭次数,从而提高性能。以下是一个简单的例子,展示了如何在多线程环境中使用连接池来获......
  • 多线程、分布式处理事务
    分布式事务涉及到多个独立的数据库系统或者多个独立的事务处理,它们需要在一个全局事务中协调一致。这种事务通常用于分布式系统或者微服务架构中,其中不同的服务可能使用不同的数据库。在Python中,实现分布式事务通常需要依赖特定的分布式事务管理器或者框架。例如,可以使用两阶段......
  • c# 多线程控制最大线程数
    假定现在存在一个对象数组,需要对数组中的每个对象进行分析,但是分析存在较长的耗时处理,那么单线程处理就显得很局限了,这里就采用多线程处理,但是多线程要控制最大线程数量。线程与线程之间有会争取CPU资源,这就会导致上下文切换,上下文切换过多,必然增加线程的执行时间,影响了整体执......