こんにちは。
質問させてください。
先ほど海外の方が制作した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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
break文でループを一気に抜ける...
-
if文を使わずに奇数・偶数を判断
-
PAD図の書き方
-
for文while文の無限ループの違...
-
C言語forループが完結した場合...
-
桁数を求めるプログラム。
-
アルゴリズムです!四つの数字...
-
C言語 キーボードで入力された...
-
階層型ニューラルネットに準ニ...
-
IF文での条件の書き方について(...
-
While文の終わりにセミコロンが...
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
正負を反転させて出力するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
エクセルでC言語のfor文と同じ...
-
Excel VBAで年度をまたぐ期間の...
-
For文の終了値を関数にしても問...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
PAD図の書き方
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
C言語のプログラムみてください...
-
ループの特定入力終了
-
COBOLのEVALUATE文
-
for文while文の無限ループの違...
おすすめ情報