C gdb调试工具

编译程序
cc -g try.c -o try

一 列文件清单
  List
  (gdb) list line1,line2
[编辑本段]

二:执行程序
  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和> )和shell通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
  (gdb)set args –b –x
  (gdb) show args
  backtrace命令为堆栈提供向后跟踪功能。
  Backtrace 命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。

三:显示数据
  利用print 命令可以检查各个变量的值。
  (gdb) print p (p为变量名)
  print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容:
  对程序中函数的调用
  (gdb) print find_entry(1,0)
  数据结构和其他复杂对象
  (gdb) print *table_start
  ={e=reference=’\000’,location=0x0,next=0x0}
  值的历史成分
  (gdb)print (为历史记录变量,在以后可以直接引用的值)
  人为数组
  人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
  base@length
  因此,要想显示在h后面的10个元素,可以使用h@10:
  (gdb)print h@10
  =(-1,345,23,-234,0,0,0,98,345,10)
  whatis 命令可以显示某个变量的类型
  (gdb) whatis p
  type = int *

四:断点(breakpoint)
  break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
  break line-number 使程序恰好在执行给定行之前停止。
  break function-name 使程序恰好在进入指定的函数之前停止。
  break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
  break routine-name 在指定例程的入口处设置断点
  如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下:
  (gdb) break filename:line-number
  (gdb) break filename:function-name
  要想设置一个条件断点,可以利用break if命令,如下所示:
  (gdb) break line-or-function if expr
  例:
  (gdb) break 46 if testsize==100
  从断点继续运行:countinue 命令

五.断点的管理
  1.显示当前gdb的断点信息:
  (gdb) info break
  他会以如下的形式显示所有的断点信息:
  Num Type Disp Enb Address What
  1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
  2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
  删除指定的某个断点:
  (gdb) delete breakpoint 1
  该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点
  (gdb) delete breakpoint
  禁止使用某个断点
  (gdb) disable breakpoint 1
  该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n
  允许使用某个断点
  (gdb) enable breakpoint 1
  该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y
  清除原文件中某一代码行上的所有断点
  (gdb)clean number
  注:number 为原文件的某个代码行的行号

六.变量的检查和赋值
  whatis:识别数组或变量的类型
  ptype:比whatis的功能更强,他可以提供一个结构的定义
  set variable:将值赋予变量
  print 除了显示一个变量的值外,还可以用来赋值

七. 单步执行
  next 不进入的单步执行
  step 进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish

八.函数的调用
  call name 调用和执行一个函数
  (gdb) call gen_and_sork( 1234,1,0 )
  (gdb) call printf(“abcd”)
  =4
  finish 结束执行当前函数,显示其返回值(如果有的话)

九.机器语言工具
  有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:
  $pc : 程序计数器
  $fp : 帧指针(当前堆栈帧)
  $sp : 栈指针
  $ps : 处理器状态

十.信号
  gdb通常可以捕捉到发送给它的大多数信号,通过捕捉信号,它就可决定对于正在运行的进程要做些什么工作。例如,按CTRL-C将中断信号发送给gdb,通常就会终止gdb。但是你或许不想中断gdb,真正的目的是要中断gdb正在运行的程序,因此,gdb要抓住该信号并停止它正在运行的程序,这样就可以执行某些调试操作。
  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:
  nostop 接收到信号时,不要将它发送给程序,也不要停止程序。
  stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)
  print 接受到信号时显示一条消息
  noprint 接受到信号时不要显示消息(而且隐含着不停止程序运行)
  pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。
  nopass 停止程序运行,但不要将信号发送给程序。
  例如,假定你截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令:
  (gdb) handle SIGPIPE stop print
  请注意,UNIX的信号名总是采用大写字母!你可以用信号编号替代信号名如果你的程序要执行任何信号处理操作,就需要能够测试其信号处理程序,为此,就需要一种能将信号发送给程序的简便方法,这就是signal命令的任务。该命令的参数是一个数字或者一个名字,如SIGINT。假定你的程序已将一个专用的SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,要想测试该信号处理程序,你可以设置一个断点并使用如下命令:
  (gdb) signal 2
  continuing with signal SIGINT(2)
  该程序继续执行,但是立即传输该信号,而且处理程序开始运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 装饰器参数_Learn Python 3:装饰器

一、理解装饰器通俗点说&#xff0c;当我们想给一个函数增强额外的功能&#xff0c;但又不想修改原函数的定义&#xff0c;同时新增的功能其它函数可能也需要使用&#xff0c;装饰器就是来解决这种需求的&#xff0c;将与原函数功能无关的代码提取出来&#xff0c;实现复用&…

android 三星 白色,时尚实用都拥有 白色Android手机盘点

唯美大气&#xff1a;三星I9000三星I9000的高人气不用多说&#xff0c;许多人在看过了黑色之后也等待着白色版本的上市。而在上周该机的白色版本也终于到来&#xff0c;赶在圣诞节之前为我们提供了多一种的白色Android机型选择。从图片中可以看出I9000机身正面依旧为黑色&#…

XidianOJ 1099 A simple problem

题目描述 一个长度为N的数组A&#xff0c; 所有数都是整数 &#xff0c;0 < A[i] < 1000000&#xff0c;1 < i < N&#xff0c;1 < N < 100000&#xff0c;对于 任意i&#xff0c;j &#xff0c;1 < i < j < N&#xff0c;[i&#xff0c; j]中所…

C字符操作函数大全

函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 "abcdefghi"; stpcpy(string, str1); …

见微知著(一):解析ctf中的pwn--Fast bin里的UAF

在网上关于ctf pwn的入门资料和writeup还是不少的&#xff0c;但是一些过渡的相关知识就比较少了&#xff0c;大部分赛棍都是在不断刷题中总结和进阶的。所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文&#xff0c;供大家参考和一起交流。当然&#xff0c;也不想搞…

