调试环境:linux
调试工具:gdb

调试类别

1、调试core文件  gdb 应用程序名 core文件名
2、调试正在执行的程序 gdb 应用程序名 pid
3、gdb 应用程序名         
4、gdb --args 应用程序名 应用程序的运行参数

常用命令

* list 显示程序中的代码,常用使用格式有 l (+/-)n
* break :在程序中设置断点,当程序运行到指定行上时,会暂停执行。使用格式:break 要设置断点的行号
* clear :和break相反,clear用于清除断点。使用格式:clear 要清除的断点所在的行号
* run :启动程序,在run后面带上参数可以传递给正在调试的程序。
* whatis :显示某个变量或表达式的数据类型。使用格式:whatis 变量或表达式
* print :打印变量或表达式的值。使用格式:print
* frame :打印栈帧。使用格式: frame 栈帧号
* info frame :显示当前栈帧的详细信息。
* until(u) : 一直执行到当前行或指定位置,或是当前函数返回 until + 行号

* c (cont / continue) :  断点A到断点B,run程序后再A断点停止,如果想一步执行到断点B(能命中情况下),可以用改命令   (2014-09-15补充)

线程操作:

info threads    #   查看所有线程信息
thread 线程id   #   切换到指定线程
thread apply [threadno | all ] 参数     #   对所有线程都应用某个命令

子进程调试:

set follow-fork-mode child|parent   #   fork后,需要跟踪谁
show follow-fork-mode
set detach-on-flow on|off           #   fork后,需要两个都跟踪吗

info forks                          #   显示所有进程信息
fork 进程id                         #   切换到某个进程
detach-fork 进程id                  #   不再跟踪某个进程
delete fork 进程id                  #   kill某个进程并停止对它的跟踪

检查点:     checkpoint/restart
查看停止原因:  info program

//--2014-09-03 补充-----------------------------

1、查看全局变量 (局部变量和全局变量重名)

符号: "::"
    格式: file::变量名  function::变量名
    实例: gdb) print 'file.c'::val

2、查看连续的内存空间,例如数组

符号: "@"
    格式:  p *array@len
    说明: @左边是数组的首地址,@的右边是要查看数组的长度,静态数组可以直接p 数组名

3、查看格式

x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

使用方法实例: p/x 变量

4、查看内存

使用examine (简写 x)查看
    参数:
        n:内存长度  
        f: 显示格式,(x,d...)
        u:单前地址完后请求的字节数,默认4个字节  b表示单字节,h表示双字节,w表示四字节,g表示八字节
    实例: x/3xh

5、查看历史记录

print 查看变量的时候,历史记录被保存到 $1, $2 .. 中,可以用$1 去访问历史变量

//------------------------------------------------------------------------------------

GDB打印void*类型变量

由于path.etls的的类型是void*类型,所以不能直接打印出来,那么则强制转换一下,赋值给另一个变量,再把另一个变量值打印出来。

(gdb) set $path=((ngx_path_t     **)ngx_cycle->paths.elts)[2]
(gdb) print *$path

//------------------------------------------------------------------------------------

调试代码如果是静态库,尝试

layout asm

s

进不去的话,尝试将静态库 加-g,编译一下

gdb调试整理的更多相关文章

  1. GDB技巧整理

    https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog a ...

  2. 比较全面的gdb调试命令 (转载)

    转自http://blog.csdn.net/dadalan/article/details/3758025 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形 ...

  3. 经典的GDB调试命令

    在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: printprint /是表达式,是你所调试的程 ...

  4. Linux多进程和多线程的一次gdb调试实例

    转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ...

  5. GDB 调试解析

    GDB(GNU Debugger)是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优 ...

  6. gdb 调试(查看运行时数据) 四

    在使用GDB调试程序时,触发断点后,可以使用print命令(简写为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: print <expr>    pri ...

  7. GDB调试基础

    GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...

  8. 经典的GDB调试命令,包括查看变量,查看内存

    经典的GDB调试命令,包括查看变量,查看内存 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: p ...

  9. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

    注:本文重要信息使用 *** 屏蔽关键字. 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点. 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我 ...

随机推荐

  1. 2015年6月股灾永远载入A股史册

    之前很奇怪这次牛市行情的暴涨与暴跌,后来发现成交量是以往不可想象的,而这一切的源头就是融资融券,也就是杠杆. 杠杆的作用是无穷的,就像阿基米德说的那样“给我一个支点,我就能撬起地球”. 杠杆是个放大器 ...

  2. 转:DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)之一

    转载来自:http://blog.csdn.net/shanghaiqianlun/article/details/6976804 作者:shanghaiqianlun的专栏 1.结构框图: 2.管脚 ...

  3. findstr 只搜寻指定文件类型

    Title:findstr 只搜寻指定文件类型 --2012-05-04 09:27 findstr /i /m /S /C:"关键字"  *.php *.asp *.jsp

  4. PHP中的几个重要比较

    1:定义常量 <?php define("TAX_RATE",0.08); echo TAX_RATE; //输出0.08 //2 (PHP 5.3) const TAX_R ...

  5. MYSQL如何导出存储过程和触发器?

    今天遇到.. 类似下面的就可以: mysqldump -u root -p -ntd -R  nxsc>nxsc_trigger.sql

  6. COJ 0020 30201象棋中的皇后

    30201象棋中的皇后 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在n×m的棋盘上放置两个相互攻击的皇后,总共有多少种不同 ...

  7. 2015第29周二AOP

    1.问题:想要添加日志记录.性能监控.安全监测 2.最初解决方案 2.1.最初解决方案:在每个需要的类函数中重复写上面处理代. 缺点:太多重复代码,且紧耦合 2.2.抽象类进行共性设计,子类进行个性设 ...

  8. 获取程序中无需释放的ViewController

    AppDelegate.h @property (strong, nonatomic) UIViewController *viewController; 在需要用的地方 #define appDel ...

  9. Android设置上下边框或者左右边框

    <?xml version="1.0" encoding="utf-8"?> <com.sunskyjun.fwproject.widgts. ...

  10. [ES6] Export class and variable

    Export variable: export const MAX_USERS = 3; export const MAX_REPLIES = 3; Export default class: exp ...