蓝色部分:是我当前的环境配置。(因为'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.