2

失敗したアサーションをユーザーに表示する必要性と、開発者が問題をデバッグするのに十分な情報を含む新しいマクロを定義するのは良いことですか。

ユーザーへのメッセージ、開発者のための最後の情報でユーザーがこのメッセージで何をすべきか

#define ASSERT(f) \
    do \
    { \
    if (!(f) && AfxAssertFailedLine(THIS_FILE, __LINE__)) \
        AfxDebugBreak(); \
    } while (0) \

使用するサンプルメッセージfn、

MessageBox(_T("Error in finding file."),_T("TITLE"),MB_ICONERROR);
4

5 に答える 5

4

メッセージ ボックスは、開発者向けの情報を表示してはなりません。開発者向けの情報はログ ファイルに保存する必要があり、ユーザーはファイルを開発者に送信するように求められます。

PS: あなたの質問は非常に短いです。

于 2009-12-01T11:09:37.577 に答える
3

エンドユーザーの観点から考えることがいくつかあります。

  • ターゲットオーディエンスは誰ですか? あなたの祖母がこのプログラムを使用している場合、これらのアサーションメッセージボックスは彼女を苛立たせる以上のことを成し遂げますか?
  • これらのアサーションはどのくらいの頻度で失敗しますか? 通常の使用の1週間の間に1つのアサーションは確かにそれをプログラムに保持することを正当化しますが、数時間はユーザーを苛立たせます。妥協点を測るのは明らかに非常に困難です。
  • プログラムに「アサーションを有効にする」設定を入れることを検討しましたか? そうすれば、技術志向の(そして役立つ)ユーザーがいる場合、アサーションを明示的に有効にして、問題が発生したときに通知することができます。また、一部のユーザーがアサーションとは何か、またはプログラムでポップアップが表示される理由がわからない場合は、アサーションを無効にして、プログラムを引き続き楽しく使用できます。うまくいけば、ポップアップに「アサーション失敗メッセージを表示しない」チェックボックスを入れることができます。

ユーザーにアサーションポップアップを強制することは明らかに悪い考えだと思いますが、警告を有効または無効にできるようにすることは良いアプローチです。

于 2009-11-27T14:53:34.843 に答える
1

この質問をした直後にSMART_ASSERT、Andrei Alexandrescu と John Torjo がEnhancing Assertionsで言及したことについて読みました。これは私にとって正しい候補のようですが、その記事のソースへのリンクが壊れています。SMART_ASSERT のソース コードを教えてください。 ?

于 2009-12-01T13:56:03.733 に答える
0

アプリケーションが成熟しているように見えるだけなので、ユーザーに実際のデバッグ情報を表示させません。

次に、通常の{}スコープの代わりにdo-whileループを使用しているのはなぜですか?

于 2009-12-03T21:35:11.820 に答える
0

すべてのプログラマーでない限り、内部をユーザーに公開しないでください。代わりに、ログ ファイルを使用し、それらのログを開発者に (自動的に) 送信するという提案と共にポップアップします。

于 2009-12-01T11:13:07.710 に答える