当前位置: 首页 > news >正文

gdb调试多线程程序

目录

    • 1、pstack查看各个线程的调用堆栈
    • 2、gdb调试多线程
      • 2.1 查看线程信息
      • 2.2 切换线程
      • 2.3 进入线程某层具体的调用堆栈
      • 2.4 调度器锁
        • 2.4.1 查看调度器锁模式
    • 3、实战
      • 3.1 调试多线程崩溃
      • 3.2 调试多线程死锁

1、pstack查看各个线程的调用堆栈

命令:
1、查看进程id
ps aux | grep 可执行文件名
2、查看进程内所有线程的调用堆栈
pstack 进程id

2、gdb调试多线程

2.1 查看线程信息

info threads命令
*表示当前调试线程。

2.2 切换线程

命令:t + 线程id
作用:切换到某个线程,然后通过bt可以查看该线程的堆栈

2.3 进入线程某层具体的调用堆栈

命令:f + 堆栈编号
切换到具体某一层堆栈
命令n会使得所有线程都向下走一步。

2.4 调度器锁

目的:gdb中断于某个线程后,通过n单步执行,会使得所有线程都走一步,那么能不能让其他线程停止而只让我们关心的线程运行?
命令:set scheduler-locking [mode]
mode: off/on/step
off:不锁定任何线程
on: 只有当前线程可以运行,其他线程暂停
step:其他线程也会随着调试线程的执行(continue、n、finish)而执行,但是调试对象一般不会切换到其他线程,保持在当前线程,除非某一线程遇到了断点,此时gdb会将遇见断点的线程作为当前线程。

注意:调度器锁模式的设置一定要让线程运行起来后才可以。

2.4.1 查看调度器锁模式

命令:show scheduler-locking

3、实战

3.1 调试多线程崩溃

3.2 调试多线程死锁

http://www.lryc.cn/news/401468.html

相关文章:

  • 实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比
  • 37、PHP 实现一个链表中包含环,请找出该链表的环的入口结点
  • LIMS系统对实验室管理有哪些帮助?
  • 在GPU上运行PyTorch
  • 【内网穿透】打洞笔记
  • 第59期|GPTSecurity周报
  • 算法2--贪心算法
  • 本地部署 EVE: Unveiling Encoder-Free Vision-Language Models
  • 阿里云CDN- https(设计支付宝春节开奖业务)
  • 为何众多卖家选择加入亚马逊VC平台?他们的决策依据是什么?
  • Windows与Linux双机热备软件推荐
  • Mysql基础与安装
  • 线程的死锁和并发安全
  • docker 启动提示can not create sys fs cgroup cpuset....问题处理
  • [C/C++入门][ifelse]19、制作一个简单计算器
  • API取数实战:企业微信API取数教程
  • AI算法18-最小角回归算法Least Angle Regression | LARS
  • wordpress 调用另外一个网站的内容 按指定关键词调用
  • kotlin数据类型
  • [GWCTF 2019]babyvm
  • PyTorch论文
  • 【Python实战因果推断】37_双重差分8
  • 【python学习】第三方库之matplotlib的定义、功能、使用场景和代码示例(线图、直方图、散点图)
  • MySQL(3)表的操作
  • SQL GROUPING运算符详解
  • 在VS2017下FFmpeg+SDL编写最简单的视频播放器
  • LogViewer v2.x更新
  • detection_segmentation
  • 0基础学python-13:古希腊掌管时间的模块——datetime和time
  • 棒球特长生升学具有其独特的优势和劣势·棒球6号位