休闲食品网站模板,网站没有备案怎么做淘宝客,国内c2c平台有哪些,富阳做网站【开源鸿蒙】调试OpenHarmony轻量系统QEMU RISC-V版本 一、准备工作1.1 编译OpenHarmony源码1.2 确认OHOS_Image已生成1.3 确认OHOS_Image文件是否有调试信息1.4 检查config.gni文件是否有-g编译选项 二、GDB调试2.1 启动QEMU模拟器2.2 启动GDB调试器2.3 连接QEMU模拟器2.4 使用… 【开源鸿蒙】调试OpenHarmony轻量系统QEMU RISC-V版本 一、准备工作1.1 编译OpenHarmony源码1.2 确认OHOS_Image已生成1.3 确认OHOS_Image文件是否有调试信息1.4 检查config.gni文件是否有-g编译选项 二、GDB调试2.1 启动QEMU模拟器2.2 启动GDB调试器2.3 连接QEMU模拟器2.4 使用GDB进行断点调试 三、问题解决3.1 找不到 ohos_config.json 四、参考链接 本文将介绍如何使用gdb调试OpenHarmony轻量系统的QEMU RISC-V版本对于想要研究OpenHarmony操作系统手边又没有实际开发板的朋友本文将会非常有帮助。
一、准备工作
前面几篇系列文章介绍了如何下载OpenHarmony 4.1 Release源代码以及如何编译OpenHarmony轻量系统的QEMU RISC-V版本对这些内容还不清楚的小伙伴可以移步前面几篇文章
如何下载OpenHarmony 4.1 Release源代码 链接【开源鸿蒙】下载 OpenHarmony 4.1 Release 源代码-CSDN博客 如何编译OpenHarmony轻量系统的QEMU RISC-V版本 链接 【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版-CSDN博客
1.1 编译OpenHarmony源码
上一篇文章介绍了如何为QEMU RISC-V虚拟平台构建OpenHarmony轻量系统。
构建完成后输出如下 1.2 确认OHOS_Image已生成
hb set选择qemu_riscv_mini_system_demo平台后hb build命令构建的输出将会生成到out/riscv32_virt/qemu_riscv_mini_system_demo 目录具体生成内容如下 其中OHOS_Image就是本文将要运行的RISC-V平台的OpenHarmony轻量系统ELF文件。
1.3 确认OHOS_Image文件是否有调试信息
使用gdb调试目标程序时目标程序最好带有调试信息这样方便查看函数名和代码行。
通过 file 命令查看 OHOS_Image文件是否代码调试信息如下图所示 输出带有with debug_info则表示带有调试信息。
1.4 检查config.gni文件是否有-g编译选项
gcc的-g选项可以生成带调试信息的二进制文件方便gdb调试时看到函数名和代码行。
如果前面的file命令的输出中没有 with debug_info则需要检查是否带有-g编译选项。
对于QEMU RISC-V平台查看如下文件 device/qemu/riscv32_virt/liteos_m/config.gni
检查其内容是否有如下代码 board_opt_flags [ -g ]
在最近更新的4.1 Release版本中该文件中默认以及有-g编译选项如果没有的话可以手动添加-g选项。
二、GDB调试
gdb是GNU调试器GNU Debugger这里不再过多介绍了。
2.1 启动QEMU模拟器
我们已经确定OHOS_Image文件带有调试信息接下来就可以启动QEMU模拟器并运行这个ELF文件了使用如下命令
./qemu-run -g执行上述命令后终端输出如下 此时先不要在终端进行操作等待后续的GDB调试器启动。
2.2 启动GDB调试器
另外打开一个终端窗口使用如下命令
# 跳转到源码目录
cd ~/ohos/openharmony# 启动gdb调试器
riscv32-unknown-elf-gdb out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image执行上述命令后终端输出如下 此时gdb调试器已经成功启动从终端的输出中可以看到gdb已经成功加载了符号信息。
2.3 连接QEMU模拟器
在刚刚启动的gdb会话中输入如下命令
target remote localhost:1234执行上述命令后gdb输出如下 此时gdb已经连接到另外一个终端的QEMU模拟器了。
2.4 使用GDB进行断点调试
在gdb调试器中我们输入命令
l main即可查看main函数开始处的代码 回车可以继续查看后面的代码这里不再展示。
使用如下命令添加断点
b main这个命令将会在main函数开始处添加一个断点。
添加完断点后执行如下命令
c这里的c表示继续用 continue 也可以。
执行完c命令后gdb输出如下 激动人心的时刻——已经运行到main函数并且在我们添加的断点暂停了。
接下来使用n命令进行Step Over调试 这边我们使用n走过了一行printf打印此时查看运行QEMU的终端可以看到成功打印了字符串 更多gdb调试命令可以参考 GDB常用调试命令 — C/C Note 1.0.0 文档 (c-cpp-note.readthedocs.io)
三、问题解决
3.1 找不到 ohos_config.json
如果执行qemu-run命令提示如下错误 【直接原因】因为qemu-run脚本找不到ohos_config.json文件。
【问题根因】OpenHarmony 4.1-Release版本中hb命令创建的ohos_config.json文件不再位于顶层而是位于out目录内。
【解决方法】顶层目录创建符号链接指向out/ohos_config.json执行命令
ln -s out/ohos_config.json四、参考链接
OpenHarmony官网 https://www.openharmony.cn/OpenHarmony编译形态整体说明 https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/quick-start/quickstart-appendix-compiledform.mdOpenHarmony代码仓 https://gitee.com/openharmony/OpenHarmony riscv32_virt说明https://gitee.com/openharmony/device_qemu/tree/HEAD/riscv32_virtGDB常用调试命令 — C/C Note 1.0.0 文档 (c-cpp-note.readthedocs.io)