python语言学完后学什么_学完Python语言可以做什么?发展前景怎么样?

Python是一门高级的编程语言&#xff0c;其语言功能强大、语法简单、上手容易&#xff0c;因此受到了不少人的喜欢。而对于学习一门语言&#xff0c;很多人最看重的就是&#xff0c;学习之后可以做什么?有哪些岗位?薪资待遇如何?为大家详细的讲解一下。Python是一门面向对象…

火狐插件 打开html 死机,火狐flash插件崩溃(Firefox火狐Flash插件卡死问题完美解决方法)...

火狐flash插件崩溃(Firefox火狐Flash插件卡死问题完美解决方法)&#xff0c;哪吒游戏网给大家带来详细的火狐flash插件崩溃(Firefox火狐Flash插件卡死问题完美解决方法)介绍&#xff0c;大家可以阅读一下&#xff0c;希望这篇火狐flash插件崩溃(Firefox火狐Flash插件卡死问题完…

C#关键字(79个)

abstract&#xff1a;标识一个可以扩展但不能被实体化得、必须被实现得类或方法&#xff1b; as&#xff1a;一个转换操作符&#xff0c;如果转化失败&#xff0c;就返回null&#xff1b; base&#xff1a;用于访问被派生类或构造中得同名成员隐藏的基类成员&#xff1b; bool&…

Atitti 大话存储读后感 attilax总结

Atitti 大话存储读后感 attilax总结 1.1. 大话存储中心思想&#xff08;主要讲了磁盘文件等存储&#xff09;1 1.2. 最耐久的存储&#xff0c;莫过于石头了&#xff0c;要想几千万年的存储信息&#xff0c;使用石头是最好的方式了1 1.3. 数据传输机制&#xff1a;总线机制1 1.4…

.Net System.Object类介绍

每个类型最终都要继承自System.Object类型&#xff08;默认情况下是隐式继承&#xff09;System.Object类型的公有方法&#xff1a;Equals&#xff1a;静态成员。已重载。 确定两个 Object 实例是否相等。返回True。ReferenceEquals&#xff1a;静态成员。确定指定的 Object 实…

uuid表示时间的部分_技术译文 | UUID 很火但性能不佳?今天我们细聊一聊

作者&#xff1a;Yves Trudeau Yves 是 Percona 的首席架构师&#xff0c;专门研究分布式技术&#xff0c;例如 MySQL Cluster&#xff0c;Pacemaker 和 XtraDB cluster。他以前是 MySQL 和 Sun 的高级顾问。拥有实验物理学博士学位。原文链接&#xff1a;https://www.percona.…

西电计算机科学院实践中心,计算机基础教学实验中心

一、总体情况计算机基础教学实验中心隶属于计算机网络与信息安全国家级实验教学示范中心&#xff0c;承担着全校本科生的计算机基础教学和实验任务&#xff0c;是学校对外的重要窗口。中心总面积4200平方米&#xff0c;固定资产总价值接近1500万元&#xff0c;仪器设备共3907台…

jquery通过attr取html里自定义属性原来这么方便啊

<script type"text/javascript"> function fangGouWuChe(obj) { //放入购物车 var sMat $(obj).parent().parent().parent().parent().attr("material"); var sPrice $(obj).parent().parent().find(em[class"sale-price"]).text(); …

Abbirb120型工业机器人_ABB IRB 120工业机器人.pdf

ABB IRB 120工业机器人IRB 120工业机器人-ABB最小机器人&#xff0c;紧凑柔性生产的理想之选IRB 120小型工业机器人是ABB新型第四代机器人家族的最新成员&#xff0c;也是迄今为止ABB制造的最小机器人。IRB 120具有敏捷、紧凑、轻量的特点&#xff0c;控制精度与路径精度俱优&a…

html4废弃了哪些元素,HTML中的一些废弃元素_html

如果我们在进行css网页布局的时候&#xff0c;还在使用被W3C废弃的元素&#xff0c;那就失去了使用CSS的意义&#xff0c;虽然它们可能同样被样式控制。在Xhtml中不再使用HTML中的一些废弃元素。它们主要有以下一些。Elements and attributes that have been deprecated in the…

vs2010编写的net3.5用vs2008打开

*.sln解决方案文件将Microsoft Visual Studio Solution File, Format Version 11.00改为Microsoft Visual Studio Solution File, Format Version 10.00 *.csproj项目文件网站项目需要修改,类库项目可以直接打开有<Import Project"$(MSBuildExtensionsPath32)\Microsof…

r语言rank降序_R语言rank函数详细解析

1.rank函数是什么rank相关文档[1]可以译为"返回原数组(?)中各个元素排序(?)后的秩次(?)"&#xff0c;表面上看确实可以得到次序&#xff0c;但对数组、排序、秩次交待不清。2.rank函数使用情景比如&#xff0c;在100米赛跑中&#xff0c;甲乙丙三人的成绩为6.8s, …

计算机时代 英语,雅思8分范文:计算机时代教师角色 【出国英语】

雅思8分范文&#xff1a;计算机时代教师角色 【出国英语】The computer are widely used in education and some people think teacher are not play important role in the classroom .to what extend do you agree? (agree/disagree)医学教育网nowadays, the computer is ra…

C# 列出进程以及详细信息

建立一个listBox将进程名称遍历进去 this.listBox1.Items.Clear();Process[] MyProcessesProcess.GetProcesses();foreach(Process MyProcess in MyProcesses){this.listBox1.Items.Add(MyProcess.ProcessName);}this.listBox1.SelectedIndex0; 选中listBox里面的项后将进程详…