为什么Simics执行bt/stack-trace命令时报错“No current debug object”?
问题原因分析
报错根本原因
bt、step-out这类命令属于上下文关联的调试命令,必须绑定明确的调试对象(通常是具体的CPU核心)才能执行。Simics不会自动将当前运行的仿真核心设为默认调试对象,未指定调试对象时就会抛出No current debug object报错。
为什么无法直接遍历%rbp生成栈回溯
- 首先Simics不知道你要读取哪一个CPU核心的寄存器:x86 QSP仿真平台默认支持多核心配置,每个核心都有独立的
%rbp、%rsp寄存器组,没有指定核心的情况下没有确定的寄存器取值来源。 - 其次Simics内置的
bt命令默认会结合符号表做栈帧解析,不是简单的寄存器遍历,也需要先确定对应的地址空间、指令集架构等上下文信息,这些都依赖绑定的调试对象提供。
为什么step-out也会报错
step-out的逻辑确实是运行到当前栈帧的ret指令,但它也需要明确的操作目标:
- 需要读取指定CPU的
%rip、%rsp确定当前栈帧范围 - 需要对指定CPU下发单步/断点操作
没有指定调试对象时,上述操作都没有执行主体,因此触发相同报错。
解决方案
- 执行
list-processors命令查看当前仿真环境中的所有CPU核心对象,x86 QSP平台的第一个核心通常名称为board.mb.cpu0.core[0][0] - 执行
pselect <核心名称>绑定调试对象,例如:
simics> pselect board.mb.cpu0.core[0][0]
- 绑定完成后即可正常执行
bt、step-out等调试命令。
内容的提问来源于stack exchange,提问作者user16853209
相关产品推荐
相关产品推荐

