VisualStudio 用の優れたフル機能の C++ アサート マクロを探しています。アサートを一度または常に無視できる機能、マクロが呼び出された場所 (マクロ コード内ではなく) を正確に中断できる機能、スタック トレースの取得などの機能があります。
掘り下げて書く前に、入手可能なものについて知っている人がいるかどうか尋ねてみようと思いました。
助言がありますか?
ありがとう!
VisualStudio 用の優れたフル機能の C++ アサート マクロを探しています。アサートを一度または常に無視できる機能、マクロが呼び出された場所 (マクロ コード内ではなく) を正確に中断できる機能、スタック トレースの取得などの機能があります。
掘り下げて書く前に、入手可能なものについて知っている人がいるかどうか尋ねてみようと思いました。
助言がありますか?
ありがとう!
マクロに関する適切な議論については、Charles Nicholson のブログを参照してください。assert
彼の解決策は、(失敗したアサーション ハンドラー内ではなく) エラーが発生したコード行でデバッガーを中断させ、ランタイム コストを発生させることなく、アサーションが無効になっているときに未使用の変数に関する警告が表示されないという問題も解決します。
これは、私が DDJ のために書いた記事へのリンクです。特に、あなたが探していることの多くを行うライブラリについて説明しています。私はマクロを使用するだけではありませんが、関数も DLL に実装しています。
http://www.ddj.com/architect/184406106
数年前の記事で、多くの追加を行いましたが、日常のコードで今でも非常に自由に使用しています。
_ASSERTEは、必要な場所で正確に中断しますが、他の基準を満たしていません。
_ASSERTE は、ファイル名と行番号とともに実際のアサーション テキストを表示するので便利です。これは、次のことができることを意味します。
_ASSERTE(bufLen > 0 && "bufLen needs to be greater than 0");
OpenOffice には、メッセージ ボックスにログを記録するオプションを持ついくつかのアサーション コードがあります。おそらくあなたが望むものではありませんが、参考になるでしょうか?
リリースしPPK_ASSERT
ました。ダイアログ ボックスは開きませんが、Windows ではデフォルト ハンドラーがコンソールを開き、そこでアサーション メッセージを読み、実行するアクションを決定します。
#include <pempek_assert.h>
int main()
{
float min = 0.0f;
float max = 1.0f;
float v = 2.0f;
PPK_ASSERT(v > min && v < max, "invalid value: %f, must be between %f and %f", v, min, max);
return 0;
}