OPENJTAG调试学习(二):OpenOCD、OpenJTAG 烧写程序、调试程序

简介: OPENJTAG调试学习(二):OpenOCD、OpenJTAG 烧写程序、调试程序

使用 OpenOCD、OpenJTAG 烧写程序、调试程序

对于 S3C2410、S3C2440、S3C6410 开发板,大多使用 sjf2410.ext、sjf2440.exe、sjf6410等工具通过并口 JTAG 接口板烧写程序,并口 JTAG 的速率非常低,烧写 128K 的文件至少耗时 10 多分钟。

后来又出现了 H-JTAG 工具,它也是使用并口 JTAG 接口板并且速度很快,但是目前只支持烧写 Nor Flash,不支持 Nand Flash。

使用 OpenOCD,既可以烧写 Nor Flash,也可以烧写 Nand Flash,还可以进行简单的调试。

注意:OpenJTAG 有三种烧写 Flash 的方法,

  • ① 使用 oflash.exe(Linux 版本为 oflash)来烧写,它是一个类似 sjf2440.exe 的工具
  • ② 使用 OpenOCD 的命令进行烧写
  • ③ 通过 OpenOCD 将 u-boot 下载到单板内存后,启动 u-boot 来烧写 Flash,它支持 CFI 接口、JEDEC 接口的 Nor Flash,当然也支持 Nand Flash。

本节假设对于 S3C2410、S3C2440,工作目录为 E:\eclipse_projects;

对于 S3C6410,工作目录为 E:\eclipse_projects\6410。已经把光盘上的 Windows\examples 目录下的所有文件夹、文件都复制到了 E:\eclipse_projects 目录下。

1-启动 OpenOCD,OpenOCD 常用命令

把开发板的 JTAG 口、串口都接到 OpenJTAG 板上去;然后给开发板供电(注意:使用 JTAG线连接 OpenJTAG 与开发板时,开发板一定要上电);最后使用 USB 线连接 OpenJTAG 和计算机。

点击“开始 -> 程序 -> OpenOCD 0.4.0 with GUI -> OpenJTAG(GUI for OpenOCD)”(图2.14)即可启动 openocd,启动界面如图 2.15:

在图 2.15 中,

  • 选择“Manual”;
  • “Interface”里选择“openjtag”,这表示使用 OpenJTAG调试器;
  • “Target”里选择“samsung_s3c2410”、“samsung_s3c2440”或“samsung_s3c6410”,表示目标板;
  • “Work Dir”表示工作目录,当使用 telnet 界面来操作 openocd 时,读写文件时使用的相对路径就是基于这个“Work Dir”,本例设为“E:\eclipse_projects”。
  • 注 1:
  • “Interface”里的选项对应于“C:\Program Files\OpenOCD\0.4.0\interface”目录下的各个配置文件;
  • “Target”里的选项对应于“C:\Program Files\OpenOCD\0.4.0\ target”目录和“C:\Program Files\OpenOCD\0.4.0\board”目录下的各个配置文件。
  • 注 2:如果“Target”里没有您要调试的芯片,可以自己编写配置文件放到“C:\ProgramFiles\OpenOCD\0.4.0\ target”目录下去,然后重新运行“OpenJTAG(GUI for OpenOCD)”。
  • 注 3:如果您对 openocd 比较熟,想添加脚本文件时,可以使用“Expert”选项。

以 S3C2440 开发板为例,选择好各选项后,点击“Connect”按钮,如果成功,会出现图2.16 所示界面。“Connect”按钮自动改名为“Disconnect”按钮,并且识别出 CPU ID。

OpenOCD 连接到开发板后,点击“telnet”按钮即可登录 OpenOCD,以后就可以在 telnet界面操作 OpenOCD 了:

  • 包括读/写开发板内存,
  • 烧写 Flash,
  • 使用命令行的方式调试程序(使用图形界面调试程序时需要使用 Eclipse)。

注意:对于 windows 7 系统,默认是没有安装 telnet.exe 的。需要打开“控制面板”,找到“程序和功能”,然后点击左上方的“打开或关闭 windows 功能”,会弹出 windows 功能的对话框,这个对话框里面有许多 windows 的小功能,再找到 TelentClient,打上勾,确认即可。

telnet 界面如图 2.16 所示。

