問題タブ [assertions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
2672 参照

smalltalk - Smalltalk とアサーション

smalltalk + TDD + 「グッドプラクティス」を試してみると、ちょっと醜いブロックに遭遇しました:

GNU Smalltalk でアサーションを行うにはどうすればよいですか?

私はちょうど単純なifFalse: [Die]種類のものを探しています

0 投票する
2 に答える
1982 参照

c++ - VS2008 ではアサーション、VS2005 ではアサーション

VS2005 から VS2008 SP1 に切り替えた後、説明できない問題が見つかりました。
プログラムは、リリース モードとデバッグ モードの両方で VS2005 の下で正常に動作します。VS2008 では、デバッガーに入るとアサートが発生します。
プログラムを (デバッグ モードまたはリリース モードで) 実行すると、アサーションはまったく発生しません。

私はこれにほぼ2日を費やしましたが、何が間違っているのかわかりません。

プログラムの説明: アプリケーションのメイン ダイアログを作成するユーザー スレッド (CWinThread) を作成する MFC ダイアログ ベースのプログラムがあります。
ワーカー スレッドは無限にループし、毎秒メッセージをダイアログに投稿します。メッセージは gui スレッドで処理されます。

私のコードの一部:

GUI スレッドの InitInstance:

ワーカー スレッド:

ダイアログ メッセージ ハンドラは次のようになります。

これは VS2005 で問題なく動作します。しかし、VS2008では、ブレークポイントを置いてデバッグモードに入るとすぐに、アサーションが発生しました???
wincore.cpp 行 906

GUI スレッドを削除してダイアログを CWinApp スレッドに作成すると、問題は発生しなくなります。

誰にもアイデアはありますか?
私は何か間違ったことをしていますか?

ありがとうございました

0 投票する
9 に答える
1376 参照

assertions - ベルトとブレースのプログラミングは良い習慣ですか、それとも不必要な複雑さを導入しているだけですか?

ベルトとブレース (サスペンダー)アプローチをプログラミングに、特にデータ検証に使用することは良い習慣であるかどうか疑問に思っていました。これは、次の例から生じました。

フォームを作成していて、すべてのフィールドにリスナーを追加しました。これOKは、フォーム内のすべてのフィールドに有効な値がある場合にのみボタンが有効になることを意味します。OK次に、ボタンがクリックされたときに実行されるコードを書いていました。

私の悲観的な側面は、ベルトとブレースが誰にも害を及ぼすことはなく、フォームロジックにバグがある場合に備えてフォームを再度検証しても害はないと判断しました。

しかし、検証が失敗した場合に何を入力すればよいかわかりませんでした。私がこのようなことをすると:

次に、決して表示されるべきではないエラー メッセージを表示するコードを作成する必要があります。将来このコードを保守する人は、理論的には不要な対話について心配し、混乱する可能性があります。私が最後に望んでいるのは、なぜこの特定のダイアログが表示されないのか疑問に思っている人です。

スケールの反対側のオプションは次のとおりです。

率直に言って、私はそれを入力することさえ汚いと感じますが、おそらく私が見逃したそれを使用する正当な理由があります.

だから最終的に私は次のようになりました:

ただし、その欠点は、実行時にブレースが存在しないため、実際にはベルトとブレースではないため、コードにバグがある場合、フォームのズボンがそのまま落下することです。

だから余計な検証をするべきではないのかもしれませんが、それでも害はないと思っている部分があります。

同様の状況であなたが何をしているのかを聞くことに興味があります。

編集:質問は、フォームが有効なデータを返すことを保証するための最良の方法は何かを尋ねています。フォームの出力は、データベースなどに入る前に再度検証されると仮定します。)

0 投票する
16 に答える
21796 参照

c++ - リリース ビルドで assert() を使用するときの未使用変数の警告を回避する

assert() でローカル変数をチェックするという唯一の目的で、ローカル変数が使用されることがあります。

