
こんにちは。
質問させてください。
先ほど海外の方が制作したC/C++のコードを読んでいたところ
__asm int 3
というコードを見つけました。
少し調べてみたところ0xccというコードを埋め込んでブレイクさせる命令ということはわかりました。
しかし使用用途がいまいちわかりません。
実際には下記のように実装されていました。
#ifdef _DEBUG
#define BreakIf( c ) if( c ){ __asm int 3 }
#else
#define BreakIf( c )
#endif
しかし、いろいろと考えてみたのですがassertとどう使い分ければいいのかよくわかりません。
assertの場合は引数が0の場合引っかかりますが、上記のBreakIfコードは非0の場合に引っかかるよ
うに実装されていました。
この__asm int 3命令は主にどのような場面で使用すべきなのでしょうか?
ご教授のほど、よろしくお願いします。
/*
Microsoft VisualStudio2008 academic edition
Intel Core i7 920 2.66Ghz
RAM:12GB
Windows7 64bit professional
*/
No.3ベストアンサー
- 回答日時:
assertはプログラムの挙動が正しくないときに異常を表明するもの。
それに対してint 3(デバッグブレーク命令)は強制的にデバッグブレークするもの。
つまりassertはバグがあるか無いかわかっていないときに、もし異常な状態になったら、それを知らせる。
それに対し、int 3はバグがあることがわかっているが、それがどこか厳密にはわからないとき、その付近を調べるためにデバッガで追えるようにする。
たとえばループの中にバグがいて1000回目にだけ異常になるような場合、ステップ実行で1000回ループをまわすのは無駄なので、ブレーク条件に1000回目のループであることを入れておく。
このような条件ブレークの機能はデバッガにもあるが、条件判定をデバッガ側で行うため、ブレークまで時間がかかることがある。そこでその条件判定を実行側で行うことによりブレークまでの時間を短縮する。
これはデバッグの手法なので、バグを取ったらint 3は削除しておく必要がある。
それに対して、assertはデバッグ後も残しておく。
No.2
- 回答日時:
int3の挙動が不明ですが、assertだと終了してしまうのに対して強制ブレークがかかるのだとすれば、デバッガでassert発生からトレースしたいときにやや便利かもしれません。
まぁ普段はassert使っておけば問題ないような気はします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PIC のプログラムについて ど...
-
For文の終了値を関数にしても問...
-
ループを途中で抜けたいのですが。
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
プログラムでの数字につく”f”の...
-
C言語で複数列のデータを1列の...
-
c言語で、繰り返し文の中で、0....
-
sscanfとscanfの違いがよくわか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
PAD図の書き方
-
入力した文字列から母音だけを...
-
入力した数値を倍々するプログラム
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
アルゴリズムです!四つの数字...
-
break文でループを一気に抜ける...
-
エクセルVBAで Do While (1)って?
-
モンテカルロシミュレーション...
-
このC#プログラムの1〜11を埋め...
-
プログラミングC言語についての...
-
C++ DirectX カーソルの移動処...
-
HEWのバグ?
-
ゲームオーバーのプログラム
-
プログラムで関数は使わない方...
-
Delphiで・・・
-
他言語で言うcontinue文
-
Excel VBAで年度をまたぐ期間の...
おすすめ情報