OpenOCD 的使用文档是“开始 -> 程序 -> OpenOCD 0.4.0 with GUI -> OpenOCD User’sGuide.pdf”,表 2.1 中列出常用命令。

  • 1-目标板状态处理命令

  • 断点命令

  • 内存访问指令

  • CPU架构相关命令

  • 其他命令

    下面试验一下,S3C2410 或 S3C2440 从 Nand 启动时,内部内存地址是 0;

从 Nor Flash启动时,内部内存地址是 0x40000000。

以下假设从 Nand 启动,您可以按照图 2.16 操作一下。

2 使用 OpenOCD 烧写小程序到内部 RAM,并运行、调试(S3C2410/S3C2440)

S3C2410、S3C2440 有 4K 的内部 RAM,当程序小于 4K 时,可以通过 OpenOCD 直接把程序烧到内部 RAM 中、运行、调试。

  • (1) 编译程序:

以光盘上的 E:\eclipse_projects\leds 程序为例,先编译程序:在命令行进入文件源码所在目录,执行“make”命令,如图 2.19 所示。

  • (2) 下载、运行程序:

在 telnet 界面,先执行“load_image leds\leds_elf”加程序,它会根据 leds_elf 里面的信息把可执行代码加载到地址为 0 的内存处,“load_image leds\leds.bin 0x0”可以达到同样的效果;然后执行“resume 0x0”命令执行程序。如图 2.20 所示。

注意:下载程序之前先使用“halt”命令暂停单板,才能下载代码;

如果使用“poll”命令发现单板的 MMU 或 D-cache 已经使能,则需要使用“arm920t cp15 2 0”、“step”两条命令禁止 MMU 和 D-cache。

  • (3) 简单的调试命令:运行 leds 程序后,
  • 可以使用“halt”命令暂停程序,
  • 使用“resume”命令恢复运行程序,
  • 使用 bp 命令设置断点,
  • 使用 rbp 命令删除断点。

如图 2.21 所示。

程序在断点停下时,可以看到 LED 也停止闪烁,恢复运行时 LED 就再次变化、再次停止。

至于为什么在 0x84 处设置断点,主要是想在 leds.c 中写 GPBDA 寄存器来控制 LED 的代码处设置断点,如图 2.22 所示。

可以从反汇编 leds.dis 中知道这段代码的地址在 0x84 处,如图 2.23 所示。

从反汇编代码确定程序功能,是件难度很高的事情,所以一般不直接操作 OpenOCD 来调试程序,而是通过其他工具来调试:

  • ① 使用 arm-elf-gdb 调试器:可以指定在源文件的某行设置断点;
  • ② 使用 Eclipse 来调试:可以直接在源文件中通过双击设置断点。

3 使用 oflash.exe 直接烧写 Nor/Nand Flash(S3C2410/S3C2440)

对于 s3c2410、s3c2440 开发板,一般使用 sjf2410.exe、sjf2440.exe 通过并口 JTAG 工具烧写 Nor、Nand Flash,它的优点是使用简单,缺点是速度比较慢,并且现在太多 PC 机已经

没有并口了;

oflash.exe 是特别针对 OpenJTAG 编写的烧写工具,支持 s3c2410、s3c2440 开发板,支持几乎所有类型的 Nor、Nand Flash 烧写,速度快,使用方法类似 sjf2410.exe、sjf2440.exe。

下面是一个例子

4 使用 OpenOCD 下载 u-boot,通过 u-boot 烧写 Nor/Nand Flash(S3C2410/S3C2440)

通过 OpenOCD 可以快速地读写开发板的 SDRAM,那么可以把 u-boot 先放到 SDRAM 中,然后启动它,就可以使用 u-boot 来烧写 Nor/Nand Flash 了──u-boot 的功能及速度都比一般的烧写工具要强。

在 SDRAM 能被访问之前,必须初始化存储控制器,这可以通过下载一个特定的小程序到内部 RAM 中,并运行它,由它来进行初始化,这个程序在 E:\eclipse_projects\init 目录下。

(1) 下载、运行初始化程序 init.bin:

注意:下载程序之前先使用“halt”命令暂停单板,才能下载代码;如果使用“poll”命令发现单板的 MMU 或 D-cache 已经使能,则需要使用“arm920t cp15 2 0”命令禁止 MMU和 D-cache。

