看起来 Simics Eclipse 可以设置条件断点,但我没有找到任何condition
带有break-*
命令的参数。是否可以使用 simics 命令设置中断条件?
另一个问题是如何使用 simics 命令设置动态 printf?
使用 gdb,我可以使用它来记录断点命中,我如何使用 simics 做同样的事情?
(gdb) b malloc
(gdb) commands
> silent
> printf "malloc hit"
> cont
> end
(gdb)
看起来 Simics Eclipse 可以设置条件断点,但我没有找到任何condition
带有break-*
命令的参数。是否可以使用 simics 命令设置中断条件?
另一个问题是如何使用 simics 命令设置动态 printf?
使用 gdb,我可以使用它来记录断点命中,我如何使用 simics 做同样的事情?
(gdb) b malloc
(gdb) commands
> silent
> printf "malloc hit"
> cont
> end
(gdb)
Simics 在内置断点命令中没有条件断点。如果您想做类似的事情,请编写一个等待断点的脚本分支,然后检查状态。这些命令是故意相当基本的。
在这种情况下,什么是“动态 printf”?
使用 Simics gdb-remote 将 gdb 调试器连接到 Simics 并使用它来调试目标软件可能更简单。
要查看所有断点命中,Simics 会倾向于在每次断点命中时写一条消息:
simics> bp.memory.break -x 0xffff0000 0x100000
Breakpoint 2: break on 'x' access to 0xffff_0000 len=1_048_576 in board.cell_context
simics> r
[board.cell_context] Breakpoint 2: board.cell_context 'x' access to v:0xfffffff0
simics> r
[board.cell_context] Breakpoint 2: board.cell_context 'x' access to v:0xfffffff1
simics> r
[board.cell_context] Breakpoint 2: board.cell_context 'x' access to v:0xfffffff2 len=2
如果您想对断点命中采取行动,请使用脚本来响应并打印您想要的任何内容。例如,像这样。如果一个脚本分支选择了断点,Simics 不会停止它的执行。
simics> script-branch {
....... while(TRUE) {
....... bp.wait-for-breakpoint 2
....... echo (ptime)
....... }
....... }
2
simics> r
"board.mb.cpu0.core[0][0]"
[["board.mb.cpu0.core[0][0]", 8, 8, 4e-09]]
"board.mb.cpu0.core[0][0]"
[["board.mb.cpu0.core[0][0]", 9, 9, 4.5e-09]]
"board.mb.cpu0.core[0][0]"