リリース ビルドでコードをコンパイルする場合、通常は assert() が無効になっているため、このコードは Result が設定されているが読み込まれないという警告を生成する場合があります。

考えられる回避策は -

しかし、それはあまりにも多くのタイピングを必要とし、目に優しくなく、条件が常にチェックされる原因になります (はい、コンパイラーはチェックを最適化するかもしれませんが、それでも)。

この assert() を、警告を発生させずに簡単に使用でき、assert() のセマンティクスを変更しないように表現する別の方法を探しています。

(このコード領域で #pragma を使用して警告を無効にすることはオプションではなく、警告レベルを下げて警告をなくすこともオプションではありません...)。

0 投票する
7 に答える
2607 参照

debugging - アサーティブ プログラミングの利点

私たちのコードにアサートを入れるポイントは何ですか? アサーティブ プログラミングの利点は何ですか?

たとえば、メッセージ変数をチェックして、ここで例外をスローできます。ここで assert を使用するのはなぜですか? それとも、 assert の利点を理解するのにこれは間違った例ですか?

0 投票する
10 に答える
45899 参照

c - C コンパイラのアサート - 実装方法は?

エラーの場合、実行時に失敗するのではなく、コンパイルを防ぐ「アサート」を実装したいと思います。

現在、このように定義されたものがあります。これはうまく機能しますが、バイナリのサイズが大きくなります。

サンプル コード (コンパイルに失敗します)。

コードを生成しないようにこれを実装するにはどうすればよいですか (生成されるバイナリのサイズを最小限に抑えるため)。

0 投票する
4 に答える
988 参照

assertions - 進行中のアサーション 4GL​​ の実装

Progress 4GL または WebSpeed を使用してアサーションを実装する最良の方法は何ですか?

0 投票する
4 に答える
4982 参照

c++ - ベクトル コードがアサートされるのはなぜですか? とにかくアサートとは何ですか?

「アサート」とは正確には何ですか。より具体的には、エラーを取り除くにはどうすればよいですか。データ メンバー int x を持つクラスへのポインターのベクトルを作成し、次のようにします。

プログラムを実行すると、x が maxx よりも大きくなるまでエラーは発生せず、.erase() を使用すると、次のエラーが発生します。

デバッグ アサーションに失敗しました!

プログラム: ...My Documents\O.exe ファイル: ...include\vector 行: 116

式: ("this->_Has_container()",0)

プログラムがどのようにアサーション エラーを引き起こすかについては、アサートに関する Visual C++ のドキュメントを参照してください。

(アプリケーションをデバッグするには、[再試行] を押します)

[中止][再試行][無視]

また、cout を使用しようとすると、次のようになります。

次のエラーが表示されます。

デバッグ アサーションに失敗しました!

プログラム: ...My Documents\O.exe ファイル: ...include\vector 行: 98

式: ベクトル反復子は deferencable ではありません

プログラムがどのようにアサーション エラーを引き起こすかについては、アサートに関する Visual C++ のドキュメントを参照してください。

(アプリケーションをデバッグするには、[再試行] を押します)

[中止][再試行][無視]

ベクター内のデータを使用できない理由と、それを修正する方法を教えてください。

また、 antiviral_data は、単一の要素を持つポインターのベクトルです。

それが役立つ場合。

0 投票する
3 に答える
1976 参照

javascript - javascript で Selenium テストを強制的に失敗させる

js コードで Selenium テストを強制的に失敗させる方法はありますか? (おそらく悪い)例として、次の場合:

jsコードがtrueまたはfalseを返したかどうかに応じて、「runScript」コマンドを失敗させる方法はありますか? (例が他の Selenium コマンドで使用できることは知っていますが、より一般的な解決策が必要でした。)

Selenium を拡張して別のコマンドを追加する方法を学ぶ必要がありますか?

私はSeleniumにも比較的慣れていないので、これはSelenium-rcを使用することで解決しますか?