init.bin 是位置无关的代码,所以无论是从 Nor Flash 启动,还是从 Nand Flash 启动,都可以将它下载到内部 RAM 去运行──不同启动方式下内部 RAM 的地址不同,Nor Flash 启动时,地址是 0x40000000;Nand Flash 启动时,地址是 0。

注意:有些版本的 OpenOCD 里路径名的斜杠要使用“/”,不能使用“\”。

启动 OpenOCD(参考图 2.16)、telnet 登录(参考图 2.17)后,执行以下命令下载、运行 init.bin:

  • ① 从 Nand Flash 启动
load_image init/init.bin 0x0 
resume 0x0
  • ② 从 Nor Flash 启动:
load_image init/init.bin 0x40000000
resume 0x40000000

这时,存储控制器已经初始化好,下面就可以把 u-boot 下载到 SDRAM 去了。

(2) 下载、运行 u-boot:

u-boot 的可执行文件为 E:\eclipse_projects\u-boot\u-boot.bin,接着在 telnet 界面执行以下命令,即可启动 u-boot:

halt 
load_image u-boot/u-boot.bin 0x33f80000 
resume 0x33f80000

然后,就可以在串口工具上看到 u-boot 的启动信息,如下:

U-Boot 1.1.6 (Sep 23 2008 - 02:50:03) 
DRAM: 64 MB 
Flash: 1 MB 
NAND: 64 MiB 
*** Warning - bad CRC, using default environment 
In: serial 
Out: serial
Err: serial 
Use these steps to program the image to flash: 
1. In OpenOCD 
 Run the 'halt' command to halt u-boot 
 Run the 'load_image <file> <address>' command to load file to SDRAM 
 Run the 'resume' command to resume u-boot 
2. In u-boot, use the flash commands to program the image to flash 
Or, use the tftp or nfs command to download file, and then program the flash. 
OpenJTAG>

现在,可以通过 u-boot 来烧写文件了,有两种方法将文件下载到单板内存中:

  • ① 通过 OpenOCD 的命令:
    这需要在 telnet 界面,执行以下 3 个命令:
halt // 暂停u-boot 
load_image <file> <address> // 将文件烧写到内存中(这个地址一般取0x30000000) 
resume // 恢复运行u-boot
  • ② 通过 u-boot 的网络命令:

可以使用 tftp 命令,或者 nfs 命令,这需要在 PC 上启动 TFTP 服务或者 NFS 服务。

当文件被下载到单板内存中后,就可以使用 u-boot 的各种 Flash 命令进行烧写了。图 2.25、图 2.26 是两个例子,分别使用上述两种下载方式,将 u-boot 本身烧写到 Nor Flash、Nand Flash上去

图 2.25 通过 OpenOCD 启动 u-boot、传输数据,通过 u-boot 烧写 Flash

图 2.26 通过 OpenOCD 启动 u-boot,通过 u-boot 下载、烧写 Flash

注意:

  • a. u-boot 的命令把所有的数字当作 16 进制,所以不管是否在数字前加前缀“0x”,这个数字都是 16 进制的。
  • b. 图 2.25、图 2.26 中,擦除 Flash 的长度、烧写的数据长度,这些数值都是根据要烧写的文件的长度确定的。u-boot.bin 的长度是 178704 字节,即 0x2BA10 字节,上面使用的长度都是 0x30000,一是为了与 Flash 的可擦除长度相配(16K 的整数倍),二是方便。

完成烧写之后,重启单板即可看到运行情况。

E:\eclipse_projects\u-boot\u-boot.bin 是经过改造的,它有如下特点:

  • a. 支持 S3C2410、S3C2440;
  • b. 可以从 Nor Flash 或 Nand Flash 启动;
  • c. 可以烧写 Nor Flash 和 Nand Flash;
  • d. 支持 CS8900 或 DM9000 网卡、USB 传输(通过 OpenOCD 下载、启动时,USB 功能不可用);
  • e. 支持烧写 jffs2、yaffs 文件系统映象文件
    注意:单板从 Nand Flash 启动时,无法操作 Nor Flash。

5 使用 OpenOCD 烧写小程序到内部 RAM,并运行、调试(S3C6410)

