如果目标是在不同的机器上编译的,断点在 Simics 2021.24 中不起作用
Breakpoint not working in Simics 2021.24 if the target was compiled in a different machine
我在Ubuntu 20.04 LTS编译了一个helloworld程序,我想在Simics中调试它,我在main
上设置了一个断点,但Simics不会中断。
我尝试在 QSP-x86 中编译它,那个二进制文件可以工作。
根据我的理解,无论二进制文件的原始构建环境是什么,Simics 都可能在 main
上中断。我不知道为什么它在我的情况下没有中断。
这是我的步骤:
第一步:在Ubuntu20.04
中编译helloworld
$ cat a.c
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
$ gcc -g a.c
第 2 步:将 a.out
复制到 Simics 项目根目录并将其上传到 QSP-x86 (firststeps.simics)
第 3 步:
simics> enable-debugger
simics> add-symbol-file a.out
simics> bp.source_location.break main
simics> run
running>
第 4 步:运行 a.out
来自模拟串口控制台
预期:应该触发 main
上的断点
但是得到:根本没有触发断点
我尝试用 relocation-address
禁用 ASLR 和 运行 add-symbol-file
,它有效。
西米克斯:
simics> add-symbol-file pie-main.elf relocation-address = 0x555555554000
simics> bp.source_location.break main
串行控制台:
# echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# ./pie-main
看起来这是 运行 在目标上的 Linux 进程中。要在用户级别调试软件,您需要启用 OS 感知,以便调试器可以跟踪该特定软件何时处于 运行。当 OS 感知处于活动状态时,ASLR 对于用户级进程应该无关紧要,因为代码使用的虚拟地址在任何情况下都是相同的,即使物理页面已移动。
类似的东西:
simics> enable-tracker
simics> board.software.enable-tracker
simics> add-symbol-file prog.elf context-query = "name='prog.elf'"
simics> bp.source_location.break main context-query = "name='prog.elf'"
simics> bp.list
simics> bp.show <<bp number>>
simics> board.serconsole.con.input "prog.elf\n"
simics> r
...
程序中运行 main 时应该停止。
simics> bt
simics> list
强制标记#IAmIntel
我在Ubuntu 20.04 LTS编译了一个helloworld程序,我想在Simics中调试它,我在main
上设置了一个断点,但Simics不会中断。
我尝试在 QSP-x86 中编译它,那个二进制文件可以工作。
根据我的理解,无论二进制文件的原始构建环境是什么,Simics 都可能在 main
上中断。我不知道为什么它在我的情况下没有中断。
这是我的步骤:
第一步:在Ubuntu20.04
中编译helloworld$ cat a.c
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
$ gcc -g a.c
第 2 步:将 a.out
复制到 Simics 项目根目录并将其上传到 QSP-x86 (firststeps.simics)
第 3 步:
simics> enable-debugger
simics> add-symbol-file a.out
simics> bp.source_location.break main
simics> run
running>
第 4 步:运行 a.out
来自模拟串口控制台
预期:应该触发 main
上的断点
但是得到:根本没有触发断点
我尝试用 relocation-address
禁用 ASLR 和 运行 add-symbol-file
,它有效。
西米克斯:
simics> add-symbol-file pie-main.elf relocation-address = 0x555555554000
simics> bp.source_location.break main
串行控制台:
# echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# ./pie-main
看起来这是 运行 在目标上的 Linux 进程中。要在用户级别调试软件,您需要启用 OS 感知,以便调试器可以跟踪该特定软件何时处于 运行。当 OS 感知处于活动状态时,ASLR 对于用户级进程应该无关紧要,因为代码使用的虚拟地址在任何情况下都是相同的,即使物理页面已移动。
类似的东西:
simics> enable-tracker
simics> board.software.enable-tracker
simics> add-symbol-file prog.elf context-query = "name='prog.elf'"
simics> bp.source_location.break main context-query = "name='prog.elf'"
simics> bp.list
simics> bp.show <<bp number>>
simics> board.serconsole.con.input "prog.elf\n"
simics> r
...
程序中运行 main 时应该停止。
simics> bt
simics> list
强制标记#IAmIntel