0
点赞
收藏
分享

微信扫一扫

gdbx线程感知(OS Aware)调试使用说明


gdbx通过org.zoomdy.gdbx.OSNode组件提供线程感知调试(OS Aware Debugging)功能。这里介绍org.zoomdy.gdbx.OSNode(后续简称gdbx.OSNode)的使用。

关于gdbx(GDBServer Extender)的更多内容请访问​​gdbx项目主页​​

mingdu.zheng at gmail dot com

安装JRE

gdbx.OSNode是使用Java实现的,所以首先需要安装JRE,要求JRE7或以上。如何安装JRE请找度娘。

下载gdbx.OSNode

点击​​这里​​打开下载页面,选择最新版本的gdbx.OSNode下载。

运行gdbx.OSNode

这里以gdbx.OSNode-1.2.0版本为例,GDB Server为OpenOCD,目标机为STM32F4-Discovery,目标机运行FreeRTOS。首先运行openocd

openocd -f board/stm32f4discovery.cfg

接着运行gdbx.OSNode

java -jar ~/gdbx/org.zoomdy.gdbx.OSNode-1.2.0.jar --server-port=9000 --client-port=3333 --openocd --gdb=arm-none-eabi-gdb --exec=Debug/Example12.elf

运行GDB,已省略无关紧要的输出

arm-none-eabi-gdb Debug/Example12.elf 
(gdb) target remote :9000
(gdb) load
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
(gdb) info threads
Id Target Id Frame
3 Thread 536879144 (state:Blocked;prio:1;name:"Periodic") vPortYield () at FreeRTOS/portable/GCC/ARM_CM3/port.c:376
2 Thread 536875040 (state:Blocked;prio:3;name:"Handler") vPortYield () at FreeRTOS/portable/GCC/ARM_CM3/port.c:376
* 1 Thread 536879760 (state:Running;prio:0;name:"IDLE") 0x08001a02 in prvCheckTasksWaitingTermination () at FreeRTOS/tasks.c:3002
(gdb) thread 3
[Switching to thread 3 (Thread 536879144)]
#0 vPortYield () at FreeRTOS/portable/GCC/ARM_CM3/port.c:376
376 }
(gdb) bt
#0 vPortYield () at FreeRTOS/portable/GCC/ARM_CM3/port.c:376
#1 0x080012aa in vTaskDelay (xTicksToDelay=500) at FreeRTOS/tasks.c:975
#2 0x08001ef8 in vPeriodicTask (pvParameters=0x0) at ../main.c:32
#3 0x08000558 in pxPortInitialiseStack (pxTopOfStack=0x28200065, pxCode=0x2800000d, pvParameters=0xac20001f)
at FreeRTOS/portable/GCC/ARM_CM3/port.c:227
#4 0x08000558 in pxPortInitialiseStack (pxTopOfStack=0xdac, pxCode=0x20001fa8 <ucHeap+8088>, pvParameters=0x60)
at FreeRTOS/portable/GCC/ARM_CM3/port.c:227

参数详解

--client-port=nnnn

指定GDB Server的连接端口,OpenOCD的默认连接端口为3333,J-Link的默认连接端口为2331,QEMU的默认连接端口为1234。

--server-port=nnnn

指定GDB的连接端口,如未指定,那么使用默认端口9001。

--gdb=filename

指定使用的GDB调试器,如果GDB不在PATH搜索路径中,那么需要完整路径。gdbx.OSNode需要GDB来解析目标程序符号和数据结构,应该与调试目标程序的GDB一致。

--exec=target-executable-file

指定被调试的目标机程序,必须包含调试信息(即使用-g参数进行编译链接)。gdbx.OSNode使用该文件解析目标程序符号和数据结构,应该与被调试目标程序一致。

--openocd

理论上讲,gdbx.OSNode是独立于仿真器或模拟器,但与某些仿真器或模拟器存在兼容性问题,当与OpenOCD的配合有问题时,尝试加入该参数解决问题。

--jlink

理论上讲,gdbx.OSNode是独立于仿真器或模拟器,但与某些仿真器或模拟器存在兼容性问题,当与J-Link的配合有问题时,尝试加入该参数解决问题。

--qemu

理论上讲,gdbx.OSNode是独立于仿真器或模拟器,但与某些仿真器或模拟器存在兼容性问题,当与QEMU的配合有问题时,尝试加入该参数解决问题。


举报

相关推荐

0 条评论