注意:S3C6410 的所有代码位于 e:\eclipse_projects\6410 目录下。S3C6410 的芯片手册里有这样一段话:

  • 如果想使用 oflash 直接烧写的话,需要把这个引脚设为高电平,为高电平时只能烧写不能调试;
  • 如果想使用 openocd 来烧写或调试的话,需要把这个引脚设为低电平。

S3C6410 有 8K 的内部 RAM,它的访问地址从 0x0C000000 开始;

当 S3C6410 设为 NAND启动时,还可以使用地址 0 来访问它。

无论何种启动方式,都可以使用 0x0C000000 来访问内部 RAM;使用 NAND 启动时,还可以使用 0 来访问。

当 DBGSEL 引脚为低电平时,可以通过 OpenOCD 直接把程序烧到内部 RAM 中、运行、调试。

注意:DBGSEL 引脚是高电平还是低电平,需要看 S3C6410 开发板的原理图。比如对于下图,DBGSEL 通过 R13 接到了 VDD_IO,而 R14 旁边的“NC”表示“没有接”,引脚就是高电平。

对于图 2.27 的情况,要想使用 openocd 来烧写/调试,就需要把 R13 焊下来,把 R14 补上去。

  • (1) 编译程序:
    以光盘上的 E:\eclipse_projects\6410\3th_leds_c 程序为例,先编译程序:在命令行进入文件源码所在目录,执行“make”命令,如图 2.28 所示。

  • (2) 下载、运行程序:

注意:程序 3th_leds_c 的链接地址为 0,它需要加载到 0 地址去运行,所以要先设为 NAND启动(NAND 加动时,才能使用 0 地址访问片内内存)。一般是通过拔码开关或是跳线设为NAND 启动,怎么设置跳线,要看开发板的使用说明。

先启动“OpenJTAG(GUI for OpenOCD)”,把“Work Dir”设为 E:\eclipse_projects\6410,然后点“Connect”,正常的界面如图 2.29 所示。

注意:如果打印出很多警告信息,先设为 SD 卡启动(不需要插 SD 卡),再点“Connect”,正常后直接带电拔到 NAND 启动。

然后点 telnet 按钮。在 telnet 界面,先执行“load_image 3th_leds_c\led.elf”加程序,它会根据 led.elf 里面的信息把可执行代码加载到地址为 0 的内存处,“load_image 3th_leds_c\led.bin 0x0”可以达到同样的效果;然后执行“resume 0x0”命令执行程序。如图 2.20 所示。

注意:有些版本的 OpenOCD 里路径名的斜杠要使用“/”,不能使用“\”。

这个程序是点亮 GPM0~GPM3 连接的 4 个 LED,如果你没看到灯在闪,那么可能是你的开发板的 LED 不是接到这 4 个引脚上,请修改程序。

注意:下载程序之前先使用“halt”命令暂停单板,才能下载代码如果使用“poll”命令发现单板的 MMU 或 D-cache 已经使能,则需要使用“arm mcr 15 0 1 0 0 0”、“step”两条命令禁止 MMU 和 D-cache。

  • (3) 简单的调试命令:
    运行 leds 程序后,可以使用“halt”命令暂停程序,使用“resume”命令恢复运行程序,使用 bp 命令设置断点,使用 rbp 命令删除断点。如图 2.31 所示。

程序在断点停下时,可以看到 LED 也停止闪烁,恢复运行时 LED 就再次变化、再次停止。

至于为什么在 0xac 处设置断点,主要是想在 leds.c 中写 GPMDA 寄存器来控制 LED 的代码处设置断点,如图 2.32 所示。

可以从反汇编 led.dis 中知道这段代码的地址在 0xac 处,如图 2.33 所示。

从反汇编代码确定程序功能,是件难度很高的事情,所以一般不直接操作 OpenOCD 来调试程序,而是通过其他工具来调试:

  • ③ 使用 arm-elf-gdb 调试器:可以指定在源文件的某行设置断点;
  • ④ 使用 Eclipse 来调试:可以直接在源文件中通过双击设置断点。

6 使用 oflash.exe 直接烧写 Nor/Nand Flash(S3C6410)

三星公司有一款并口烧写工具 sjf6440.exe,可以用来烧写若干种 Nor、Nand Flash,它的优点是使用简单,缺点是速度比较慢、支持的 FLASH 型号比较少,并且现在大多 PC 机已经没有并口了;

oflash.exe 是特别针对 OpenJTAG 编写的烧写工具,支持 s3c2410、s3c2440、s3c6410 开发板,支持几乎所有类型的 Nor、Nand Flash 烧写,速度快,使用方法类似sjf2410.exe、sjf2440.exe、sjf6410.exe。

S3C6410 的芯片手册里有这样一段话:

如果想使用 oflash 直接烧写的话,需要把这个引脚设为高电平,为高电平时只能烧写不能调试;如果想使用 openocd 来烧写或调试的话,需要把这个引脚设为低电平。

下面是一个烧写的例子:

烧写完后重新上电即可看到 LED 在闪。

oflash.exe 更详细的使用说明请参考光盘 Windows\tools\oflash 使用说明.TXT。

7 使用 OpenOCD 直接烧写 Nor/Nand Flash(S3C6410)

openocd 里有擦除、烧写 Flash 的命令,不过速度比较慢。对于比较小的程序,可以使用openocd 的命令进行烧写。

注意:要使用 openocd 需要把 S3C6410 的 DBGSEL 引脚设为低电平。

启动 OpenOCD(参考图 2.29)、telnet 登录(参考图 2.30)后,执行以下命令下载、运行 init.bin进行一些初始化:

halt 
arm mcr 15 0 1 0 0 0 // 关MMU 
step 
load_image init/init.bin 0x0c000000 // 下载程序到内部RAM 
resume 0x0c000000 // 运行 
halt

然后在 telnet 界面使用命令烧写。

以烧写 led.bin 为例,使用以下命令烧写 NAND Flash(注意:路径名使用“/”,不使用“\”):

nand probe 0 // 识别 
nand erase 0 0 0x20000 // 擦除128K
nand write 0 E:/eclipse_projects/6410/3th_leds_c/led.bin 0 // 把init.bin烧写到nand flash 0地址处

以烧写 led.bin 为例,使用以下命令烧写 NOR Flash(注意:路径名使用“/”,不使用“\”):

flash probe 0 // 识别 
flash erase_address 0 0x20000 // 擦除128K 
flash write_image E:/eclipse_projects/6410/3th_leds_c/led.bin 0 // 把init.bin烧写到nand flash 0地址处

8 使用 OpenOCD 下载 u-boot,通过 u-boot 烧写 Nor/Nand Flash(S3C6410)

通过 OpenOCD 可以快速地读写开发板的 DDR,那么可以把 u-boot 先放到 DDR 中,然后启动它,就可以使用 u-boot 来烧写 Nor/Nand Flash 了──u-boot 的功能及速度都比一般的烧写工具要强。

在 DDR 能被访问之前,必须初始化存储控制器,这可以通过下载一个特定的小程序到内部 RAM 中,并运行它,由它来进行初始化,这个程序在 E:\eclipse_projects\6410\init 目录下。

  • (1) 下载、运行初始化程序 init.bin:

注意:下载程序之前先使用“halt”命令暂停单板,才能下载代码;如果使用“poll”命令发现单板的 MMU 或 D-cache 已经使能,则需要使用“arm mcr 15 0 1 0 0 0”命令禁止MMU 和 D-cache。

init.bin 是位置无关的代码,所以无论 6410G 开发板以何种方式启动,都可以将它下载到内部 RAM 去运行──S3C6410 的内部 RAM 地址从 0x0C000000 开始

注意:有些版本的 OpenOCD 里路径名的斜杠要使用“/”,不能使用“\”。

启动 OpenOCD(参考图 2.29)、telnet 登录(参考图 2.30)后,执行以下命令下载、运行 init.bin:

halt 
arm mcr 15 0 1 0 0 0 // 关MMU 
step 
load_image init/init.bin 0x0c000000 // 下载程序到内部RAM 
resume 0x0c000000 // 运行 
halt

这时,DDR 已经初始化好,下面就可以把 u-boot 下载到 DDR 去了。

  • (2) 下载、运行 u-boot:
    u-boot 的可执行文件为 E:\eclipse_projects\6410\u-boot\u-boot.bin,接着在 telnet 界面执行以下命令,即可启动 u-boot:
halt 
load_image u-boot/u-boot.bin 0x57e00000 
resume 0x57e00000

然后,就可以在串口工具上看到 u-boot 的启动信息,如下:

