Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1520968
  • 博文数量: 114
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1357
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 18:13
文章分类
文章存档

2010年(8)

2009年(9)

2008年(27)

2007年(62)

2006年(8)

我的朋友

分类: LINUX

2007-08-16 00:33:16

北京理工大学 20981 陈罡
为a1200开发程序,是一个充满了趣味的开发过程。相信每个开发者都能够从中找到自己的乐趣
。我就是深深的迷上了这个开发过程,其实究其本质,都是嵌入式linux的迷人之处。由于是
linux,那么很多事情,我们可以不必太关注它本身的文档,而直接寻求开放的linux系统的帮
助。本篇就讲讲在win32的cygwin环境下,如何通过开发计算机远程连接到a1200上面,单步执
行程序。首先就是自己编译一个cygwin环境下面可以用的arm-linux-gdb.exe,这需要在配置
gdb编译选项的时候加上:
./configure --host=i686-pc-cygwin --target=arm-linux
然后就是make clean ; make了,然后把gdb/目录下面的gdb.exe改个名字,arm-linux-gdb.exe
即可。当敲入这个命令的时候,你要能够看到如下的字符串:
$ arm-linux-gdb
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-cygwin --target=arm-linux".
(gdb)
这里的This GDB was configured as "--host=i686-pc-cygwin --target=arm-linux".这一句
是非常重要的喔!!没有它就不能和a1200进行同步的调试了。
 
下一步,就是生成在手机上可以用的gdbserver了,注意这次是给手机编译程序,生成的程序应
该在手机上运行就是一个stub:
 $rm config.cache
 $export CC=arm-linux-gcc
 $./configure --target=arm-linux --host=arm-linux --build=i686-pc-cygwin
 $make clean
 $make
又是一个漫长的过程。心急的朋友如果懒得自己编译也可以,我已经把编译好的cygwin环境下
面可以用的arm-linux-gdb和a1200手机上可以用的gdbserver上传上来了,供大家下载。
 
通过a1200的samba服务,我们可以把gdbserver拷贝到手机的测试程序目录的下面。
注意,此时手机中的测试程序,编译的时候一定要带上调试选项-g,否则无法远程调试。
然后通过telnet登陆到a1200上,运行gdbserver开始远程调试。简单介绍一下gdbserver的使用
方法:
#gdbserver host:port app
host:将要连入的远端pc,注意不是a1200自己的ip地址
port:就是端口号了
app :就是需要调试的程序名称了
 
假设,我们在当前目录下面的程序名字叫voipsvr,a1200自己的地址是192.168.16.6,远端pc
的ip地址为192.168.16.5。那么,通过telnet登陆到a1200,并进入指定的目录后,应该输入的
内容为:
#gdbserver 192.168.16.5:1234 voipsvr
如果没有什么错误的话,应该看到如下输出,并且程序进入等待连接的状态:
#./gdbserver 192.168.16.5:1234 voipsvr
Process voipsvr created; pid = 780
 
好了,如果你到了这一步,就代表手机已经准备好了要远程调试了,现在我们回到pc上来。
进入cygwin,上述程序的开发目录,然后运行:
arm-linux-gdb voipsvr
在提示行中输入:
target remote 192.168.16.6:1234
 
全部的远程调试效果如下图:
呵呵,剩下的就不用我多说了,gdb的常规命令了:
list:显示代码
break 行号:设置断点
next:不进入程序,直接运行到下一行
step:进入函数单步执行
print 变量名:查看变量的内容
continue:开始执行程序
quit:退出
具体的命令,包括条件调试之类的复杂一些的,大家看看gdb的manual就可以了。
这里就是命令行调试了,如果还是觉得麻烦的话,可以使用一些支持gdb的集成的环境来调试。
我使用的是magic c++ 3.5,具体的配置方法参见readme,呵呵,这里不得不提一下magic c++
从4.0开始做得越来越难以使用了,速度也慢了好多,真不知道他们得开发团队如何考虑的。强
烈建议用3.0,3.5版本。
效果如下图:

在telnet上的输出为:
这就是真机联机调试的全部过程了,掌握了这些,即使再复杂的视频解码器也没有问题,一样可以调试得通,这些要是没有得话,简直无法想像啊。每次都用printf和cout看结果得日子总算过去了。:P
文件: gdbserver.gz
大小: 31KB
下载: 下载
文件: arm-linux-gdb.tar.gz
大小: 712KB
下载: 下载
阅读(4906) | 评论(7) | 转发(0) |
给主人留下些什么吧!~~