GDB命令大全

GDB的使用

  当程序出错并产生core 时

  快速定位出错函数的办法

  gdb 程序名 core文件名(一般是core,也可能是core.xxxx)

  调试程序使用的键

  r run 运行.程序还没有运行前使用

  c cuntinue 继续运行。运行中断后继续运行

  q 退出

  kill 终止调试的程序

  h help 帮助

  <tab> 命令补全功能

  step 跟入函数

  next 不跟入函数

  b breakpoint 设置断点。

  用法:

  b 函数名 对此函数进行中断

  b 文件名:行号 对此文件中指定行中断.如果是当前文件,那么文件名与:号可以

  省略

  看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.

  l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面

  跟上 文件名:行号

  watch 观察一个变量的值。每次中断时都会显示这个变量的值

  p print 打印一个变量的值。与watch不同的是print只显示一次

  这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,

  这时候你会看到 b 的 value, 也就是上面的 $1 = 15.

  你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,

  这时候你会发现, b 的 value 就变成 100 了:$1 = 100.

  网上抄录

  基本的使用方法简介

  前言

  程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。

  一个除错程序执行的流程通常是这样的:

  1. 进入除错程序并指定可执行文件。

  2. 指定程序代码所在目录。

  3. 设定断点后执行程序。

  4. 程序于断点中断后,可以 (1)检视程序执行状态;检视变量值或变更变量值 (2) 逐步执行程序,或是全速执行程序到下一个断点或是到程序结束为止。

  5. 离开除错程序。

  以下将分为下列数项分别介绍:

  1. 进入 GDB 及指定可执行档

  2. 指定程序代码所在目录及检视程序代码

  3. 断点的设定与清除

  4. 全速及逐步执行程序

  5. 检视及更改变量值

  6. 检视程序执行状态

  7. 读取 Core 文件信息

  进入 GDB 及指定可执行档:

  1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM'),准备进行除错。

  gdb PROGRAM

  指定程序代码所在目录及检视程序代码

  1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下,就不须指定程序代码所在目录。):

  (gdb) directory DIR

  2. 检视程序代码,格式计有:

  (gdb) list => 显示目前执行程序代码前后各五行的程序代码;或是显示从上次 list 之后的程序代码

  (gdb) list function => 显示该程序开始处前后五行的程序代码。

  (gdb) list - =>上次显示程序代码的前面的十行。

  断点的设定与清除

  1. 设定断点(指令为 break,可简写为 (b),格式计有:

  (gdb) break filename.c:30 => 在 filename.c 的第三十行处停止执行。

  (gdb) break function => 在进入 function 时中断程序的执行。

  (gdb) break filename.c:function => 在程序代码档 filename.c 中的函数 function 处设定断点。

  (gdb) break => 在下一个将被执行的命令设定断点。

  (gdb) break ... if cond => 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。

  2. 显示各个断点的信息。

  (gdb) info break

  3. 清除断点(命令为 clear),格式同 break 。例如 :

  (gdb) clear filename.c:30

  4. 清除断点,NUM 是在 info break 显示出来的断点编号。

  (gdb) delete NUM

  全速及逐步执行程序

  1. 从程序开头全速执行程序,直到遇到断点或是程序执行完毕为止。

  (gdb) run

  2. 在程序被中断后,全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。

  (gdb) continue

  3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。

  (gdb) next

  4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。

  (gdb) step

  5. 执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。

  (gdb) until

  6. 执行现行程序到回到上一层程序为止。

  (gdb) finish

  检视及更改变量值

  1. print 叙述,显示该叙述执行的结果 (print 指令可简写为 p)。如

  (gdb) print a => 显示 a 变量的内容.

  (gdb) print sizeof(a) => 显示 a 变量的长度.

  2. display 叙述,在每个断点或是每执行一步时显示该叙述值。如

  (gdb) display a

  3. 更改变量值:

  (gdb) print (a=10) => 将变量 a 的值设定为 10.

  检视程序执行状态

  1. 查看程序执行到此时,是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt),也就是查看函数呼叫堆栈。

  (gdb) backtrace

  读取 Core 文件信息

  1. 读入 PROGRAM 及 PROGRAM.CORE 档,可检视 Core Dump 时程序变量值及程序流程状态 。

  gdb PROGRAM core

  说明:'core' 档案是由 PROGRAM 档执行后,遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档,我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后,你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。

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

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

相关文章

Leetcode刷题(2)回文数

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &…

ZT Web Control 开发系列(一) 页面的生命周期

http://www.cnblogs.com/joeliu/category/143125.htmlPage是WebForm编程基本元素&#xff0c;它从TemplateControl派生&#xff0c;而TemplateControl又从Control派生&#xff0c;所以Page实际就是一个Control。同时Page也实现了IHttpHandler接口&#xff0c;所以它可以接受Htt…

计算属性computed的使用

效果图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Document</title><script type"text/javascript" src"./lib/vue-2.4.0.js"></script></head>…

