一次只获取 Delphi 到 运行 1 行

Getting Delphi to run only 1 line at a time

我想运行我的delphi程序,但我需要查看特定循环执行了多少次。我记得在学校使用 Delphi 7 时我们曾经设置它,以便在 运行ning 时它一次只会 运行 1 行而不是 运行 全部一次。不幸的是,我无法记住如何做到这一点。

如何将 Delphi 设置为一次仅 运行 一行,并要求您在 运行 下一行之前将其向前推进?

F7 将执行一行(并将进入子程序)。

F8 将执行一行(但不会进入子程序,因此实际上可以执行多行)。

记录了快捷键 here

运行调试器中的程序。通常您会通过按 F9 来启动它,但这将设置程序 运行。相反,您可以使用 Step Over 操作,快捷键 F8。然后每次你想跨过一行时,再次按 F8。顾名思义,如果该行有函数调用,您将 "step" 覆盖该调用。要进入函数,请使用 Step IntoF7。当您这样做时,调试器将移动到函数的第一行。

如果您以步进模式启动程序,您可能需要一段时间才能到达感兴趣的点。通过使用 F5 键设置 断点 并通过 运行 光标[=30] 可以更快地到达那里=]动作,快捷键F4.

所有这些操作都可以在菜单或工具栏上找到,但是使用鼠标逐步执行代码的速度非常慢。这就是为什么所有半途而废的开发人员在调试时都使用键盘快捷键的原因。它的工作效率更高,这在调试时非常重要。

更多信息请参考文档:http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Debugging

你说你需要知道某个循环执行了多少次

一种方法是在每次执行的循环内的其中一行上放置一个断点(而不是在某些条件块或另一个嵌套循环内)运行您的应用程序处于调试模式( F9 快捷键),这将导致您的程序在到达该断点后停止。

然后您使用 F9 键跨过该断点到下一个断点并计算您的程序在该特定断点处停止了多少次。


虽然上面的方法很容易设置,但如果你有很多迭代(几十次)的循环,它就不是很友好了,因为它可能需要相当长的时间来手动计算每次迭代。更何况你很容易算错自己。

所以为了避免上面提到的问题你可以请调试器帮你统计一下。你是怎么做到的?

分两步完成。

在第一步中,您像第一个示例一样在循环中放置一个断点。但是这次在你放置它之后你右击它并从弹出菜单中选择 Breakpoint Properties。这将打开断点属性对话框,您可以在其中定义影响到达断点时发生的情况的不同属性。

这里你感兴趣的属性是Pass count

通常这个 属性 用于在通过特定断点一定次数后中断您的程序。

但在我们的例子中,我们对停止程序不感兴趣,而是对计算通过次数感兴趣,因此您应该将其值设置为高于预期的循环迭代次数,这样断点就不会导致你的程序完全停止。

那么下一步就是在循环后执行的第一行添加额外的断点。

因此您的设置现在应该会在循环结束后立即停止您的程序,并且您可以通过将鼠标光标移到第一个断点(循环内的断点)上来评估它经过了多少次。

您会注意到传递次数显示为 Pass count: X of Y,其中 X 是断点已经传递的次数,Y 是您在断点属性中指定的传递次数。


第二种方法使循环迭代的计数变得更加容易,特别是当您有几十个甚至几百个循环迭代时。

但请记住,这种方法只能用于计算第一次使用循环时的循环迭代次数。为什么?

因为调试器正在计算自程序启动以来断点通过的次数。因此稍后再次进入循环将意味着调试器将从上次停止的地方继续计数。


但是,您可以通过将计数器设置为 0 并让您的程序在其上停止来强制调试器重置计数器。之后,您可以再次将断点 Pass count 属性 设置为更大的数字。

注意:像上面解释的那样重置断点通过计数器确实需要您进入一个循环迭代,因此返回的总循环迭代次数将减少一个(您的程序为了重置而停止的循环迭代柜台)。

在所有关于添加断点和单步执行代码的讨论中,我想提供另一种选择:使用探查器。

使用分析器(如 AQtime),您可以轻松找出程序中哪个函数或行的执行频率,而无需添加额外的变量或在调试器中单步执行代码。

如果您唯一感兴趣的信息是执行循环的次数,我认为这是最简洁的选择。