特定の変数(アドレス)にアクセスがある時のブレーク – プログラミング – Home

特定の変数(アドレス)にアクセスがある...
 
通知
すべてクリア

特定の変数(アドレス)にアクセスがある時のブレーク


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

はじめまして。
VC .NET2003を使用しているのですが、表題の特定の変数 or アドレスにプログラム側
からアクセス( リード or ライト )があったときに止めたいのですが、いまいちブレーク
ポイントのプロパティをいろいろいじってもわからなかったのですが、これってできる
のでしょうか?

どなたか知っている方がおりましたら、ご教授お願いします。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

いろいろいじってみたのですが、どうやっても無理でした。
で、MS のサイトで、こんなページを見つけました。

http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vsdebug/html/_asug_setting_breakpoints.asp

> データ ブレークポイントは、変数の値が変化したときに、プログラムを中断
> させます。データ ブレークポイントは、関数の一番上のスコープのグローバル変数
> またはローカル変数に設定できます。C/C++ だけに対応します。

だそうですが。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

# 一応、できた。VC .NET2003
こういうテストプログラムを作りました。
jの値が変更されたときに止まります。
//-----------
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0, j = 0;
printf(&j = %p\n, &j);
while (i < 100)
{
i++;
if (i % 2 == 0)
{
j++;
}
}
return 0;
}
//-------
実行前にi++の行でブレークポイントを設定しておきます。
実行後、ブレークされたときに、
ブレークポイントウィンドウ(Ctrl+Alt+B)を出し、
新規作成のデータタブで、変数の欄にはprintfで出力された
アドレスを書きます。
これで、i++の部分のブレークポイントを消して、F5を押していくと、
iの値が2ずつ変わっていくごとに、jの値は1ずつ変わっていくごとに
ブレークされます。

が、止まるところが何故かwhileループの最後、ループするところ。
なぜ?


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

# すみません、書き方が悪い
>これで、i++の部分のブレークポイントを消して、F5を押していくと、
>iの値が2ずつ変わっていくごとに、jの値は1ずつ変わっていくごとに
>ブレークされます。
つまり、whileループが2回まわるごとにブレークされます。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> が、止まるところが何故かwhileループの最後、ループするところ。
> なぜ?

デバッグビルドしていて、最適化が効いてないため、素直なマシン語を吐いているとし
て。

ループするところにはジャンプ命令があり、これは j の値が変化した後の最初の命令な
のですな。
Intel のアセンブリリファレンスの3巻に書いてありますが、データブレークポイント
例外がトラップされたとき、IP はその次の命令を指しているためだと思われます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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