Linux系统之下的基本gdb调试
一、调试的工具:
gdb
二、调试的对象:
可执行程序,而不是.c文件,调试的对象一定是一个进程。调试时,程序必须带有调试信息,所以在编译链接的过程中,需要加上参数“-g”。
三、调试的命令:
l 显示代码
回车 继续执行上一操作
b + 行号 加断点
info + b(break) 查看断点信息
r 运行程序
n 下一步,单步执行
p + 变量名 打印变量的值(p + &变量名 打印变量的地址)
q 退出调试
display + 变量名 持续打印
c 继续执行
delete + 断点编号 删除断点
s 进入函数
finish 跳出函数
bt 函数调用栈关系(在被调用函数里看能看见自己和调用函数,在调用函数里只能看见自己)
四、实例
1.先编写一个简单的c语言程序——main.c。
内容见下:
像下面的“gcc -o main main.c”,是无法生成有调试信息的main的,因此无法进行调试。
加上参数“-g”,才可以进行调试。
2.正式开始调试:
打印全部的代码
下断点、查看断点信息
运行程序
下一步,查看变量i、arr[i]的值
持续显示变量i、arr[i]的值
继续执行
删除断点
注意删除断点的信息是断点的编号,我先把开始设的断点1号、2号删除了,再新增了两个断点——3号和4号,所以这时候再删除1号断点是不能成功的。
对于后续的调试操作——进入函数、跳出函数和查看函数调用栈关系,我增加了add.c和max.c,再进行新的调试,所有的文件如下:
add.h
max.h
add.c
max.c
main.c
首先,将这些程序进行编译、链接,有两种在程序中加入调试信息的方法。
方法一:在add.c、max.c的编译过程中加入调试信息
方法二:在三个程序的编译链接过程中加入调试信息
开始调试:
在调用add()、max()处下断点
进入add(),并且查看函数调用栈关系
退出add(),查看函数调用栈关系
对比上面两张图,可以看到在main里看bt和在add中看bt的差别。同理,在max中能够看到max和main的调用信息,如果max中又调用了另一个函数,则在这个函数中查看bt的话,就能看到三个函数了。
以上,就是比较简单的gdb调试过程,如果想要了解更多关于gdb调试的知识,可以去看看《gdb完全用户手册》,谢谢您的观看。
原文链接:https://blog.csdn.net/qq_39755395/article/details/78305934
Linux系统之下的基本gdb调试相关推荐
- 【Linux系统编程学习】 GDB调试器的简单使用
此为牛客网Linux C++课程 1.13&1.14&1.15&1.16 的课程笔记. 0. GDB简介 1. 准备工作 想要使用gdb调试,首先需要用gcc的-g参数生成可执 ...
- 嵌入式Linux系统编程学习之七gdb调试器
文章目录 前言 一.gdb的常用命令 前言 一.gdb的常用命令 Linux包含了一个叫gdb的调试程序.gdb可以用来调试C和C++程序.在程序编译时用 -g 选项可打开调试选项. 常见调试 ...
- 黑马程序员Linux系统开发视频之gdb调试方法
一.gdb -- 命令 1.前提条件:可执行文件必须包含调试信息 gcc -gcc 2.gdb 文件名 -- 启动gdb调试 3.查看代码的命令 当前文件: ...
- Linux下gcc/g++编译器gdb调试器和makefile的使用
文章目录 一.gcc的使用 gcc选项 二.gdb的使用 三.Linux项目自动化构建工具-make/Makefile 3.1 概念 3.2 使用 3.3 原理 一.gcc的使用 首先我们知道一个C/ ...
- linux的基础知识——多线程gdb调试
1.gdb调试 \qquadgdb调试命令,在生成可执行文件时,加-g gcc xxx.c -o xxx -g \qquad执行gdb xxx,就可以跳转到gdb调试界面,对xxx进行调试. \qqu ...
- linux signal 符号表6,gdb调试信息__000_linux-gnu_00000000_002_rw-p__169IT.COM
很少使用gdb调试,现在用了,又不知道是什么意思,求大侠指教 *** glibc detected *** /home/hhbgk/url/url: free(): invalid next size ...
- gdb vscode调试linux程序,vscode如何使用gdb调试
vscode如何使用gdb调试,路径,程序,设备,文件名,可执行 vscode如何使用gdb调试 易采站长站,站长之家为您整理了vscode如何使用gdb调试的相关内容. 1.vscode启动debu ...
- qt单步调试linux程序,用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行
前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1.在虚拟机Ubuntu 10. ...
- Linux系统vscode断点单步运行调试C++程序
安装vscode 安装比较简单略略略略!!!! 配置安装插件 Ctrl+Shift+X检索并安装C++.C++Clang.Cmake.Cmake Tools 创建launch.json文件 用vsco ...
- GDB调试教程:1小时玩转Linux gdb命令
原文链接:http://c.biancheng.net/gdb/ GDB 入门教程 本教程以下面的代码为例,在 Linux 系统下来讲解 GBD 的调试流程: int main (void) {uns ...
最新文章
- 参加web前端培训需要注意什么
- @valid 不生效_黑帽seo高手-实战细谈301生效周期+影响收录重要因素(探索)
- linux系统下的程序开发报告册,linux系统及应用应用开发实验报告册
- android 透明主题 crash,Android 8.0 的填坑(透明的activity崩溃)
- linux重启memcache_linux下启动和停止memcached
- pom中导入spingside包
- 买表(【CCF】NOI Online能力测试3 入门组)
- java加密解密代码_java加解密文件公用方法整合(多看一本书,少写三行代码)
- java求指数与对数
- Netty4.0学习笔记系列之五:自定义通讯协议
- 简述静态全局变量的概念 C++
- linux中命令du -sm,Linux中的Du命令
- 《可复制领导力》读后感
- mybatis与spring结合
- 警惕Linux的传销投机属性,恢复建立契约商业化社会秩序。
- R3Det: Refined Single-Stage Detector with Feature Refinementfor Rotating Object论文学习
- 原神 Android 教程 —安卓版
- 五险一金真的那么重要吗?为什么很多人宁愿做小时工不要五险一金?
- html5 语音输入小话筒,HTML5语音输入方法
- Java开发微信公众号初体验
热门文章
- 如何用计算机辅助设计进行设计,计算机辅助设计的基本概念和特点
- python从js文件中取数据_Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程...
- micropython常用模块有那个_Python17个常用内置模块总结
- php 表单数据的获取代码,php 表单数据的获取代码
- c语言中有123f,C语言库函数(S类字母) - 3
- 故障恢复 stm32_77条STM32知识,千万不能错过!干货
- 没有安装python如何运行py_在没有安装Python的前提下,让Sublime text编辑器来运行Py?...
- python中init是什么_详细解读Python中的__init__()方法
- oracle-Nomount
- 定义一个内核panic问题