2009-06-11 8 views
3

私は、VisualStudio用の完全な機能を備えたC++アサートマクロを探しています。マクロが呼び出される場所(マクロコード内ではない)とスタックトレースを取得する場所を正確に壊すことができるように、アサートを一度も無視することができるような機能を備えています。完全に特化したC++アサートダイアログ?

私がダウンして書き留める前に、誰かが利用可能なものを知っているかどうかを尋ねると思った。

提案がありますか?

ありがとうございます!

+1

プラットフォーム? (フィラー=> 15 charのコメント) – laalto

+0

Windows/VisualStudio – djcouchycouch

+0

"マクロが呼び出される場所を正確に壊すことができます(マクロコード内ではない)"これで幸いです。行番号とファイル名の文字列を生成しながらこれを行う方法が見つかった場合、私はそれを見たいと思っています!文字列を処理するためにマクロを使用すると、私は決して道を見つけることができませんでした。 –

答えて

8

assertマクロの良い議論のためのCharles Nicholson's blogを参照してください。彼のソリューションは、エラーの発生したコードラインで(そして失敗したアサーションハンドラの内部ではなく)デバッガを破壊し、ランタイムコストを発生させることなくアサーションを無効にしたときに未使用の変数に関する警告を受け取らないという問題も解決します。

+0

私のために働く!記事は本当によく書かれています。コードには独自のハンドラを設定する方法もありますので、ここでオプション付きのダイアログボックスを追加します。 – djcouchycouch

0

OpenOffice has some assertion codeメッセージボックスにログオンするオプションがあります。おそらくあなたが望むものではないでしょうが、多分教授的なものでしょうか?

+0

こんにちはジョン!私は私の元の質問でプラットフォームを指定していないことに気付きました。だから私はそれを更新しました。 – djcouchycouch

1

ここに、私がDDJのために書いた記事へのリンクがあります。この記事には、とりわけ、あなたが探しているものの多くを説明するライブラリが記載されています。私はマクロを使用するだけではありませんが、関数をDLLに実装しています。

http://www.ddj.com/architect/184406106

数年前からの記事と、私は多くの追加を行っているが、私はまだ私の日常のコードで非常に自由にそれを使用。

0

_ASSERTEは、あなたが望む場所で正確に壊れますが、あなたの他の基準を満たしていません。

_ASSERTEは、実際のアサーションテキストをファイル名と行番号とともに表示するので便利です。これは、あなたがこれを行うことができます意味:

_ASSERTE(bufLen > 0 && "bufLen needs to be greater than 0"); 
0

私は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; 
}