如何使用ozone调试elf文件?
首先我们知道elf是由GCC编译器生成,我们首先在linux下make生成elf文件,没报错就是编译成功。
然后打开ozone,前面步骤个axf一样操作
下一步,我们先随便在一个地方保存工程,这样才能进入.jdebug文件中编辑、
现在肯定是打不开的,但是我们可以注意到,elf文件中有他自己在Linux先的保存位置,就是因为这个位置和现实中的位置对应不上导致的。
我们这一步打开编译文件
然后修改路径,这样就搞定了
解释下原理,
linux环境可以根据起始查找,但是我们的ozone是在windows下的,不是home起始,他也不知道home在哪,需要前面更多的起始路径
Project.AddPathSubstitute 里面第一个地址和后面地址有公共文件夹,这样才能完成映射
他就是根据第二个地址和第一个地址共同的文件夹来合成一个最开头的文件夹,然后根据这里的路径来寻找本地文件
例子一:
elf文件的路径保存为:/home/action/STM32F407/boot/main.c
我们实际保存文件路径为C:/Users/pipig/Documents/WeChat Files/wxid_o83ttp2a6xyg22/FileStorage/File/2025-07/STM32F407/boot/boot.elf
我们需要这么改:
void OnProjectLoad (void) {
//
// Dialog-generated settings
//
Project.AddPathSubstitute ("/home/action/STM32F407/", "C:/Users/pipig/Documents/WeChat Files/wxid_o83ttp2a6xyg22/FileStorage/File/2025-07/STM32F407/");
Project.AddPathSubstitute ("c:/users/pipig/desktop", "$(ProjectDir)");
Project.SetDevice ("STM32F407VE");
Project.SetHostIF ("USB", "");
Project.SetTargetIF ("SWD");
Project.SetTIFSpeed ("4 MHz");
Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M4F.svd");
Project.AddSvdFile ("$(InstallDir)/Config/Peripherals/STM32F407IG.svd");
//
// User settings
//
File.Open ("C:/Users/pipig/Documents/WeChat Files/wxid_o83ttp2a6xyg22/FileStorage/File/2025-07/STM32F407/boot/boot.elf");
}
保证两个参数最后为相同地址,这样ozone就会拥有windows下文件的前缀地址。
例子二:
elf文件的路径保存为:/home/wsl/stm32f4_boot/boot/main.c
我们实际保存文件路径为://wsl.localhost/Ubuntu-22.04/home/wsl/stm32f4_boot/output/xcplus_boot/boot.elf
我们需要这么改:
void OnProjectLoad (void) {
//
// Dialog-generated settings
//
Project.AddPathSubstitute ("/home/wsl/stm32f4_boot/", "//wsl.localhost/Ubuntu-22.04/home/wsl/stm32f4_boot/");
Project.AddPathSubstitute ("c:/users/pipig/desktop", "$(ProjectDir)");
Project.SetDevice ("STM32F407VE");
Project.SetHostIF ("USB", "");
Project.SetTargetIF ("SWD");
Project.SetTIFSpeed ("4 MHz");
Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M4F.svd");
Project.AddSvdFile ("$(InstallDir)/Config/Peripherals/STM32F407IG.svd");
//
// User settings
//
File.Open ("//wsl.localhost/Ubuntu-22.04/home/wsl/stm32f4_boot/output/xcplus_boot/boot.elf");
}
特例:有些可能需要elf同层文件夹中又bin文件才能映射,如果以上无法解决,可以在elf文件夹下生成bin文件试试