8

Delphi XEを使用していて、メインアプリケーションとDUnitテストアプリケーションを含むプロジェクトグループがあります。時々、DUnitテストアプリケーションにアクセスして、いくつかのテストを追加し、既存のテストを実行します。

一部のテストコードは、アプリケーションによって処理される例外を生成しますが、標準アプリケーションの場合と同じようにショートカットを使用してテストアプリケーションを実行することに慣れているため、Delphiデバッガーによって複数回表示されF9ます。この場合、これはあまり便利ではありません。

SHIFTデバッグなしで実行するための++ショートカットについて知っていますCTRL。これを使用することを覚えていると、それは素晴らしいことですが、多くの場合、を押してからうめき声を上げ、テストアプリケーションを閉じてから、++を押します。なんて時間のロス。F9F9SHIFTCTRLF9

だから私の質問:より良い方法はありますか?いくつかの設定を定義したり、専門家を使用して、デフォルトでデバッグせずに特定のアプリケーションを実行したりできますか?確かに、この問題を抱えているのは私だけではありません。

前もって感謝します。

4

5 に答える 5

5

いいえ(少なくともD2009までは)。デバッグなしで実行するのはIDEのことです。exeをフックするのはIDEであり、その逆ではないため、comilerフラグは役に立ちません。このようなオプションを使用できる唯一の場所は、プロジェクト設定です。ただし、これを使用すると、デバッグなしの実行と実行の通常の区別が無効になるため、IDEが少し混乱する可能性があります。次に、「実行」、「デバッグを使用して実行」、「デバッグを使用せずに実行」という3番目のオプションが必要になります。ここで、単純な「実行」はプロジェクトオプションからヒントを得ます。

于 2011-02-08T11:45:47.550 に答える
2

デバッグなしの実行アイコンをツールバーに追加します。問題は、ホットキーを忘れて、アイコンをクリックすることです。したがって、次のように、他のアイコンを削除するか、両方を移動します。ここに画像の説明を入力してください

アプリケーションが大きくなるほど、デバッガーの起動が遅くなります。アプリの起動時間が2秒から2分になり、多くのランタイムパッケージを使用し、デバッガーでのすべてのBPLの読み込みが大きな打撃を受けるため、現在、デバッグせずに実行しています。私の生産性。とても長く、ゆっくりとした苦痛な経験は、「​​本当にデバッグする必要があるのか​​」と自問するように私を再教育しました。そうでない場合は、古いバージョンの感嘆符アイコンを置き換える素敵な緑色のアイコン(XE)をクリックします。(スマートUIの改善だと思います。)以前のdelphiバージョンでは、緑色の再生ボタンは「デバッグで実行」を意味していました。

于 2011-02-08T14:06:01.853 に答える
2

「言語の例外に関する通知」を無効にします。

言語例外に関する通知を無効にする

于 2011-02-08T20:59:30.087 に答える
0

そうですね。ブレークしないブレークポイント[McKeeth] [Jensen]を使用して、テストで強制している例外を無視できます。私が知っているブレークポイントを保存する唯一の方法は、[ツール]>[オプション]>[自動保存]>[プロジェクトデスクトップ]を有効にすることです。

于 2011-02-08T17:34:49.910 に答える
0

私はあなたの問題を理解していますが、個人的には、のデフォルトの動作を変更するオプションがあることはそれほど有用ではないと思いますF9

例外を発生させることが予想されるいくつかのテストケースがあります。(注:私は実際に、不正な入力が与えられたときに特定の例外をチェックするテストを考えています。例外はアプリケーションによって「処理」されません。)そして、ほとんどの状況でこれらに警告される意味がないことに同意します。ただし、他のテストケースの例外は、できるだけ早くアラートを受け取りたい問題です。

したがって、私の好みの実行モードは、通常、例外が通知されることです。また、特定のテストケースに、本番コードの例外をトリガーするテストのコンテキスト内でのみ例外通知を明示的に無効にする明示的なコードを用意します。

私はこれに非常にうまく機能するテクニックを持っています。

例外が発生すると予想されるテストでは、次のコードを記述します。

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

これら2つのメソッドのソースコードが必要だと思いますか?:)

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 に答える