集成开发环境-DBG
专用的调试模块
常见的 IDE 内部都集成了一个专用的 GUI 调试器,且不能拎出来单独使用。
- ADS
- IAR
- MDK
- Visual Studio
独立的调试工具
当然也有一些可以独立使用的调试器,例如:
- CLI: GDB, LLDB
- GUI: x64dbg, WinDBG, OllyDBG
图形调试器
适配器协议(DebugAdapterProtocol)
不论是专用的调试模块还是独立的调试工具,如果想支持调试多种语言,就必须要为每一种语言开发一套对应的调试程序,并且每个工具厂商都要独自去完成这些工作。为了减少不必要的重复劳动,微软制定了一套通用的调试协议,借助该协议各工具厂商只需要开发一套调试程序,向下再借助各种调试适配工具即可具备调试所有语言的能力。
目前实现该调试协议的开发工具有(常用的):
- VSC
- VS
- vim
- emacs
- EclipseIDE
btw, 微软还制定了一套通用的语言服务器协议 Language Server Protocol (LSP)
调试适配器(DebugAdapter)
调试适配器是对各类调试器的封装,遵循 DAP 协议对上提供统一的接口,以简化上层开发工具。常用的调试适配器有:
命令调试器(Debugger)
调试服务器(DebugServer)
- OpenOCD
- PyOCD
- JLinkGDBServer
- ……
仿真器驱动(DongleDriver)
- SEGGER JLink USB Driver
- SEGGER WinUSB USB Device Driver
仿真器设备(Dongle)
- CMSIS-DAP
- SEGGER JLink
仿真器协议(DongleTransportProtocol)
目标板芯片(TargetBoard)
- STM32F103CB
- STM32F407VE
本地与远程调试
远程调试方案也有很多,这里只对以下几种方式作一简要介绍:
- OpenOCD
- VSCode + JLinkGDBServer
- JLink + JLinkRemoteServer
- KeilMDK + JLinkRemoteServer
OpenOCD
略.
VSCode + JLinkGDBServer
1. 在服务主机上配置开启 JLink 调试服务器(该服务器会监听 2331 端口)
2. 等待连接
3. 在本地主机上配置 launch.json 文件并启动调试
{ |
cortex-debug-issues#244 : remote debugging
cortex-debug-wiki : external gdb server configuration
4. 建立连接
5. 远程调试
此处省略一张在 vscode 中调试的图片 |
6. 断开连接
JLink + JLinkRemoteServer
内网连接
1. 在服务主机上配置开启 JLink 远程服务器
2. 等待连接
3. 在本地主机上配置连接 JLink 远程服务器
4. 建立连接
5. 远程调试
6. 断开连接
隧道连接
1. 在服务主机上配置开启 JLink 远程服务器(隧道方式)
2. 等待连接
3. 在本地主机上配置连接 JLink 远程服务器(隧道方式)
4. 建立连接
5. 远程调试
6. 断开连接
KeilMDK + JLinkRemoteServer
内网连接
1. 在服务主机上配置开启 JLink 远程服务器
2. 等待连接
3. 在本地主机上配置连接 JLink 远程服务器
4. 建立连接
5. 远程调试
此处省略一张在 Keil MDK 中调试的图片 |
6. 断开连接