【发布时间】:2008-11-28 12:49:35
【问题描述】:
可以在中断服务例程 (ISR) 中使用断点吗?
【问题讨论】:
-
你的平台是什么?答案是,理论上——是的;实际上 - 取决于平台(d'oh!)
标签: debugging breakpoints interrupt isr
可以在中断服务例程 (ISR) 中使用断点吗?
【问题讨论】:
标签: debugging breakpoints interrupt isr
是 - 在模拟器中。
否则,不行。这很难实现,无论如何都是个坏主意。 ISR(通常)应该与硬件一起工作,当您在每条指令之间留出半秒的间隙时,硬件的行为很容易就大不相同。
改为设置某种日志记录系统。
ISR 还会从其他进程中不雅地“窃取” CPU,因此许多操作系统建议将 ISR 保持在极短的时间内,并且只执行严格必要的事情(例如处理任何紧急 硬件的东西,并安排一个可以正确处理事件的任务)。所以理论上,ISR 应该非常简单,不需要调试。
如果问题出在硬件行为上,请按照我的建议使用某种日志记录。如果硬件不介意指令之间的时间间隔过长,那么您可以在用户空间中编写大部分驱动程序 - 您可以在上面使用调试器!
【讨论】:
根据您的平台,您可以通过访问处理器的调试端口来执行此操作,通常使用 JTAG 接口。请记住,您正在彻底改变与该方法的计时有关的所有内容,因此您的调试会话可能毫无用处。但是话又说回来,许多错误都可以通过这种方式捕获。还要注意基于 MMU 的内存映射,因为 JTAG 调试器通常不会考虑它们。
【讨论】:
在 Windows 中,附加了kernel debugger,您确实可以在中断处理程序中放置断点。
【讨论】: