vc++でのブレークポイント – プログラミング – Home

vc++でのブレークポイント
 
通知
すべてクリア

vc++でのブレークポイント


たま
 たま
(@たま)
ゲスト
結合: 24年前
投稿: 50
Topic starter  

環境
windows2000
vc++6.0

上記環境で下記コードをF5で実行するとまず(1)に止まりますが、
次にF5を押すと(1)に止まらずそのままプログラムが終了してしまいます。
不思議な現象が起こります。なぜでしょうか??

#include<stdio.h>
void main()
{
int k=0;

for(k=0;k<8;) //<--ここにブレークポイント(F9)を貼る。(1)
{
k+=1;
}
}

ところが上記コードのこの部分を
for(k=0;k<8;)-->for(;k<8;)にすると次にF5を押したときも(1)に
ちゃんと止まってくれます。


引用解決済
トピックタグ
とり
 とり
(@とり)
ゲスト
結合: 22年前
投稿: 23
 

 とりです。たまさんとまったく同じ環境で試してみたところ、確かに現象が
発生することを確認しました。そこで、興味を持って調べてみたのですが、以
下の事が原因で違いが発生しているようです。

■毎回止まる場合(for(;k<8;)の時の混合モードの表示)
6: for(;k<8;) //<--ここにブレークポイント(F9)を貼る。(1)
0040102F cmp dword ptr [ebp-4],8 // ←ここにブレークポイントが設定され

00401033 jge main+30h (00401040)

■最初の一回しか止まらない場合(for(k=0;k<8;)の時の混合モードの表示)
6: for(k=0;k<8;) //<--ここにブレークポイント(F9)を貼る。(1)
0040102F mov dword ptr [ebp-4],0 // ←ここにブレークポイントが設定され

00401036 cmp dword ptr [ebp-4],8 // ←ここから下でループ
0040103A jge main+37h (00401047)

 上記のように「混合モード」で表示してみるとわかるのですが、ブレークポ
イントが実際に張られている位置が変化するのが原因かもしれません。

 結論からいうと、ループしているのは「cmp dword ptr [ebp-4],8」の部分
のようです。それに対して、「最初の一回しか止まらない場合」にブレークポ
イントが張られるのは「mov dword ptr [ebp-4],0」なので、ループの度に止
まらないようですね。


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

for(k=0;k<8;)

この場合は、k=0 にブレークポイントがかかり

for(;k<8;)

この場合は、k<8 にブレークポイントがかかるからだと思います

for(k=0;
k<8;)

こう書いて、2行目にブレークポイントを張れば、毎回止まります


返信引用
たま
 たま
(@たま)
ゲスト
結合: 24年前
投稿: 50
Topic starter  

たみあさんですが2行目にはっても、とまりませんでした。


返信引用
とり
 とり
(@とり)
ゲスト
結合: 22年前
投稿: 23
 

> たみあさんですが2行目にはっても、とまりませんでした。

 「あれ?」と思いつつ、とりあえず私の方で実験してみた限りではきちんと
止まるようでしたが…。ソースを変更した後リビルドされてみてもダメでしょ
うか?


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

k<8;)

の行にブレークポイント張ってますよね?

こちらでは毎回止まりますが。。。


返信引用
たま
 たま
(@たま)
ゲスト
結合: 24年前
投稿: 50
Topic starter  

何度やってみても止まりません。
混合モードでみても
0040102F mov dword ptr [ebp-4],0<--ここにブレークポイントがはって
ある
00401036 cmp dword ptr [ebp-4],8


返信引用
とり
 とり
(@とり)
ゲスト
結合: 22年前
投稿: 23
 

> 何度やってみても止まりません。

 おかしいですね。現時点で考えられる対策としては、以下のようなことくらい
です。優先度の高い順に列挙しますので、確認してみて頂けますか?

 1、ソースファイルと実行モジュールにずれがないか確認する。
 2、ブレークポイントを一旦解除して、もう一度正しい場所に設定する。
 3、一旦ワークスペースを閉じて、再び読み込み、上記と同様の手順を試みる。

 また、まったくブレークポイントで止まらないなら、誤ってリリースモードで
作成された実行モジュールを使っている可能性も考えられます。確認してみてく
ださい。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

Cでコンパイルした場合とC++でコンパイルした場合との違いみたいです。
Cでは止まらずC++だと止まります。
(WinXP SP1, VC++6 SP5)


返信引用
たま
 たま
(@たま)
ゲスト
結合: 24年前
投稿: 50
Topic starter  

nさんの言われたとおりでした。
今まで*.cをコンパイルしていましたが、*.cppにしたところ止まりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました