C++ GDB多进程调试

2023-11-05

GDB 主要帮助你完成下面四个方面的功能:

  1. 启动程序,可以按照自定义的要求随心所欲的运行程序
  2. 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)
  3. 当程序被停住时,可以检查此时程序中所发生的事
  4. 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG

调试流程

生成可执行、调试的文件

-g 选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机
器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调
试时必须保证 gdb 能找到源文件。

g++ -g main.cpp -o main

常用命令

启动和退出

gdb main
quit  #也可简写为 q

给程序设置参数/获取设置参数

set args 10 20
show args

帮助

help

查看当前文件代码

list   (从默认位置开始,可简写为 l)
list 行号
list 函数名

查看其他文件代码

list 文件名:行号
list 文件名:函数名

设置显示的行数

set listsize/list 行数
show listsize/list

设置断点

break/b 行号
break/b 函数名
break/b 文件名:行号
break/b 文件名:函数名

查看断点

info break

删除断点

delete 断点编号

设置断点无效

disable 断点编号

设置断点生效

enable 断点编号

设置条件断点

break/b 10 if i==5

运行GDB程序

start    (程序运行在第一行)
run      (程序遇到断点才停下)

继续运行,到下一个断点停

continue/c

向下执行一行代码(不会进入函数体)

next/n

变量操作

print 变量名
ptype 变量名(打印类型)

向下单步调试(遇到函数进入函数体)

step/s  
finish (跳出函数体)

自动变量操作

display 变量名 (自动打印指定变量的值)
info/i display
undisplay 编号

其它操作

set var 变量名=变量值
until    (跳出循环)

多进程

使用 GDB 调试的时候,GDB 默认只能跟踪一个进程,可以在 fork 函数调用之前,通过指令设置 GDB 调试工具跟踪父进程或者是跟踪子进程,默认跟踪父进程。

set follow-fork-mode [parent(默认)| child] #设置调试父进程或者子进程

set detach-on-fork [on | off]  # 设置调试模式:默认为 on,表示调试当前进程的时候
#,其它的进程继续运行,如果为 off,调试当前进程的时候,其它进程被 GDB 挂起。

info inferiors 		#查看调试的进程
inferior id 		#切换当前调试的进程
detach inferiors id #使进程脱离 GDB 调试
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ GDB多进程调试 的相关文章

随机推荐

  • Windows在线安装Qt5.15.2教程、Qt组件模块选择

    1 Qt5 15 2安装包 https download qt io 从archive qt里选 2 Qt5 15 2在线安装教程 https blog csdn net Qi 1337 article details 121249717
  • 关于:Error:java:java.lang.ExceptionInInitializerError 问题的解决

    本地运行项目的时候报上面错误 原因是jdk版本过高导致 解决方法步骤如下 idea 1 点击 File Project Structrue 2 把这两个圈起来的选项改成如下 3 保存 再次运行问题解决
  • 冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序六大排序详解

    1 冒泡排序 思路 左右相邻的两个数互相比较 大的交换到序列后边 每次遍历排出剩余的最大的数 如下图所示 代码如下 void BubbleSort int a int n n为数组元素个数 int i 0 j 0 for i 0 i lt
  • 【已解决】No qualifying bean of type ‘service.Service‘ available

    Exception in thread main org springframework beans factory NoSuchBeanDefinitionException No qualifying bean of type serv
  • MySql优化实战案例

    文章目录 建立测试表 联合索引第一个字段用范围不走索引 覆盖索引优化 in和or在表数据量比较大的情况会走索引 在表记录不多的情况下会选择全表扫描 like KK 一般情况都会走索引 Order by 和 group by优化 Order
  • [LeetCode] Valid Anagram - 字符串排序比较系列

    题目概述 Given two strings s and t write a function to determine if t is an anagram of s For example s anagram t nagaram ret
  • Matplotlib:Adding an axes using the same arguments as a previous axes

    学习 机器学习实战 kNN时 在使用Matplotlib画图时 发现了一个Warining MatplotlibDeprecationWarning Adding an axes using the same arguments as a
  • discuz手机端修改url

    discuz的站需要做伪静态 修改url 本来是直接在最外层用ob函数来替换 pc端的可以 但是这个方法用在手机端的时候 发现失效 后来发现是手机端的php文件使用了函数清空了缓存 ob end clean source class hel
  • python随机性实验

    20210408 0 引言 在另外一篇文章中说明了在使用深度学习库的时候 实验结果的可复现的属性 深度学习实验结果可复现所需设置 随机数等内容设置 文中提到 如果是用GPU加速的话 那么很可能导致实验无法复现 那么就只能使用CPU 好在手里
  • LeetCode:第302场周赛【总结】

    这场比赛用C 写了两个题 在赛后用python补题收获很多 学习了一些python的内置函数 方法学习源于其他优秀的博主 6120 数组能形成多少数对 A题 思路 方法一 我自己写的算法 先对nums排序 之后遍历数组找相邻的位置是否相同
  • 【Docker】Docker安装

    1 添加内核参数 1 通过实训平台进入到操作系统界面 在 后输入vi etc sysctl conf命令 然后按Enter键 进入编辑模式 示例代码如下 root xxx vi etc sysctl conf 2 编辑配置文件 etc sy
  • 行为型模式-命令模式

    package per mjn pattern command import java util HashMap import java util Map 订单类 public class Order 餐桌号码 private int di
  • cv2 python 获取斑马线_opencv 斑马线,条纹检测

    斑马线检测 基于OpenCV 效果不是很好 设置DEBUG变量为True时会输出每一步图像用于逐帧debug和调参 按下任意键或者按住不放下一步 设为False则只画最后结果图 红色方框是判断为斑马线的滑窗 紫色方框是最终输出的斑马线位置
  • 分享 10 个我常逛的国外技术社区,真的受益匪浅

    经常有小伙伴问 小富 有什么国外的技术社区 博客推荐吗 总有人问 索性我就把自己经常访问的 10 个国外技术社区分享出来 想要玩转这些资源的前提 要么自身外语水平不错 要么找个好的翻译工具 不然 不过 也不要一味的崇拜国外的技术 其实你看一
  • 华为设备添加接口描述

    进入视图视图 system view 进入接口 AC6005 int g0 0 1 添加接口描述 AC6005 GigabitEthernet0 0 1 description Con To S1 返回用户视图 AC6005 Gigabit
  • python学习笔记——hashlib模块

    上篇 https blog csdn net qq 42489308 article details 89813895 hashlib Hash 译做 散列 也有直接音译为 哈希 的 把任意长度的输入 通过某种hash算法 变换成固定长度的
  • Springboot项目bootstrap配置未生效、application.yml未读取bootstrap配置文件参数

    场景 Springboot项目 application yml未读取bootstrap配置文件参数 原因 Springboot项目不读取bootstrap yml配置文件 SpringCloud项目才读取bootstrap yml配置文件
  • 软件程序如何运行的-简述

    开门见山 咱不说废话 你有没有想过 你写的程序 是如何在计算机中运行的吗 比如我们搞Java的 肯定写过这段代码 public class HelloWorld public static void main String args Sys
  • 常见的网站漏洞——SQL注入

    1 SQL注入 在输入的字符串中注入SQL指令 而在设计不良的程序中忽略了字符检查 数据库服务器就会认为这些指令是正常的SQL指令而运行 改变原有的SQL语句 2 SQL是什么 SQL是结构化查询语言 用于操控数据库的语言 3 如何判断存在
  • C++ GDB多进程调试

    GDB 主要帮助你完成下面四个方面的功能 启动程序 可以按照自定义的要求随心所欲的运行程序 可让被调试的程序在所指定的调置的断点处停住 断点可以是条件表达式 当程序被停住时 可以检查此时程序中所发生的事 可以改变程序 将一个 BUG 产生的