• ベストアンサー

Visual C++6.0 デバッグ中にグローバル変数を書き換えたい

こんにちは。 Visual C++6.0 のデバッグ中に、ローカル変数を 変数ウィンドウに書き込んで、値を変更して動作確認を 行っているのですが、グローバル変数(たとえばerrnoなど)を、同様に変数ウィンドウに書き込むと、「CXX0017: Error: シンボル "errno"が見つかりません」と表示されてしまいます。errnoをローカル変数のようにデバッグ中に書き換えることはできないのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

errnoは多分だめかと。 errnoはグローバル変数ということになっていますが、errnoの実装は最近は関数であることが多いためです。 で、#defeineでマクロ定義されている場合も、そのままではだめで、元の変数の名前を指定する必要があります。 そういう特殊なもの意外でしたら、ローカル変数と同じ方法でOKです。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 errnoの定義位置を参照したところ、 #define errno (*_errno()) となっていました。 よくわかりました。どうもありがとうございました。

その他の回答 (2)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

#1の方の回答にあるように、errnoはグローバル変数とは限りません。 includeファイルを調べてみればわかりますが、 #define errno (*_errno()) と定義されている部分があります。 正確にはVC6だとライブラリがシングルスレッドだとerrnoというグローバル変数になりますが、 マルチスレッドの場合errnoがスレッド毎に独立でないと問題が出るため、上記の設定が有効になるようです。 もし、シングルスレッドで構わないのであれば、プロジェクトの設定 >> C/C++ >> コード生成で使用するライブラリにシングルスレッドかシングルスレッド デバッグを使えばグローバル変数として使えます。 但し、意味がわからない、シングルスレッドでも構わないかどうか判断できない場合は変えないほうが無難でしょう。 マルチスレッドライブラリでも_errnoの戻り値を調べてアドレス指定で参照、変更すれば可能です。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 errnoの定義位置を参照したところ、 #define errno (*_errno()) となっていました。 よくわかりました。どうもありがとうございました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

手元にVC++6.0が無くて確認できませんが、可能であったハズです。 Hello World!のような簡単なプログラムで試してみては? 書き換えできない原因で思いつくのは、グローバル変数を宣言しているソースにデバッグ情報が無いとか。 TRACE文などで&errnoを表示して該当アドレスを直に書き換えてみるとか…。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 errnoの定義位置を参照したところ、 #define errno (*_errno()) となっていました。 よくわかりました。どうもありがとうございました。

関連するQ&A