You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Simics 2021.24 异机编译目标程序设置断点无法触发问题

Simics下外部编译程序main断点不触发的原因及解决方案

问题原因

  • PIE编译导致地址不匹配:Ubuntu 20.04 默认gcc编译开启了*位置无关可执行文件(PIE)*特性,生成的a.out无固定加载基地址,运行时会被随机映射到虚拟地址空间。直接执行add-symbol-file a.out时,Simics会用二进制内置的段偏移作为绝对虚拟地址计算断点位置,和实际运行时的加载地址完全不匹配,断点设置到了无效地址,因此无法触发。而QSP-x86环境内的gcc默认通常关闭PIE,生成的二进制地址固定,符号地址与运行时地址一致,断点可以正常命中。
  • 未绑定用户进程调试上下文:Simics默认调试上下文是全局的,未区分内核地址空间和特定用户进程的地址空间,若没有绑定a.out对应的进程上下文,即使地址正确,也可能因为地址空间切换无法命中断点。

解决方案

方案1:编译时关闭PIE(最简方案)

编译程序时添加禁用PIE的参数,生成固定加载地址的二进制:

gcc -g -no-pie -fno-pie a.c

之后按原有步骤操作即可正常命中main函数断点。

方案2:动态匹配程序加载地址(无需修改编译参数)

如果需要调试PIE二进制,可通过进程跟踪功能在程序启动后再加载符号下断点:

  1. 开启Simics软件跟踪功能,设置程序启动断点:
simics> enable-debugger
simics> enable-software-tracker
simics> bp.process.start -binary a.out
simics> run
  1. 模拟控制台中运行a.out,Simics会在程序启动时自动暂停,此时加载符号并下断点:
simics> add-symbol-file a.out
simics> bp.source_location.break main
simics> continue

内容的提问来源于stack exchange,提问作者YKG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:45:05