NDK学习笔记-gdb调试
在做开发的时候,难免会crash,那么在这时候需要进行调试,在C/C++的代码调试中,gdb是很常用的gdb在这不做过多介绍,之前在C语言中已经做过总结,这里简要回顾一下
- 要使用gdb,在编译的时候需要添加
-g
参数
gcc test.c -g -o test
- 进入调试
gdb test
- 开始调试
start
显示gdb命令帮助信息
help
显示gdb
命令种类
help subcommand
显示subcommand
的帮助信息
apropos word
搜索与word
相关的命令
设置断点
b(break)
在函数或某一行处设置断点,如果只记得部分函的前缀,可以这样:(gdb) b make_ <按TAB键>
break filename:linenum
在源文件filename
的linenum
行处停住
break filename:function
在源文件filename
的function
函数的入口处停住
break *address
在程序运行的内存地址处停住
break
break命令没有参数时,指在下一条指令处停住
break … If …
在条件成立时程序停住
break thread threadnum
定义在线程threadnum
上的断点,如break BootAnimation.cpp:364 thread 28 if bartab > lim
设置观察点
watch expr
设置观察点,当表达式expr
的值变化时,程序停住
rwatch expr
设置观察点,当表达式expr
的值被读时,程序停住
awatch expr
设置观察点,当表达式expr
的值被读或写时,程序停住
设置捕捉点
catch
设置被调试程序捕捉点,当event
发生时,程序停住
catch catch [args]
捕捉一个C++捕捉到的异常
catch throw [args]
捕捉一个C++抛出的异常
catch syscall [args]
捕捉系统调用
维护被调试程序断点
condition N COND
修改断点号为N的停止条件为COND
ignore N COUNT
忽略断点号为N的停止条件COUNT
次
clear [linenum|funname|*]
清除指定的行或函数断点
d(delete) [breakpoints][range]
清除指定的断点
disable [breakpoints] [range…]
禁用指定的断点
enable [breakpoints] [range…]
启用指定的断点
为停止点设定运行命令
commands N
调试程序在断点号为N的断点处停止后,执行命令执行命令
end
显示被调试程序的信息
info subcommand
显示被调试程序的某些信息,可用help info
查看子命令。如:
info breakpoints [n]
显示所有断点(或断点n)信息
info watchpoints [n]
显示所有观察点(或观察点n)信息
info program
查看被调试程序的执行状态
info args
打印出当前函数的参数名及其值
info locals
打印出当前函数中所有局部变量及其值
info display
查看display
设置的自动显示的信息
info frame
查看栈帧信息,包括程序语言
运行及查看被调试信息
r(run)
运行被调试程序
c(continue)
从断点出开始继续执行直到结束或下一个断点
s(step)
单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是此函数被编译有debug
信息
n(next)
单步跟踪,如果有函数调用,他不会进入该函数
p(print)
打印表达式的值 可以查看全局变量(所有文件可见)、静态全局变量(当前文件可见)、局部变量(当前Scope
可见)
p file::var
查看文件file
中的变量var
p func::var
查看函数file
中的变量var
p start@len
查看一段连续的内存空间的值,“@”
的左边是第一个内存的地址的值,“@”
的右边则你你想查看内存的长度,如:
int array = (int ) malloc (len * sizeof (int));
p *array@len
p/format expr
按指定的格式显示表达式expr
(format:x, d, f, c, u, o, t, a
)
display[/fmt] expr
程序停下来后就会显示expr
的值
undisplay/delete displaynum/disable displaynum/enable displaynum
bt
查看当前函数调用堆栈信息
f(frame)
查看当前栈层信息,包括栈的层编号、当前的函数名、函数参数值、函数所在文件及行号和函数执行到的语句
finish
运行程序,直到当前函数完成返回
u(until)
运行程序直到退出循环体
显示源代码
l(list)
列出具体的函数或代码行
list
显示当前行后面的源程序
list -
显示当前行前面的源程序
list +
显示当前行后面的源程序
list linenum
显示程序第linenum
行的周围的源程序
list file:filenum
显示文件file
中的filenum
行
list file:func
显示文件file
中的函数func
list funcname
显示函数名为function
的函数的源程序,如list android::BootAnimation::movie
搜索源代码
forward-search reg
利用正则表达式前向搜索源码
search reg
利用正则表达式前向搜索源码
reverse-search reg
利用正则表达式在全部源码中进行搜索
设置被调试程序参数/gdb配置
set subcommand
设置gdb环境变量,可以使用help set
查看set子命令。如:
set args
设置被调试程序运行参数
set directories
设置源文件搜索路径,多个使用“:”
分割
set solib-search-path
设置符号表搜索路径
set environment varname [=value]
设置环境变量。如:set env USER=llj
set listsize num
设置一次显示源代码的行数
set step-mode on
打开step-mode
模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码
set print address on
打开地址输出, 当程序显示函数信息时,GDB
会显出函数的参数地址
set print array on
打开数组显示,打开后当数组显示时,每个元素占一行,如果不打开的话,每个元素则以逗号分隔
set print elements num
设置显示数组元素的最大个数
set print null-stop on/off
如果打开了这个选项,那么当显示字符串时,遇到结束符则停止显示
set print pretty on/off
打开后gdb显示结构体时会比较漂亮
set print sevenbit-strings
设置字符显示,是否按“/nnn”
的格式显示
set print union on/off
设置显示结构体时,是否显式其内的联合体数据
show subcommand
显示调试器的信息,使用help show
查看子命令。如:
show environment [varname]
查看环境变量
show listsize
显示当前listsize
的设置
show directories
显示定义了的源文件搜索路径
show language
查看gdb
当前的语言环境
其他
q(quit)
退出gdb
handle
处理信号
shell命令
此外gdb中可以执行shell
命令,使用SHELL
环境变量定义的可执行程序来执行shell
命令,常用的命令如下:
show environment SHELL
查看shell
执行程序
make
重新编译程序,相当于shell make
cd
必变工作目录,相当于shell cd
pwd
查看当前工具目录,相当于shell pwd
NDK学习笔记-gdb调试的更多相关文章
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...
- BIND9源码学习笔记1---gdb调试篇
学习bind9源码之前,首先要知道如何用gdb来调试bind.BIND9的源码我是先看代码弄懂它的架构,像什么event-drive,epoll等, 再去看它的业务流程.看业务流程的时候要追踪它的数据 ...
- linux学习之四---gdb调试
在Linux应用程序开发中,最经常使用的调试器是gdb. 一.启动和退出gdb gdb调试的对象是可运行文件,而不是程序的源码.假设要使一个可运行文件能够被gdb调试,那么使用编译器gcc编译时须要增 ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- C学习笔记-gdb
gdb即GNU debugger,用来调试程序 gdb使用前提 要使用gdb,则需要在编译源代码时候使用-g参数 gcc -g –o test test.c 启动gdb gdb 程序名 [corefi ...
- C/C++学习笔记_gdb调试
1.前提条件:可执行文件包含调试信息 gcc -g 2.gdb 文件名 ---启动gdb调试 3.查看代码的命令 当前文件: list 行号(函数名) 指定文件: list 文件名:行号(函数名)4. ...
- NDK学习笔记-JNI多线程
前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实 ...
- NDK学习笔记(四):OutputContext机制
首先NDK文档中的Op.h头文件中已经有了相关概念的解释,摘录翻译如下: /*! \fn const OutputContext& Op::outputContext() const; The ...
- NDK学习笔记(三):DynamicKnobs的机制
最近的NDK开发涉及到了动态input及动态knobs的问题. 开发需求如下:建立一个节点,该节点能获取每一个input上游的inputframerange信息. 具体下来就是:需要Node的inpu ...
随机推荐
- 从运行时的工作空间获取EMF文件(IFILE)
//EMFFILE_URI为EMF文件的URI String uriString = EMFFILE_URI.trimFragment().toPlatformString(true); if (ur ...
- python 实践--新闻聚合
采集新闻,体会到面向问题和面向对象的区别. 如果希望新闻来源多出,比如NNTP,Web.可以实现:Source,Destination,NewItem,NewAgent. Scoure处理来源, De ...
- MNIST 数据集介绍
在学习机器学习的时候,首要的任务的就是准备一份通用的数据集,方便与其他的算法进行比较. MNIST数据集是一个手写数字数据集,每一张图片都是0到9中的单个数字,比如下面几个: MNIST数据库 ...
- Guardian of Decency POJ - 2771 【二分匹配,最大独立集】
Problem DescriptionFrank N. Stein is a very conservative high-school teacher. He wants to take some ...
- wangEditor实现ctrl+v粘贴word图片并上传
很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...
- Comet OJ - Contest #3 (A 比赛 加强版)二分答案
考试的时候同届神犇 JZYshurak 出了一个 n=$10^5$ 的数据加强版. 刚开始没什么思路,但是忽然想到这个可以转成二分判定+暴力枚举的模型. 二分 ans, 使得大于等于 ans 的值小 ...
- cat/tac
cat -n 显示出行号 -E显示出结束符$ tac cat的反向显示,cat是正序显示内容,tac是倒序显示内容
- leetcode解题报告(6):Remove Duplicates from Sorted List
描述 Given a sorted linked list, delete all duplicates such that each element appear only once. For ex ...
- 安装包设计-------卸载(MFC)---------知识总结
1.删除目录及其下所有文件 bool MyDeleteFile(CString Path) { // SHFILEOPSTRUCT FileOp={0}; // FileOp.fFlags = FOF ...
- 集合家族——stack
一.概述 在 Java 中 Stack 类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的 它通过五个操作对类 Vector 进行了扩展 ,允许将向 ...