insight是基于gdb的,所 以gdb需要的环境是一定要有的,新力德安装libx11-dev libncurses5-dev和libc6-dev这3个依赖文件,先安装好啊,不然等出错了再安装需要重新编译,麻烦死了。insight编译之前, 要修改下源码,就是修改默认的端口,否则会是1000不能改的,因为我用的是jlink,其端口2331是不能修改的,所以只有修改gdb的端口了,找到 /gdb/gdbtk/libaray/targetselection.itb ,查找1000,将其修改为2331(jlink端口)这里还需要注意一点,如果你跟我一样一定要修改insight端口,一定要看仔细了,这是 insight第一次编译安装,如果你以前安装过又删除了,再按照我这样修改编译安装 是不会有效的,除非你保证卸载的非常干净(其实源码make uninstall啥都没有写),否则,你得重新安装系统了!
软件的安装
1. tar jxvf insight-6.8-1.tar.bz2
2. cd insight-6.8-1
3. ./configure --prefix=/usr/local/insight --target=arm-linux
4. make
编译很久产生错误
cc1: warnings being treated as errors
.././gdb/cli/cli-cmds.c: In function ‘pwd_command’:
.././gdb/cli/cli-cmds.c:323: error: ignoring return value of ‘getcwd’, declared with attribute warn_unused_result
make[2]: *** [cli-cmds.o] 错误 1
make[2]:正在离开目录 `/home/qiang/tools/insight-6.8-1/gdb'
make[1]: *** [all-gdb] 错误 2
make[1]:正在离开目录 `/home/qiang/tools/insight-6.8-1'
make: *** [all] 错误 2
解决方法: vi gdb/Makefile 搜索-Werror
老代码
WERROR_CFLAGS = -Werror
修改为新代码
WERROR_CFLAGS = #-Werror
接着继续 sudo make
5. make install
最后添加其路径到系统中去,修改/etc/environment 添加/usr/local/insight/bin. 更新下此文件 source /etc/environment
6.然后就是编译出gdbserver了,
cd ~/gdb-6.8/gdb/gdbserver
$ ./configure --target=arm-linux --host=arm-linux
cd ~/gdb-6.8/gdb/gdbserver
$ make CC=arm-linux-gcc 指定编译器,也可以直接指定路径
这样在gdb-6.8/gdb/gdbserver目录下就生成了一个gdbserver可执行文件,复制到开发板系统(嵌入式linux)的/bin下
7.Insight工具的使用
主机上运行: arm-linux-insight
目标板上运行: gdbserver Host IP:Port myapp -qws
部分问题解决:
l1、inux-arm-low.c:37:21: error: sys/reg.h: No such file or directory
#ifdef HAVE_SYS_REG_H
#include <sys/reg.h>
#endif
在gdb/gdbserver/config.h修改如下:
/* Define if you have the <sys/reg.h> header file. */
#define HAVE_SYS_REG_H 1
/* Define if you have the <sys/reg.h> header file. */
//#define HAVE_SYS_REG_H 1 省略
//hello.c
#include<stdio.h>
#include<string.h>
int main()
{
char *str=NULL;
strcpy(str,"hello");
printf("str is %s/n",str);
return 0;
}
#arm-linux-gcc -g hello.c -o hello
设置主机IP地址为:192.168.1.10,开发板系统IP地址为:192.168.1.230(一般只需设置成同一个网段就行),
在开发板中:
#gdbserver 192.168.1.230:1234 hello
Process test created:pid=80 //使gdbserver在1234端口监听。
在主机中:
#arm-linux-gdb
(gdb) target remote 192.168.1.230:1234 //若链接成功,开发板的串口终端会显示如下:
Remote debugging from host 192.168.1.10
(gdb) symbol file hello //此处的hello是PC机上的所在路径的hello
(gdb) list
(gdb) break 5
(gdb) continuing
(gdb) step //会提示出现段错误(通常有内存的非法访问引起的)
常用的gdb调试命令:(某些唯一开头字母的命令可用开头字母直接替代,也可用Tab来显示其完整的命令名)
file 文件名 在gdb中载入某可执行文件 symbol file hello
break n 设置断点 break 5
info 查看和可执行程序相关的各种信息 info breakpoint delete/disable/enable breakpoint num
kill 终止正在调试的程序
print 显示变量或者表达式的值
set args 设置调试程序的运行参数
watch 在程序中设置观测点(如果数据改变,将给出变化前后的情况)
delete 删除设置的某个断点或观测点
clear 删除设置的某个断点或观测点
continue 从断点处继续执行程序
list 列出gdb中加载的可执行程序的代码
run 运行在gdb中加载的可执行程序
next 单步执行所加载的程序
step 单步,可进入函数内,查看执行情况(用finish回到调用处)
whatis 查看变量或函数类型
pype 显示数据结构定义情况
make 在不退出gdb情况下,编译程序
quit 退出gdb
gdb调试带参数的程序
转自:http://blog.csdn.net/shopping988/archive/2010/12/21/6090170.aspx
参考:http://hi.baidu.com/zjsxycli/blog/item/99863fddf1be55196227986e.html
参考:http://blogold.chinaunix.net/u3/110913/showart_2493386.html