完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
为什么需要使用命令行调试程序
大部分时间内我们使用 IDE 中提供的功能就可图形化的调试程序,IDE 为我们屏蔽了调试过程中的一些细节。在一些特殊环境中,我们可能不得不手动使用命令行来调试程序,这时如果事先没有研究过调试的步骤,也许会手忙脚乱。在本文中我就讲下使用命令行调试程序的一般步骤。 调试步骤 1. 打开一个 gdb server 端 我们使用 jlink 调试的时候,通过将 jlink 与板子连接并打开 seegr 提供的 jlink gdb server 就创建了一个 gdb server 服务端,这个服务端会监听 2331 这个端口,客户端可以通过这个端口连接到服务器端加载程序进行调试。 2. 使用 gdb 来连接到 server 端 嵌入式中一般使用交叉编译的 gdb 程序来连接到 server 端。这里以 arm-none-eabi-gdb.exe 为例演示连接的过程。 arm-none-eabi-gdb.exe ./test.elf# ignore input(gdb) target remote localhost:2331 通过这样的过程就能够连接到服务器端,连接成功后 gdb server 中会提示有客户端连入,并显示客户端的一些信息。 也可以先打开 gdb 程序,然后执行 file 命令加载 elf 程序后再连接服务器端。 3. 执行必要的 gdb 脚本 对于需要配置一些参数的情况,诸如关闭 watchdog,配置 sdram 等,可将这些过程写入到一个 gdb 脚本中,在连接成功后执行这个脚本,就可以完成初始化配置。甚至于也可以将连接服务器端的过程也写入到 gdb 脚本中,这样直接执行脚本便完成了 2、3 步的过程。 执行的命令示例如下: source test.gdb 输出信息同样能够在 gdb server 中看到。 4. 加载程序 这一步需要加载 elf 程序到板子上,可以烧到 flash 中,也可以直接加载到内存中执行。这一步使用 load 命令即可。 5. 添加、查看、使能、禁能、删除断点 加载完成后可以添加、删除断点,一个具体的示例如下: (gdb) b main Breakpoint 1 at 0x1eccf: file main.c, line 50. (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x000000000001eccf in main at main.c:50 (gdb) disable break 1 (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep n 0x000000000001eccf in main at main.c:50 (gdb) enable break 1 (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x000000000001eccf in main at main.c:50 (gdb) delete break 1 (gdb) info break No breakpoints or watchpoints. 6. 运行程序 断点设置完成后就可以运行程序了,执行 continue 命令即可执行。 7. 查看寄存器、变量、内存地址的值 可以使用 print 命令来查看寄存器的值,寄存器名称前面要加 $ 符号用于区分普通变量名。同时 print 可以指定一个显示参数,这一参数表示了显示的数据格式,默认为十进制,可以选择十六进制与八进制的显示格式。x 命令可用来查看一段内存区域的值。 8. watch 某个地址 在调试一些疑难杂症的时候,watch 指令是一个利器,它能够在程序修改监控地址数据的时候停下来,这样我们就能够立刻定位到问题,它甚至可以添加一些简单的条件,可以用在更为复杂的环境中! 9. dump 程序到文件中来比较 如果你怀疑执行的程序与下载的程序不一致,那么你可以将执行的程序 dump 出来,使用二进制比较软件进行比较。格式如下: dump [format] memory filename start_addr end_addr 一般使用的文件格式是 elf 格式,这里的 format 替换为 binary 即可,filename 是保存到本地的文件名称,start_addr 与 end_addr 表示了 dump 的内存范围。 总结 本文描述了通过嵌入式开发中通过命令行调试程序的过程,本文仅仅选取了一些主要的步骤来进行描述,希望能给需要的朋友提供参考! |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1090浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
456浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:55 , Processed in 0.876389 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号