8

我正在使用 Delphi XE,并且我有一个包含主应用程序和 DUnit 测试应用程序的项目组。有时,我会去 DUnit 测试应用程序添加一些测试并运行现有的测试。

一些测试代码会生成由应用程序处理的异常,但会由 Delphi 调试器多次显示,因为我习惯于F9像使用标准应用程序一样使用快捷方式运行测试应用程序:在这种情况下,这不是很方便。

我知道无需调试即可运行的SHIFT++快捷方式,当我记得使用它时这很好,但我经常发现自己点击,然后发出咕噜声,然后关闭测试应用程序,然后点击CTRL++ 。多么浪费时间。F9F9SHIFTCTRLF9

所以我的问题是:有更好的方法吗?我可以定义一些设置或使用一些专家来使该特定应用程序默认运行而无需调试吗?当然,我不是唯一一个遇到这个问题的人。

提前致谢。

4

5 回答 5

5

不(至少直到 D2009)。无需调试即可运行是 IDE 的事情。编译器标志无济于事,因为它是挂钩 exe 的 IDE,而不是相反。唯一可以有这样一个选项的地方是在项目设置中。但是拥有它可能会使 IDE 有点混乱,因为 Run 和 Run without debug 之间的正常区别将被否决。然后你需要第三个选项,我猜是“运行”、“运行调试”和“运行而不调试”,其中简单的“运行”将从项目选项中获得提示。

于 2011-02-08T11:45:47.550 回答
2

Add the run-without-debugging icon to the toolbar. Your problem is you forget the hotkey, and click the icon. So remove the other icon, or move them both around, like this:enter image description here

The bigger your application grows, I find, the slower the debugger startup gets. I run without debugging about 99% of the time now, because the startup time of my app goes from 2 seconds, to 2 minutes, because it uses a lot of runtime packages, and every BPL load in the debugger comes at a huge hit to my productivity. So long, slow painful experience has re-educated me to ask myself "Do I really need to debug?". If I don't, I click the nice green icon (in XE) that replaces the exclamation mark icon in older versions. (A smart UI improvement I think.). In previous delphi versions, the green play button meant "run with debugging".

于 2011-02-08T14:06:01.853 回答
2

禁用“语言异常通知”。

禁用语言异常通知

于 2011-02-08T20:59:30.087 回答
0

我理解您的问题,但我个人认为选择更改F9.

您有一些测试用例预计会引发异常。(注意:我实际上是在考虑在给出错误输入时检查特定异常的测试。不是由应用程序“处理”的异常。)而且我同意在大多数情况下提醒这些是没有意义的。但是,其他测试用例中的异常将是我希望尽快收到警报的问题。

所以我首选的运行模式是通常会收到异常通知。并且在某些测试用例中具有显式代码,仅在将触发生产代码异常的测试上下文中显式禁用异常通知。

我有一种对此非常有效的技术。

在预期会引发异常的测试中,我编写了以下代码:

begin
  TIDEDebugTools.DisableBreakOnExceptions;
  try
    //Test code ...
  finally
    TIDEDebugTools.EnableBreakOnExceptions;
  end;
end;

我猜你想要这两种方法的源代码?:)

unit IDEDebugTools;

interface

type
  TIDEDebugTools = class(TObject)
  public
    class procedure DisableBreakOnExceptions;
    class procedure EnableBreakOnExceptions;
  end;

implementation

{ TIDEDebugTools }

class procedure TIDEDebugTools.DisableBreakOnExceptions;
begin

end;

class procedure TIDEDebugTools.EnableBreakOnExceptions;
begin

end;

end.

你问的其余部分在哪里?
没有——就是这样!

...但是您需要遵循一些说明:

  • 为每个方法添加一个断点。
  • 编辑断点属性。
  • 选择高级选项。
  • 关闭“中断”选项
  • 并为相应的方法打开“忽略后续异常”和“处理后续异常”选项。

这接近jpfollenius关于编译器指令选项的想法。它还解决了David对如何再次启用这些异常的担忧。您需要做的就是禁用断点以再次报告所有异常。


额外的想法:

你提到:

一些测试代码会生成由应用程序处理的异常。

如果您的应用程序正在处理所有这些异常,那么:

  • 您的测试是否足够本地化?如果您正在测试如此大的功能块,那么这些测试更像是系统测试 - 并且可能非常难以维护。
  • 您是否在主线业务处理中过多地使用异常?
  • 您的应用程序是否在执行大量不适当的异常吞咽?

基本上,在我看来,你的措辞暗示“一堆你不太关心的例外,因为它们已经被‘处理’了”。许多人错误地认为他们正在处理异常,而实际上他们只是在吞下它们并隐藏根本问题。

于 2014-08-18T22:30:17.600 回答
0

好样的。您可以使用不间断断点[McKeeth] [Jensen]来忽略您在测试中强制执行的异常。我知道的保存断点的唯一方法是启用工具 > 选项 > 自动保存 > 项目桌面。

于 2011-02-08T17:34:49.910 回答