gdb调试整理
调试环境: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调试整理的更多相关文章
- GDB技巧整理
https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog a ...
- 比较全面的gdb调试命令 (转载)
转自http://blog.csdn.net/dadalan/article/details/3758025 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形 ...
- 经典的GDB调试命令
在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: printprint /是表达式,是你所调试的程 ...
- Linux多进程和多线程的一次gdb调试实例
转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ...
- GDB 调试解析
GDB(GNU Debugger)是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优 ...
- gdb 调试(查看运行时数据) 四
在使用GDB调试程序时,触发断点后,可以使用print命令(简写为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: print <expr> pri ...
- GDB调试基础
GDB调试基础 https://lesca.me/archives/gdb-basic-knowledge.html GDB笔记(二):条件断点.命令列表.监视点 https://lesca.me/a ...
- 经典的GDB调试命令,包括查看变量,查看内存
经典的GDB调试命令,包括查看变量,查看内存 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: p ...
- GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
注:本文重要信息使用 *** 屏蔽关键字. 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点. 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我 ...
随机推荐
- APKTool用法
APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK1.6或者JDK1.7. 如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool.论坛里有很多关于R ...
- 关于GestureDetector.OnGestureListener的onScroll参数distance问题
关于GestureDetector.OnGestureListener类的onScroll方法参数distanceX和distanceY问题 看到有文章上说onScroll方法中distanceX和d ...
- 怎样卸载goldengate
1. Log on to the database server (as oracle) where the GoldenGate software isinstalled.2. Change dir ...
- 17 个 Linux 下用于 C/C++ 的最好的 IDE
C++,一个众所周知的 C 语言的扩展,是一个优秀的.强大的.通用编程语言,它能够提供现代化的.通用的编程功能,可以用于开发包括视频游戏.搜索引擎.其他计算机软件乃至操作系统等在内的各种大型应用. C ...
- curl 提交请求
http://forums.phpfreaks.com/topic/194255-curl-sending-array-as-post-value/ http://www.cnblogs.com/ch ...
- Linux系统编程(30)—— socket编程之TCP/IP协议
在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计算机使用者意识到,计算机 ...
- javascript变量:全局?还是局部?这个得注意!
做项目就是一个学习的过程! 做为一个学习C3年多,从C程序员转前端的人来说,javascript中的许多规则是没办法或者说一时半会理解不了的. 今天就遇到了一个,大致就是这么个代码. var a ; ...
- HDOJ 1202 The calculation of GPA
Problem Description 每学期的期末,大家都会忙于计算自己的平均成绩,这个成绩对于评奖学金是直接有关的.国外大学都是计算GPA(grade point average) 又称GPR(g ...
- HDU5107---K-short Problem (线段树区间 合并、第k大)
题意:二维平面上 N 个高度为 Hi 建筑物,M次询问,每次询问输出 位于坐标(x ,y)左下角(也就是xi <= x && yi <= y)的建筑物中的第k高的建筑物的高 ...
- window.open的小技巧分享
今天再次谈起window.open是因为发现了一个比较好玩的小技巧,详细内容我们稍后详细说明. 聊到window.open,不得不说明一下他的使用方法,主要有两种形式: win ...