如何通过gdb存根或服务器(概念上)处理SW断点(我假设客户端存根和服务器以相同的方式处理它们)? 我对裸机'感兴趣。 gdb存根/服务器运行的目标,断点和单步执行都使用软件中断。
我的实际问题:
当遇到断点时,如何运行存储的指令,以便可以重新安装断点'并且(保存的)机器状态(包括寄存器内容)从命中断点的那一刻起不会改变? =>断点何时重新安装?如何?在断点命中和进入命令解释器之间,还是在下一个步骤或连续命令中?
如何单步执行断点工作,以便原始的非断点指令被执行,断点在单步执行后仍然保留在那里?
[编辑] 忘了:文件" GDB Internals"似乎缺少那些信息 - 实际上是关于单一步进的整个子章节"算法"章。
[EDIT2] 啊,我似乎需要更强大的眼镜:' Internals' -manual说: "当用户说要继续时,GDB将恢复原始指令,单步,重新插入陷阱,然后继续。"
然而,单步跨越断点仍然是一个悬而未决的问题。答案 0 :(得分:1)
然而,单步跨越断点仍然是一个悬而未决的问题。
它的完成方式与continue
完全相同,除了最后一步(“并继续”)。那就是:
$ip
指向其中一个断点。continue
,next
,step
或stepi
命令。continue
但不适用于next
,step
或stepi
。stepi
,将控制权交还给用户(由于上面的步骤4,我们已经在下一条指令处)。对于next
,继续单步执行,直到我们到达源代码中的行,该行与上面步骤1中的行不同。