JS之字符串截取方法substring

作用&#xff1a;substring() 方法用于提取字符串中介于两个指定下标之间的字符 语法&#xff1a;stringObject.substring(start,stop) 参数1&#xff1a;必需。一个非负的整数&#xff0c;规定要提取的子串的第一个字符在 stringObject 中的位置 参数2&#xff1a;可选。一…

gdb命令手册

GDB 的命令很多&#xff0c;本文不会全部介绍&#xff0c;仅会介绍一些最常用的。在介绍之前&#xff0c;先介绍GDB中的一个非常有用的功能&#xff1a;补齐功能。它就如同Linux下SHELL中的命令补齐一样。当你输入一个命令的前几个字符&#xff0c;然后输入TAB键&#xff0c;如…

HTML5增加的几个新的标签

HTML5又2008年诞生&#xff0c;HTML5大致可以等同于htmlcss3javascriptapi.... so --->支持css3强大的选择器和动画以及javascript的新的函数 先来记录一下吧&#xff01; 1。 <canvas>画布标签 HTML5的新标签 举例&#xff1a; 1 <html>2 <head>3 …

在 Linux 中使用动态磁盘

是否遇到过这样的问题&#xff0c;划分了<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />10G的一个分区&#xff0c;挂接到/home 下&#xff0c;可是随着时间的流逝&#xff0c;10G的空间开始不够用了&#xff0c;需要把它…

vue项目结构(未抽离成.vue文件前的结构)

最终效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>vue项目结构</title><script type"text/javascript" src"./lib/vue-2.4.0.js"></script><scri…

JS之Boolean的toString方法

作用&#xff1a;toString() 方法可把一个逻辑值转换为字符串&#xff0c;并返回结果 语法&#xff1a;booleanObject.toString() 返回值&#xff1a;根据原始布尔值或者 booleanObject 对象的值返回字符串 “true” 或 “false” 注意1&#xff1a;如果调用该方法的对象不是…

linux下exec系列(一)

fork()是用于建立进程的手段之一&#xff0c;但是fork()只能建立相同程序的副本。幸运的是&#xff0c;Linux系统还提供了系统调用exec系列。它可用于新程序的运行。 如果exec调用成功&#xff0c;调用进程将被覆盖&#xff0c;然后从新程序的入口开始执行。这样就产生了一个新…

小程序跳转H5页面

在使用web-view时发现了一个问题总是会过段时间自己跳转到web-view是src地址 由于我是写的轮播图中嵌套一个web-view 所以当时我以为是轮播图和这个web-view冲突了 其实设计就是如此 自己跳 <view class"page-body"><web-view src"{{url}}">&…

MOSS数据库服务器迁移步骤

迁移场景: MOSS场具有四台服务器:两台前端,一台index服务器,一台数据库服务器. 需要把数据库迁移到采用集中存储的数据库集群上. 源数据库服务器和目标数据库服务器处于同一个AD域中,目标数据库服务器集群已经配置好. 迁移步骤如下: (1) 在所有MOSS服务器上停掉所有MOSS服务,包…

React开发(116):ant design search引入

import { Input } from antd;const { Search } Input;

JS之Boolean的valueOf方法

作用&#xff1a;valueOf() 方法可返回 Boolean 对象的原始值 语法&#xff1a;booleanObject.valueOf() 返回值&#xff1a;booleanObject 的原始布尔值 注意&#xff1a;如果调用该方法的对象不是 Boolean&#xff0c;则抛出异常 TypeError 实例&#xff1a;

perror的特殊输出

写了一个非常简单的C语言程序&#xff0c;为了测试perror会把数据输出到哪里。但它的运行结果让我无法理解&#xff0c;望高人解答&#xff1a; 源码&#xff1a; #include <stdio.h>int main(){printf("Hello\n");perror("Hello world\n");return…

实现局部动态的3种建议

1. 如果动态数据是简单&#xff0c;可以直接嵌入js&#xff0c;php中通过echo "document.write(内容);";来输出内容 <script typetext/javascript languagejavascript srccontent.php></script> 2. 如果动态的数据是比较复杂的&#xff0c;可能需要服务器…

我来告诉你为什么中国民营企业管理失败的原因!

我作为负责整个集团的信息总监&#xff0c;虽然算不上真正CIO的能力&#xff0c;但是在我现在的集团公司里大小也算是一个领导了。所以&#xff0c;有机会接触集团的董事长---一个90年代发家的真正民营企业家W&#xff0c;我们集团公司在当地也算得上是有规模的一家&#xff0c…

HTML5中的audio在手机端和微信端的不能自动播放

再做H5页面的时候,发现audio在手机端和微信端添加了autoplay以后还是不可以自动播放,这是因为手机端为了节约流量所设置的 通常解决方法是给一个交互事件&#xff1a; 标签:<audio loop src"/photo/aa.mp3" id"audio" autoplay preload"auto&quo…