IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> IOT开发的学习-linux#6 调试工具-gdb整理 -> 正文阅读

[系统运维]IOT开发的学习-linux#6 调试工具-gdb整理

gcc编译,gdb调试的一些整理。

步骤1:gcc编译生成实行文件

????????$ gcc test.c -o testnodebug

????????#用ls查看实行文件已经生成

????????$ ls

????????Desktop ???Downloads ?????Music ????Public ??test.c ??????Videos

????????Documents ?examples.desktop ?Pictures ?Templates ?testnodebug

步骤2:gdb调试

????????$ gdb testnodebug

? ? ? ? #出现以下错误:

? ? ? ? reading symbols from testnodebug...(no debugging symbols found)...done.

????????#原因是没有找到调试需要的信息。gcc编译默认是生成release版,如果要debug,需要加参数 -g 让编译器生成额外的信息用于调试

????????#常用的还有-Wall 可以输出所有的警告信息

步骤3:gcc编译生成可调试实行文件

????????gcc -g -Wall test.c -o testdebug

步骤4:gdb进入调试

????????$ gdb testdebug

? ? ? ? #显示如下:表示已经进入可调式状态。

????????GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git

????????Copyright (C) 2018 Free Software Foundation, Inc.

????????License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

????????This is free software: you are free to change and redistribute it.

????????There is NO WARRANTY, to the extent permitted by law. ?Type "show copying"

????????and "show warranty" for details.

????????This GDB was configured as "x86_64-linux-gnu".

????????Type "show configuration" for configuration details.

????????For bug reporting instructions, please see:

????????<http://www.gnu.org/software/gdb/bugs/>.

????????Find the GDB manual and other documentation resources online at:

????????<http://www.gnu.org/software/gdb/documentation/>.

????????For help, type "help".

????????Type "apropos word" to search for commands related to "word"...

????????Reading symbols from testdebug...done.

????????(gdb)

????????#Reading symbols from testdebug...done.前显示的是gdb版本信息,不想显示可以加参数 -?q,如下:

????????$ gdb -q testdebug 只显示以下信息

????????Reading symbols from testdebug...done.

????????(gdb)

步骤5:gdb调试 输入list/l就会显示默认10行代码,按回车就能继续显示。

????????(gdb) list

?????????4 {

????????5 printf("hello world1!\n");

????????6 printf("hello world2!\n");

????????7 printf("hello world3!\n");

????????8 }

????????9

????????10 void change(int* no1,int* no2)

????????11 {

????????12 ????int tmp=(*no1);

????????13 ????(*no1)=(*no2);

????????(gdb)

????????14 ????(*no2)=tmp;

????????15 }

????????16

????????17 int main()

????????18 {

????????19 ????int x=1;

????????20 ????int y=2;

????????21 ????change(&x,&y);

????????22 ????printf("x=%d y=%d\n",x,y);

????????23 ????print();

????????(gdb)

步骤6:执行程序

1.输入:start 从程序第一步开始执行,输入next/n 下一步,step/s单步执行

????????gdb) start

???????Temporary breakpoint 1 at 0x55555555475a: file test.c, line 18.

????????Starting program: /home/user1/testdebug

????????Temporary breakpoint 1, main () at test.c:18

????????18 {

????????(gdb) n

????????19 ????int x=1;

????????(gdb) n

????????20 ????int y=2;

????????(gdb) ?

2.输入:run/r?直接运行程序到结束或者断点处

????????(gdb) run

????????Starting program: /home/user1/testdebug

????????x=2 y=1

????????hello world1!

????????hello world2!

????????hello world3!

3.设置断点:break/b?line(行数)或函数名或条件表达式,输入 c 继续执行到下一个断点

????????(gdb) break 20

????????Breakpoint 1 at 0x770: file test.c, line 20.

????????(gdb) run

????????Starting program: /home/user1/testdebug

????????Breakpoint 1, main () at test.c:20

????????20 ????int y=2;

????????(gdb) break change

????????Breakpoint 2 at 0x555555554731: file test.c, line 12.

????????(gdb) c

????????Continuing.

????????Breakpoint 2, change (no1=0x7fffffffe970, no2=0x7fffffffe974) at test.c:12

????????12 ????int tmp=(*no1);

????????(gdb)

4.info 查看断点

????????(gdb) info break

????????Num ????Type ??????????Disp Enb Address ???????????What

????????1 ??????breakpoint ????keep y ??0x0000555555554770 in main at test.c:20

????????breakpoint already hit 1 time

????????2 ??????breakpoint ????keep y ??0x0000555555554731 in change at test.c:12

????????breakpoint already hit 1 time

????????(gdb)

5.删除断点:

????????clear 行号 : 删除这行的断点

????????clear 函数名 : 删除该函数的断点

????????(gdb) clear 20

????????Deleted breakpoint 1

????????(gdb) info break

????????Num ????Type ??????????Disp Enb Address ???????????What

????????2 ??????breakpoint ????keep y ??0x0000555555554731 in change at test.c:12

????????breakpoint already hit 1 time

????????(gdb) clear change

????????Deleted breakpoint 2

????????(gdb) info break

????????No breakpoints or watchpoints.

????????(gdb)

????????# delete 断点号n:删除第n个断点

????????# disable 断点号n:暂停第n个断点

????????#enable断点号n:开启第n个断点

????????#clear 行号n: 清除第n行的断点

????????#delete breakpoints或clear:清除所有断点

6.print/p?+变量 打印变量值

? ? ?? (gdb) print x

????????$1 = 1

?????????(gdb)

7.quit/q 退出调试

????????(gdb) q

????????A debugging session is active.

????????Inferior 1 [process 3098] will be killed.

????????quit anyway? (y or n) y

8.set 参数

????????(gdb) set x=3

????????(gdb) p x

????????$2 = 3

????????(gdb)

其他的一些常用方法:

9.finish ???退出当前函数 ??

10.until+行数 执行到指定函数

11?whatis+变量?查看类型

????????(gdb) whatis x

????????type = int

12.call+函数(参数)调用单个函数

13. where 查看当前运行的位置

????????(gdb) where

????????#0 ?0x0000555555554735 in change (no1=0x4, no2=0x5) at test.c:12

????????#1 ?<function called from gdb>

????????#2 ?main () at test.c:22

????????(gdb)

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:56:35  更:2022-09-13 11:59:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:29:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计