1. GDB概述

GNU发布的调试器,可以查看程序如何运行或崩溃时的状态。

主要功能:

  • 启动程序,可以按照自定义的要求运行程序。
  • 可让被调试的程序在你所指定的断点处停住。
  • 当程序被停住时,可以检查此时程序中所发生的事。
  • 动态的改变程序的执行环境。

GDB启动程序
//通过GDB启动/attach一个可程序或打开一个core文件
gdb [options] [executable-file [core-file or process-id]]
//为可执行程序指定执行参数
gdb [options] --args executable-file [inferior-arguments ...]
//为GDB启动指定扩展脚本
gdb [options] [--python|-P] script-file [script-arguments ...]

其他启动参数:
-tui Text User Interface
-s file read symbol table from file
--silent do not print version number

GDB命令特点:
命令别名
自动完成(命令/符号名)
帮助强大:
help class
help all
help command

2. 运行控制类命令:
run(r)
step(s) [count]
next(n) [count]
contine(c) [ignore-count]
finish(fin)
until(u) line
skip file|func
stepi(si)
nexti(ni)
多线程控制命令:
info thread
thread thread-id
thread apply ID1 ID2 command
thread apply all command 
set scheduler-locking off|on|step 
break location thread thread-id

break location thread thread-id if ...

3. 程序停止点

3.1 断点
break(b) [line]|[function][address]
break(b) [line]|[function][address] if …
condition break-num
command break-num
tbreak(tb) [line]|[function][address]
rbreak(rb) regex
info break [break-num]
delete(d) break-num
disable(dis) break-num [count]
enable(ena) break-num
ignore break-num count

3.2 观察点

watch [-l|-location] expr [thread thread-id]
rwatch [-l|-location] expr [thread thread-id]
awatch [-l|-location] expr [thread thread-id]
info watchpoints
delete(d) watch-num
disable(dis) watch-num
enable(ena) watch-num
condition watch-num
command watch-num
3.3 扑捉点
catch event [exception][exec][fork][syscall][signal][throw]
tcatch event

清除停止点 clear / delete
保存停止点 save breakpoints [file]

4. 状态查看类命令:
list(l) /-tui(Ctrl+x+a切换)
search/forward-search(fo)/reverse-search(rev)
print(p) /format expr
print(p) *array@len
x/nfu addr
set print pretty
set print array on
set print elements unlimited
info [locals][variables][float][vtbl][registers]
whatis / ptype
display
4.1 堆栈查看命令
backtrace(bt)
info frame(f)
frame frame-num
up [frame-num]
down [frame-num]

5. 改变程序运行类命令:
set [var] expr
jump location
return [expression]
call expression

6.内存转储
dump [format] memory filename start_addr end_addr 转储内存某地址范围内容到指定文件
dump [format] value filename expr  转储变量值到指定文件
append [binary] memory filename start_addr end_addr
append [binary] value filename expr
restore filename [binary] bias start end

generate-core-file(gcore) [file]  生成core文件

GDB使用总结的更多相关文章

  1. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

  2. 新手如何在gdb中存活

    网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...

  3. GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断

    多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...

  4. GDB调试命令

    1.查看源码: list [函数名][行数] 2.暂停程序 (1)设置断点: a.break + [源代码行号][源代码函数名][内存地址] b.break ... if condition   .. ...

  5. 关于gdb和shp的FID问题

    gdb的FID从1开始,并且FID唯一,从数字化时开始,每个图形对应唯一的FID,删除图形亦删除对应的FID.FID可能出现中断的情况. shp的FID从0开始,并且永远连续.删除图形,则编号在其下面 ...

  6. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  7. gdb 基本知识

    一 单步执行和跟踪函数调用 先给出一段代码,可以用下面介绍的例子. #include <stdio.h> int add_range(int low, int high) { int i, ...

  8. GDB 完全教程

    一.简介 GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一 ...

  9. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  10. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

随机推荐

  1. JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图

    Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...

  2. 1、pytest中文文档--安装和入门

    目录 安装和入门 安装pytest 创建你的第一个测试用例 执行多个测试用例 检查代码是否触发一个指定的异常 在一个类中组织多个测试用例 申请一个唯一的临时目录用于功能测试 安装和入门 Python版 ...

  3. IDEA 如何开启Run DashBoard

    运用spring cloud框架基于spring boot构建微服务,一般需要启动多个应用程序,在idea开发工具中,多个同时启动的应用在RunDashboard运行仪表盘中可以更好的管理,使用Run ...

  4. php文件加密解密

    利用base64加解密 base64_encode是加密,而base64_decode是解密 语法:string base64_encode(string data);   语法:string bas ...

  5. 如何让基于.NET 2.0的应用在高版本的系统上运行?

    我们的WinForm项目是基于.NET 2.0开发的,在部署时,发现有些机器没有.NET 2.0,但是即使这些机器有装.NET 2.0 以上的版本,也无法运行我们的程序.这就比较蛋疼了. 我们查了一下 ...

  6. AirFlow简介

    1, 简介 ​ Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行.airflow提供了丰富的命令行工具用于系统管控 ...

  7. hive学习笔记之-数据类型

    数据类型 Hive基本的数据类型: Hive集合数据类型: 另外还有一个复合数据类型,可以综合上面的数据类型组合到一起. ·          union: UNIONTYPE<data_typ ...

  8. 多线程——Callable接口

    package pers.aaa.callable; import java.util.concurrent.Callable; public class MyCallable implements ...

  9. jsp学习:jsp学习阶段性总结2019.9.21

    Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...

  10. CTC安装错误之:binding.cpp:6:29: fatal error: torch/extension.h: No such file or directory

    错误原因:该问题主要由于CTC的版本导致. 解决方法: 在终端打开warp-ctc文件夹: cd warp-ctc 然后:git checkout ac045b6072b9bc3454fb9f9f17 ...