让Delphi一次只运行一行

时间:2015-06-22 21:33:40

标签: delphi line execute

我想运行我的delphi程序,但我需要查看特定循环执行的次数。我记得在学校使用Delphi 7时我们曾经设置它,以便在运行时它一次只能运行1行而不是一次运行所有这些行。遗憾的是,在我的生活中,我不记得如何做到这一点。

如何将Delphi设置为一次只运行一行并要求您在运行下一行之前将其向前移动?

4 个答案:

答案 0 :(得分:9)

在调试器中运行程序。通常,您可以通过按 F9 来启动此操作,但这将使程序运行。相反,您可以使用 Step Over 操作,使用快捷键 F8 。然后,每次要跳过一行时,再次按 F8 。顾名思义,如果该行有一个函数调用,你将" step"通过那个电话。要进入函数,请使用 Step Into F7 。当您这样做时,调试器将移动到该函数的第一行。

如果您以步进模式启动程序,可能需要一段时间才能到达目标点。通过使用 F5 键设置断点,并通过运行到光标操作,快捷方式 F4

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

有关详细信息,请参阅文档:http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Debugging

答案 1 :(得分:5)

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

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

快捷键记录为here

答案 2 :(得分:3)

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

执行此操作的一种方法是在循环内的一条线上放置一个断点,该循环在每次执行时(不在某些条件块或另一个嵌套循环中)在调试模式下运行应用程序(F9键快捷方式)会导致程序一旦到达该断点就停止。

然后使用F9键将该断点移到下一个断点,并计算程序在该特定断点处停止的次数。

虽然上面的方法很容易设置,但如果你有很多迭代(几十个)的循环,它不是很友好,因为它可能需要你花一些时间手动计算每次迭代。更不用说你很容易误解自己了。

因此,为了避免上述问题,您可以要求调试器帮助您进行计数。你是怎么做到的?

分两步完成。

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

Breakpoint properties dialog

您感兴趣的属性是Pass count

通常,此属性用于在特定断点传递特定时间后中断程序。

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

然后下一步是在第一行添加额外的断点,这将在循环之后执行。

因此,您的设置现在应该在循环之后停止您的程序,并且您可以通过将鼠标光标移动到其上来评估第一个断点(循环内部的断点)的次数。

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

第二种方法使得循环迭代的计数变得更加容易,尤其是当您进行几十次甚至几百次循环迭代时。

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

因为调试器正在计算自程序启动以来断点传递的次数。因此,稍后再次进入循环意味着调试器将继续从上次停止的位置开始计数。

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

注意:如上所述重置断点传递计数器需要您进入一个循环迭代,因此返回的总循环迭代次数将减少一次(程序停止的循环迭代以重置计数器) )。

答案 3 :(得分:1)

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

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

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