U-Boot 1.1.6 (Jun 23 2011 - 13:04:31) for SMDK6410 
CPU: S3C6410@532MHz 
 Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) 
Board: SMDK6410
DRAM: 128 MB 
Flash: 0 kB 
NAND: 256 MB 
*** Warning - bad CRC or NAND, using default environment 
In: serial
Out: serial 
Err: serial 
Use these steps to program the image to flash: 
1. In OpenOCD 
 Run the 'halt' command to halt u-boot 
 Run the 'load_image <file> <address>' command to load file to SDRAM 
 Run the 'resume' command to resume u-boot 
2. In u-boot, use the flash commands to program the image to flash 
Or, use the tftp or nfs command to download file, and then program the flash. 
OpenJTAG #

现在,可以通过 u-boot 来烧写文件了,有两种方法将文件下载到单板内存中:

  • ① 通过 OpenOCD 的命令:
    这需要在 telnet 界面,执行以下 3 个命令:
halt // 暂停u-boot 
load_image <file> <address> // 将文件烧写到内存中(这个地址一般取0x50000000) 
resume // 恢复运行u-boot
  • ② 通过 u-boot 的网络命令:

可以使用 tftp 命令,或者 nfs 命令,这需要在 PC 上启动 TFTP 服务或者 NFS 服务。

当文件被下载到单板内存中后,就可以使用 u-boot 的各种 Flash 命令进行烧写了。图 2.35、图 2.36 是两个例子,分别使用上述两种下载方式,将 u-boot 本身烧写到 Nand Flash 上去。

注意:

a. u-boot 的命令把所有的数字当作 16 进制,所以不管是否在数字前加前缀“0x”,这个数字都是 16 进制的。

c. 图 2.35、图 2.36 中,擦除 Flash 的长度、烧写的数据长度,这些数值都是根据要烧写的文件的长度确定的。u-boot.bin 的长度是 173716 字节,即 0x2A694 字节,上面使用的长度都是 0x40000,一是为了与 Flash 的可擦除长度相配(128K 的整数倍),二是方便。

完成烧写之后,重启单板即可看到运行情况。

参考资料:

《Eclipse,OpenOCD,OpenJTAG教程》

目录
相关文章
|
监控 NoSQL
JLink + GDB 调试方法
本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。 调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图) 运行JLinkGDBServer 按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面 注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。
7418 46
|
7月前
|
NoSQL Linux Android开发
OPENJTAG调试学习(四):OpenJTAG 来烧写、调试 cortex M3
OPENJTAG调试学习(四):OpenJTAG 来烧写、调试 cortex M3
148 0
|
NoSQL IDE Linux
【Linux C】GCC编译 && GDB调试 从入门到放弃 (gcc调试选项详解、gdb调试、条件断点、远程调试、脚本化调试)(一)
阅读本文可能需要一些基础,比如:C语言基础、Linux基础操作、vim、防火墙等。篇幅有限,本文讲的“比较浅显”。 通过本文你将学会: gcc编译 gdb调试
|
NoSQL Linux 网络安全
【Linux C】GCC编译 && GDB调试 从入门到放弃 (gcc调试选项详解、gdb调试、条件断点、远程调试、脚本化调试)(二)
阅读本文可能需要一些基础,比如:C语言基础、Linux基础操作、vim、防火墙等。篇幅有限,本文讲的“比较浅显”。 通过本文你将学会: gcc编译 gdb调试
|
芯片 内存技术
如何用SEGGER工具烧写程序,烧写地址详解
如何用SEGGER工具烧写程序,烧写地址详解
337 0
如何用SEGGER工具烧写程序,烧写地址详解
|
算法 关系型数据库 芯片
MDK 用Jlink调试无法使用断点
MDK 用Jlink调试无法使用断点
776 0
MDK 用Jlink调试无法使用断点
程序的灵魂-调试 (附调试程序快捷键总结)
程序的灵魂-调试 (附调试程序快捷键总结)
219 0
程序的灵魂-调试 (附调试程序快捷键总结)
|
iOS开发 开发者
配合LLDB调试器进行iOS代码调试(一)
配合LLDB调试器进行iOS代码调试
193 0
配合LLDB调试器进行iOS代码调试(一)
|
前端开发 rax 网络协议
配合LLDB调试器进行iOS代码调试(二)
配合LLDB调试器进行iOS代码调试
270 0