GNU Toolchain —— (三)gdb 调试续
来源:互联网 发布:sql中references 编辑:程序博客网 时间:2024/05/02 02:58
一、查看源文件
这个问题问的也是很多的,太多的朋友都说找不到源文件。在这里我想提醒大家做下面的检查:
编译程序员是否加上了-g参数以包含debug信息。
路径是否设置正确了。使用GDB的directory命令来设置源文件的目录。
下面给一个调试/bin/ls的示例(ubuntu下)
$ apt-get source coreutils
$ sudo apt-get install coreutils-dbgsym
$ gdb /bin/ls
GNU gdb (GDB) 7.1-ubuntu
(gdb) list main
1192 ls.c: No such file or directory.
in ls.c
(gdb) directory ~/src/coreutils-7.4/src/
Source directories searched: /home/hchen/src/coreutils-7.4:$cdir:$cwd
(gdb) list main
1192 }
1193 }
1194
1195 int
1196 main (int argc, char **argv)
1197 {
1198 int i;
1199 struct pending *thispend;
1200 int n_files;
1201
二、命令行参数
有时候,我们需要调试的程序需要有命令行参数,很多朋友都不知道怎么设置调试的程序的命令行参数。其实,有两种方法:
gdb命令行的 –args 参数
gdb环境中 set args命令。
三、gdb的变量
有时候,在调试程序时,我们不单单只是查看运行时的变量,我们还可以直接设置程序中的变量,以模拟一些很难在测试中出现的情况,比较一些出错,或是switch的分支语句。使用set命令可以修改程序中的变量。
另外,你知道gdb中也可以有变量吗?就像shell一样,gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:
(gdb) set $i = 0
(gdb) p a[$i++]
... #然后就一路回车下去了
当然,这里只是给一个示例,表示程序的变量和gdb的变量是可以交互的。
四、x命令
也许,你很喜欢用p命令。所以,当你不知道变量名的时候,你可能会手足无措,因为p命令总是需要一个变量名的。x命令是用来查看内存的,在gdb中 “help x” 你可以查看其帮助。
x/x 以十六进制输出
x/d 以十进制输出
x/c 以单字符输出
x/i 反汇编 – 通常,我们会使用 x/10i $ip-20 来查看当前的汇编($ip是指令寄存器)
这个问题问的也是很多的,太多的朋友都说找不到源文件。在这里我想提醒大家做下面的检查:
编译程序员是否加上了-g参数以包含debug信息。
路径是否设置正确了。使用GDB的directory命令来设置源文件的目录。
下面给一个调试/bin/ls的示例(ubuntu下)
$ apt-get source coreutils
$ sudo apt-get install coreutils-dbgsym
$ gdb /bin/ls
GNU gdb (GDB) 7.1-ubuntu
(gdb) list main
1192 ls.c: No such file or directory.
in ls.c
(gdb) directory ~/src/coreutils-7.4/src/
Source directories searched: /home/hchen/src/coreutils-7.4:$cdir:$cwd
(gdb) list main
1192 }
1193 }
1194
1195 int
1196 main (int argc, char **argv)
1197 {
1198 int i;
1199 struct pending *thispend;
1200 int n_files;
1201
二、命令行参数
有时候,我们需要调试的程序需要有命令行参数,很多朋友都不知道怎么设置调试的程序的命令行参数。其实,有两种方法:
gdb命令行的 –args 参数
gdb环境中 set args命令。
三、gdb的变量
有时候,在调试程序时,我们不单单只是查看运行时的变量,我们还可以直接设置程序中的变量,以模拟一些很难在测试中出现的情况,比较一些出错,或是switch的分支语句。使用set命令可以修改程序中的变量。
另外,你知道gdb中也可以有变量吗?就像shell一样,gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:
(gdb) set $i = 0
(gdb) p a[$i++]
... #然后就一路回车下去了
当然,这里只是给一个示例,表示程序的变量和gdb的变量是可以交互的。
四、x命令
也许,你很喜欢用p命令。所以,当你不知道变量名的时候,你可能会手足无措,因为p命令总是需要一个变量名的。x命令是用来查看内存的,在gdb中 “help x” 你可以查看其帮助。
x/x 以十六进制输出
x/d 以十进制输出
x/c 以单字符输出
x/i 反汇编 – 通常,我们会使用 x/10i $ip-20 来查看当前的汇编($ip是指令寄存器)
x/s 以字符串输出
五、一次打印所有线程的堆栈
thread apply all bt full
另外,可以在脚本里面调用gdb来打印,而不进行交互
gdb -q --batch --ex "set height 0" -ex "thread apply all bt full" [可执行文件] [core文件]
解释:
-q: 不打印gdb的版权消息
--batch: 执行批处理,不进入交互模式
--ex: 执行gdb 命令
"set height 0": 不对输出进行分页
"thread apply all bt full": 打印所有线程堆栈
- GNU Toolchain —— (三)gdb 调试续
- GNU Toolchain —— (三)gdb 调试
- GNU toolchain —— (一)介绍
- GNU Toolchain —— (二)GCC参数详解
- GNU Toolchain —— (六)gprof的应用
- GNU Toolchain —— (五)gcov与lcov入门
- GNU工具链(GNU toolchain)
- gdb (GNU 调试器):基础
- gdb (GNU 调试器):基础
- gdb - GNU 调试器
- 用GNU gdb 调试
- gdb - GNU 调试器
- GNU Toolchain —— (四)例解 autoconf 和 automake 生成 Makefile 文件
- GNU toolchain
- GDB调试(三)
- GDB 调试(三)
- go学习(三)——gdb调试
- gdb调试技术(三)
- Jaxb中java类的相关注解详解描述
- HTML5样式控制
- Oracle XE 安装时怎样转换成 ZHS16GBK
- Google Glass SDK/Mirror API and Glassware
- MSP430G2553串口通讯 发送接收
- GNU Toolchain —— (三)gdb 调试续
- fibnacci(1,1,2,3,5,8-----------------)
- 如题,请问在ios上 2048x2048的ATF 正常上传要多久?
- 有趣的冒泡排序实现
- java实体类
- SpringMVC的json转换及对Date类型的转换格式的处理
- MyEclipse10.0工程中引入Testng
- ios读取通讯录信息
- 光标的使用