调试技术

GDB

(gdb) r 65536 hello      带参数运行

可以用ps | grep ×××或pstree来查看进程ID

attach <PID>        挂接已经运行的程序,即调试正在运行的程序

detach <PID>        取消挂载

watch <expression>    一旦表达式值有变化时,马上停止程序

gdb调试过程中查看源代码

list  

list <line-number>

list <function>

单步调试可以用n(ext)和s(tep),step进入函数内部,next不进入

在指定函数处设置断点b sum

set args "zcy"--指定运行时参数

show args--查看设定好的运行时参数

shell command--直接在调试时运行shell命令

break 行号或函数名 if   条件表达式 --设置断点

tbreak 行号或函数名 if  条件表达式 --设置临时断点,到达后被自动删除

delete 断点号 --删除指定断点,其断点号为“info b”中的第一栏。若缺省断点号则删除所有断点

disable 断点号 --停止指定断点,使用“info b”仍能查看此断点。同 delete 一样, 省断点号则停止所有断点

enable 断点号 --激活指定断点,即激活被 disable 停止的断点

condition 断点号 if <条件表达式> --修改对应断点的条件

c --继续执行函数,直到函数结束或遇到新的断点

 

ignore 断点号<num> 在程序执行中,忽略对应断点 num 次

 

wahtis p  查看变量类型

backtrace(或bt)查看栈信息

当调用一个函数时,函数的地址、参数、局部变量都会被压入栈中。

每个函数都对应一个frame,发生函数调用时frame就会有很多层。

frame 0  查看第0层即栈顶frame

up     向上移动frame

down    向下移动frame

info register  查看寄存器信息

多进程调试

(gdb) follow-fork-mode parent        fork之后继续调试父进程,子进程不受影响

(gdb) follow-fork-mode child        fork之后调试子进程,父子进程不受影响

(gdb) set detach-on-fork on         断开调试follow-fork-mode指定的进程

(gdb) set detach-on-fork off    gdb将继续控制子进程和父进程。follow-fork-mode指定的进程将被调试,另一个进程处于suspend状态

多线程调试

info threads      显示所有线程的概要信息

thread <threadno>  把进程号为threadno的进程设为当前进程

break <linenumber> thread <threadno>  设置断点时同进指定行号和进程号

远程调试

 

 

gdbserver+gdb  gdb运行在主机上,gdbserver运行在目标环境上

 

下载gdb包解压

cd gdb-6.6

./configure --target=arm-linux

make

sudo make install

这是编译用于主机上的gdb程序

cd gdb/gdbserver/

./configure --target=arm-linux --host=arm-linux

make CC=/opt/EmbedSky/4.3.3/bin/arm-linux-gcc

sudo make install

把生成的gdbserver下载到开发板上

在PC上用arm-linux-gcc -ggdb编程程序test.c,把test下载到开发板上,同时test也要保留在PC上

gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp:host:port)或者串口来通信。

以TCP为例:
在开发板上#gdbserver 192.168.0.100:5678 ./overflow   192.168.0.100是主机IP

在主机上$arm-linux-gdb ./overflow

(gdb)target remote 192.168.0.102:5678        192.168.0.102是开发板IP

更详细的介绍参见 http://blog.csdn.net/shawnrong/archive/2007/08/16/1745998.aspx

http://blog.ednchina.com/baifanshuishou/1968826/message.aspx

图形化调试

使用DDD(Data Display Debugger)

posted @ 2011-01-14 23:05  张朝阳  阅读(1251)  评论(0编辑  收藏  举报