在uClinux下利用GDB进行调试
来源:互联网 发布:明基投影仪 知乎 编辑:程序博客网 时间:2024/05/18 01:27
环境:Blackfin uClinux(版本:buildroot-2012R1-RC6-BF60X)
Linux主机:ubuntu 10.04.4
可以通过串口和网络两种方式进行调试,以下示例以网络调试为例。
1. 在Linux主机编译应用程序:bfin-uclinux-gcc–g –o0 –o a.out test.c
-g :在可执行文件中加入调试信息,才能使GDB正常工作;
-o0 :将优化等级设置为0,以便于调试。
2. 在超级终端上将编译好的可执行文件a.out拷贝到uClinux根目录下:
ftpget -u joey -p 123456 192.168.1.159 a.out/mnt/hgfs/uClinux-code/ABC3000_src/a.out
赋予a.out可执行的权限:
chmod a+x a.out
在uClinux下启动gdbserver:
gdbserver localhost:3456 a.out(3456是端口,只要不与其它应用冲突,可改成任意端口)
3. 在Linux主机下面执行:bfin-uclinux-gdb a.out.gdb(a.out.gdb在编译时生成)
当GDB在主机下运行起来后,执行以下命令连接目标系统,即uClinux:
target remote 192.168.1.122:3456(192.168.1.122是uClinux的IP地址)
到了这一步,就可以进行调试了:
--------------------------------------------------------------------------------------------------------
以下表格是常用的GDB命令:
命令
效果
开始与停止
quit
退出GDB
run
运行程序(后面可以开命令行参数)
kill
停止程序
断点
break sum
在函数sum的入口处设置断点
break *0x80483c3
在地址0x80483c3处设置断点
delete 1
删除第1个断点
delete
删除所有断点
执行
stepi
执行一条指令(逐语句,会进入函数)
stepi n
执行n条指令(逐语句)
nexti
类似于stepi(逐过程,不会进入函数)
continue
继续执行
finish
运行至当前函数返回
检查代码
disas
反汇编当前函数
disas sum
反汇编函数sum
disas 0x80483b7
反汇编地址0x80483b7附近的代码
disas 0x80483b7 0x80483c7
反汇编两地址之间的代码
print /x $pc
以十六进制形式打印程序计数器
list
列出源代码
list n
列出第n行附近的源代码
检查数据
print $r0
以十进制打印r0的值
print /x $r0
以十六进制打印r0的值
print /t $r0
以二进制打印r0的值
print 0x100
打印0x100的十进制形式
print /x 1024
打印1024的十六进制形式
print /t 1024
打印1024的二进制形式
print /x ($pc+8)
以十六进制形式打印寄存器pc内容+8
print *(int *) 0xbffff890
打印地址0xbfffff890中的整数
print *(int *) ($pc +8)
打印地址%pc+8中的整数
有用的信息
info frame
当前栈桢的信息
info registers
所有寄存器的信息
help
获取GDB的信息
更详细的内容请见:http://docs.blackfin.uclinux.org/doku.php?id=debuggers&s[]=gdb
- 在uClinux下利用GDB进行调试
- 在Linux下利用GDB调试程序
- 在cygwin下使用bfin-uclinux-gdb
- 利用GDB进行多线程调试
- 利用GDB进行远程调试
- 利用GDB进行多线程调试
- 利用GDB进行多线程调试
- 利用GDB进行多线程调试
- 利用GDB进行多线程调试
- 利用GDB进行多线程调试
- 利用GDB在远程开发机进行调试
- 使用gdb、gdbserver在ARM-Linux下进行远程调试
- 使用gdb、gdbserver在ARM-Linux下进行远程调试
- Linux下进行GDB调试
- 在cygwin下进行bfin-uclinux开发
- 使用 GDB 调试 uCLinux 内核
- 使用 GDB 调试 uCLinux 内核
- Windows下使用ndk-gdb进行调试
- RPM数据库损坏的解决方法
- oracle&linux定时备份
- Java中Set的使用
- 寻找发帖“水王”及扩展题
- oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
- 在uClinux下利用GDB进行调试
- onInterceptTouchEvent和onTouchEvent调用时序
- 非阻塞recvfrom和connect的设置
- 完全卸载oracle11g步骤
- 两种方法实现Web Service身份验证
- 函数指针
- RHEL(Red Hat Enterprise Linux), CentOS, Ubuntu, Linux Mint, Debian
- Arcgis api for android在模拟器上运行出错
- StarUML小技巧汇总