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

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

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

http://blog.csdn.net/zoomdy/article/details/50651465
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值