Chinaunix首页 | 论坛 | 博客
  • 博客访问: 448122
  • 博文数量: 88
  • 博客积分: 2677
  • 博客等级: 少校
  • 技术积分: 893
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-13 08:01
文章分类

全部博文(88)

文章存档

2017年(3)

2016年(1)

2012年(4)

2011年(4)

2010年(57)

2009年(19)

我的朋友

分类: LINUX

2010-03-18 17:40:01

说道gdb远程调试,基本上都是嵌入式开发时,使用交叉编译环境下的调试。

环境连接图:(例)

 
蓝色部分:是我当前的环境配置。(因为'SupportCard串口'和'商品开发板串口'的信息内容一样)




下面记录debug调试方法部分。(其他的:交叉编译环境+tftp+nfs等的前期配置 → 全略)

LinuxPC的串口通信软件:minicom
(实际上我的linux装在vmware里了,所以,我用的是windows上的一个别的串口通信软件)

IP:192.168.1.1  → LinuxPC
IP:192.168.1.10 → SupportCard

过程:
1.
串口命令's &'启动目标板(startrc)

2.
方法1:(可独立启动进程)
    串口命令'pgdbserver 192.168.1.1:2345 /usr/xxx/yyy'    (host是交叉编译用linuxPC)
    显示:Process /usr/xxx/yyy created; pid = 493
    状态:当前状态是"等待远程debug连接"(该进程已启动)
    解说:pgdbserver是此环境专用的;通常应为gdbserver。
方法2:(需用fork()后的子进程,启动的进程)
    进程启动,是通过exec()相关函数启动的。
    所以可将启动命令直接换成通过gdbserver启动。
    例如: execlp("gdbserver", "gdbserver", "192.168.1.1:2345", "/usr/xxx/yyy", NULL)
          → execvp()也可,注意与execlp()的参数区别。


3.
emacs启动
  > M-x gdb
  > (Run like this:) arm-linux-gdb --annotate=3 usr/src/xxx/yyy
解说:
arm-linux-gdb是此环境的专用gdb工具(可别用系统自带的gdb去了)
-annotate=3:这个版本的emacs必须加,否则不能target remote(list都不能)
usr/src/xxx/yyyy.out :想debug的进程可执行文件。

---------------------

/usr/xxx/yyy 和 usr/src/xxx/yyyy.out 的区别:
/usr/xxx/yyy         是 make install后安装目录下的可执行文件。
usr/src/xxx/yyyy.out 是 src目录下的make后的可执行文件。

因为/usr/xxx/yyy在make install时,用arm-linux-strip把debugging symobl消除了,所以,要指定含有debugging symobl的usr/src/xxx/yyyy.out 。

实例:
$(MAKETOP)/usr/dtr/fep
$(MAKETOP)/usr/src/dtr/apl/fep/obj/fep.out
---------------------

4.连接gdb
 (gdb) target remote 192.168.1.10:2345  (连接目标板)
 Remote debugging using 192.168.1.10:2345
 0x30002258 in ?? ()

5.确认一下,可跳过(看看该进程的入口源代码是否显示)。
 (gdb) list

6.设个断点
 (gdb) b main
 (gdb) c  (不是run,因为在gdbserver启动时,该进程已经在目标板上启动了)
 Continuing.







阅读(1637) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~