调试技术
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)
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/1935939.html