有时在调试时,特别是在捕获异常并通过调用析构函数跟踪时,Delphi会逐步执行大量的汇编代码。命中Shift + F8似乎会造成混乱。
我可以告诉调试器自动跳过汇编代码吗?
答案 0 :(得分:6)
根据我的经验,绝大多数此类汇编代码都是VCL或RTL单元。
如果使用“调试.dcu ” 禁用 进行编译,则调试器将不会单步执行此代码。但是,它也不会逐步执行任何其他VCL / RTL代码 - 汇编程序或 Pascal。假设您为项目启用了调试信息选项, 将 仍然会逐步执行任何不属于VCL / RTL的代码。
关闭VCL / RTL调试单元是否会调试任何特定问题,您可能更容易或更难,当然取决于您的具体情况,但通常VCL / RTL代码内部发生的事情几乎没有什么影响,除非直到你已经消除了自己代码中出现错误的可能性,然后需要调查VCL / RTL本身的潜在错误。
对于我自己,我将“调试.dcus ”关闭,除非我需要它们。
您的里程可能会有所不同。
答案 1 :(得分:4)
如果看到汇编程序代码,则可能位于 Alt-F2 CPU视图中。只需关闭CPU视图(旧Delphi上的转义键,或关闭其标签),然后您将继续使用pascal源代码(例如按F7或F8)。
如果你看到.pas文件中间的汇编代码(在asm ... end
块中),那么你可以尝试到它的末尾(end
级别)并按F4(换班F8是错误的)。但请注意,它可能不会退出end
,而是退出内部ret
汇编代码。所以我的个人建议是,如果您不了解汇编程序,则显示调用堆栈(此窗口显示将您带到当前程序位置的函数调用以及传递给每个函数调用的参数)并双击父调用者。这将永远是安全的。
有关调试的其他信息,例如this article
答案 2 :(得分:0)
您可以使用{$ D-}指令关闭代码块的调试。我认为这可以让你实现你想要的目标。
另外 - 在汇编代码中不要使用shift F8,我相信它会导致各种麻烦 - 最好将光标放在块之后,将F4放到那个位置。
答案 3 :(得分:0)