找回密码
 注册
关于网站域名变更的通知
查看: 228|回复: 1
打印 上一主题 下一主题

使用GDB进行嵌入式远程调试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-16 16:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
PC主机:Ubuntu 10.4 0 {/ B3 Y! H* f
6 v  E' |) T- F( {4 U# K
目标板:TQ2440开发板,linux内核2.6.30, S8 e, L$ x4 G! Y/ \6 B+ G& \

/ P) z7 C' \4 g# W) pNOTE:为了使用gdb进行调试,强烈建议使用nfs服务,否则调试会非常麻烦。& ~# _* B8 j6 P3 p' ^1 `% u
8 Q7 k- J$ k0 o- `
使用nfs服务可以参考:S3C2440挂载NFS文件系统
) m1 r; i2 Q) i9 x
4 p; O; I* \; c+ U' b1. 概述  A  l! ?9 P3 A7 [
所谓远程调试,就是开发板上建立一个gdb服务端,同时待调试的程序也位于开发板,然后在PC机上使用gdb发起远程连接来进行调试。也就是说,在PC端调试开发板上的程序。请注意,在PC端需要包含被调试程序的符号调试信息(symbolic debug information),因此强烈建议使用NFS,否则需要两份被调试的应用程序,一份供gdb使用,另一份供gdbserver使用。6 |  @! A3 P4 {
, T8 T4 {, e7 f1 W' P
2. 安装GDB服务" z9 t/ V9 O- v2 t; t
下载gdb安装包,下载地址:http://ftp.gnu.org/gnu/gdb/ 0 Q3 G1 c" E/ q: m9 Z' ?; F

4 f* n  D1 N. K- c' U/ Z这里使用的是7.4。
1 y3 b( r  Y& G6 C" Q  f3 x0 ]
% @/ A' m, T) M- `, }解压安装包:
) C8 }, n- K; u8 k) X8 a, F
1 w% _, k4 x7 w- c% Eyj423@ubuntu:~/work_yj423$ tar -xvf gdb-7.4/
9 R4 }1 f, a) k
) N/ H9 G5 i9 F2 m( G3 \: }yj423@ubuntu:~/work_yj423/gdb-7.4$ pwd3 J0 f: \/ \- N6 W/ m; u
/home/yj423/work_yj423/gdb-7.4
8 |4 h& \' Z; D7 K
- f- ?- D( k. m: O在开始编译之前,你必须知道你的交叉编译器的名字。我的交叉编译器是ARM-unknown-linux-gnueabi-gcc,在下面将会用到该名字。# S6 ~2 [, ~9 ?

: E$ \2 g+ R% S1 q( ^3 G# O& W! k0 F1 k  g% L
# x3 L7 U& n, c  W
首先编译gdbserver,该程序运行在开发板上。# f# E) Y) K0 D' b) d# L7 R
- J. Z! ~$ w1 D( _# @) @; M7 n1 l
执行下列命令:, E8 l  `0 E2 a) U/ i) h
/ [# D) K* P, J8 u% ?
yj423@ubuntu:~/work_yj423/gdb-7.4$ cd gdb/gdbserver/& a: ~1 {1 H0 T2 C* H$ o4 }
yj423@ubuntu:~/work_yj423/gdb-7.4/gdb/gdbserver$ ./configure --host=arm-unknown-linux-gnueabi --target=arm-unknown-linux-gnueab
5 i4 i. Y$ e" @0 Syj423@ubuntu:~/work_yj423/gdb-7.4/gdb/gdbserver$ make
, z8 z4 I, o6 J, ]# P+ V
1 v& s; t6 X, V/ h在make以后,会在当前目录下生成可执行文件gdbserver。. ~7 W) U2 @" p& X7 o9 x

" P; a4 w9 v# y& I
/ X1 o) r- s5 J6 o: b5 s  R4 E/ p& E
接着编译gdb,该程序运行在PC机上。) w5 }. c* }1 P5 J
4 D# q7 ]3 F# m
执行下列命令:
- \) {& b6 O, `& z0 y* h5 T6 K: |9 F' y& s
yj423@ubuntu:~/work_yj423/gdb-7.4/gdb/gdbserver$ cd ../../& y, i) R+ N; b" M$ Q+ g$ v
yj423@ubuntu:~/work_yj423/gdb-7.4$ sudo ./configure --targe=arm-unknown-linux-gnueabi
' P1 o3 @$ H& v' P' O, b- J! o0 Gyj423@ubuntu:~/work_yj423/gdb-7.4$ make
2 x' V" R6 s0 {8 u& Z* v  D9 f9 ?  h, v' t# V
请注意执行命令时所在的目录。执行完以后会在gdb-7.4/gdb/下生成可执行文件gdb。我将gdb改命为armgdb。( C' j1 j$ \+ A9 s5 S0 i8 t

3 _- {! _7 s" I3 n% @! Z/ Y3. 使用gdb调试; S6 n; a9 m* }$ m
测试程序为hello.c,程序如下:
, S# p* u! G9 C' `! R$ R* m6 f6 S- g9 w0 y$ c
#include <stdio.h>) o/ O# o, F/ W$ q. |$ m

0 g% r$ ?! c( o- g# N0 Bvoid main()+ Y) k' `  ~" g# F
{
' s8 q# w# L% j: q6 o        printf("hello world\n");! f- x  g6 x* s+ f7 j9 }" k% q; X
        printf("hello world\n");
( U# M6 r' |* m* A9 ~$ q) A5 P7 t" m9 [}
  |5 s+ o: t4 D& F3 M# p, Y8 E使用交叉编译器编译该文件,使用-g参数,生成hello。将gdbserver和hello复制到NFS的挂载点,我的挂载点为/home/yj423/nfswork。: w; j, B# |: ?9 O
yj423@ubuntu:~/nfswork$ ls
" ^7 z0 ]0 x3 F  p; H3 L4 kbin   dev  gdbserver  home  linuxrc  proc  sbin  tmp  var
2 J# X7 ?1 r! p  a8 C4 c5 Nboot  etc  hello      lib   mnt      root  sys   usr  welcome
+ {' E7 J" u2 A0 G2 n- T5 k: k
% a5 A1 }1 {- _5 c可以看到gdbserver和hello。2 a, Y6 D3 _) z6 Q4 R, S
: _7 n+ o- @) }1 e$ \; {& K
接着,在开发板上使用NFS:
0 r( w; P4 m- C0 R5 p3 B7 d8 V[root@yj423 /]#mount -o nolock 192.168.1.103:/home/yj423/nfswork /mnt/nfs
7 Z: ~- X* Y5 V! `3 p  w- V  s[root@yj423 /]#cd /mnt/nfs
! x. M2 k0 e- m: u- U' ~, X[root@yj423 nfs]#ls
8 A5 h3 S/ m% {4 z, i# @- d) a- y# ]bin        dev        gdbserver  home       linuxrc    proc       sbin       tmp        var8 N! U# A7 V2 d( f0 E
boot       etc        hello      lib        mnt        root       sys        usr        welcome
- ~9 d/ {- R6 j; L& m1 v3 c% ^. S+ d$ {; x

- [( b' M. ?  q; Z+ O0 m然后执行gdbserver:
- y' K8 T# s, z& H% W. q8 p% E. x4 {% ]. n4 q' t* e! Y
[root@yj423 nfs]#./gdbserver localhost:2001 hello
- u. ?7 b, d! w2 MProcess hello created; pid = 948
/ P- f' y3 ]6 E" f" JListening on port 2001% v  }% u4 v' `2 W- e( ^6 V

& k$ [  d4 k6 F0 }$ t4 X2001为端口号,hello表示要调试的程序。此时gdbserver等待PC机进行链接。
. B$ y; s* ~( L5 ^7 q3 h1 C& d5 ]6 Z2 r
" ]: g  }! ]9 _" \1 ~. k& Y6 K) S; y

4 I* I* s. ~; _3 W在PC机上执行gdb:# C/ B, [5 s+ l# n. u' ^7 O

# A- y7 r  J4 L3 n9 k: h$ f6 i
( Z) ^1 }" u! w8 Kyj423@ubuntu:~$ ./armgdb -q /home/yj423/nfswork/hello
/ o6 L+ L" A5 \+ |2 }Reading symbols from /home/yj423/nfswork/hello...done./ f4 n1 p: g% a- q' u4 a) `
9 r3 j7 p$ k, ~5 k0 h0 r; e
执行远程链接:8 j9 c# v8 [2 x
# T$ I0 ~0 v3 G2 _
(gdb) target remote 192.168.1.6:2001
4 P: j6 o) ^! z9 }. ^Remote debugging using 192.168.1.6:2001
$ e' r- [! M4 g7 o- {" pwarning: Unable to find dynamic linker breakpoint function.
! ~& x% k% J4 U! o% T2 wGDB will be unable to debug shared library initializers
8 R5 m- A' ?( r" Land track explicitly loaded dynamic code.
  a  K7 S, O1 G" b; d0x400007b0 in ?? ()  Q/ E* P( S2 x& J8 Z  n; J: l
(gdb)
* w* |, Q6 A6 V: @/ g. x" o; n+ S( h1 n' ~; \1 P% y2 V
这里的192.168.1.6为开发板的IP地址。
- g3 J- R3 g) E% i. K. p. b" E6 l* \& P5 H% W& k. j2 H- F
至此PC端的gdb和开发板的gdbserver已经建立连接,接下来可以调试。8 V0 [. x* ]! C  N$ B- F% r% y, V

; B* N' v' _6 k% i' `(gdb) b main$ T5 e: O1 _/ P
Cannot access memory at address 0x03 `8 t( i* O/ Y
Breakpoint 1 at 0x83e0: file hello.c, line 5.
/ Y) e6 R/ @7 k8 a1 y(gdb) c
, q: _# R& i" K. P3 Y0 b( ?3 RContinuing.
' D( }: s5 q/ k) h: |9 Gwarning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.& X" A* w4 y5 b# ]. o% e$ |8 w
warning: Could not load shared library symbols for /lib/ld-linux.so.3.% j/ ]' {1 Q1 @7 U
Do you need "set solib-search-path" or "set sysroot"?% i+ C3 o5 v* k! B: p% n: V8 V
Breakpoint 1, main () at hello.c:5  s! V- ]2 B* e9 \
5        printf("hello world\n");
! `  {6 U$ x  \(gdb) n* d1 a. m" C$ a* f1 `
6        printf("hello world\n");5 E( S0 e" S+ S2 M; C& B
(gdb) n
, M" t2 _' d) h) A7    }
5 e& l8 L2 \! J. t
' O" y' q" w4 Y. I' B这里只是简单的调试。后面还会有共享库调试和多进程调试,尽请期待!8 J% A- _' K% G% m! K

' d1 Y# O4 L" z1 f) D, @0 B. W3 S/ Y% P* ]3 V
5 S' o  Z& |4 u8 S3 ?

该用户从未签到

2#
发表于 2020-6-16 18:31 | 只看该作者
使用GDB进行嵌入式远程调试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 22:41 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表