• ベストアンサー

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

  • Visual Studioのローカルウィンドウについて

    Visual Studio 2008を使ってC++のフォームアプリケーションを作成しています。 デバッグする際に、ローカルウィンドウを使って変数の値を確認すると思うのですが、値が空白でなにも表示されていません。 ほかのプロジェクトでは、正しく動作しています。 同じような現象にあわれた方、なにか御存じの方がいらっしゃればアドバイスをよろしくお願いします。

  • linux 上での C言語開発のデバッグ環境

    linux 上で C言語を使った開発をするようになったのですが、みなさんは、デバッグなどはどうなさっているでしょうか?私は、Emacsは使うことが出来ます。 Windows では Visual C++ (.net) を使っていて、「ソース上でマウスのポインタを変数に合わせれば、変数の値を確認できる」など、デバッグが便利だったのですが、linux上ではどうするものでしょうか? ネットで調べると、emacs をエディタとして開発している人が多いみたいなので、どうしていらっしゃるのかなと思いました。

  • Visual StudioC#で、変数を見る機能

    Visual StudioC#には、作ったプログラムを実行しているときに変数がどんな値になっているのかを見る機能って無いのでしょうか? Microsoft Visual Studio 2010 Expressを使っています。 例えば、 ボタン1を押す→A=1代入 ボタン2を押す→B=2代入 ボタン3を押す→C=3代入 上のだと、今までだとテキストボックス3つに各変数の値を表示していました。でもいちいち全てをそんなデバッグするの面倒です・・・実行中に直接、Visual Studio上で変数の値を見ることってできないのでしょうか? よろしくお願いします。

  • Visual Studio リモートデバッグについて

    Visual StudioのPro/Teamはリモートデバッグができるとあるのですが、MSDNを見てもリモートデバッグが具体的にどういうものか理解できていません。 デバッグ対象はC++で書いたコードや.net C#で書いたコードです。 2台コンピューターを用意して一方のプログラムをデバッグしながら制御ができるということでいいのでしょうか? また、Virtual PC上のプログラムにアタッチするというようなことも可能なのでしょうか? 普通のデバッグと操作上や機能上の違いはあるのでしょうか? 普段Visual Studioでデバッグする時のようにステップ実行やアセンブラ表示、レジスタの様子、メモリーの様子、変数の様子など見れるのでしょうか?もし可能なら次買う時はProを検討したいのですが。 デバッグしている様子などサイトを探したのですが見つからずイメージができないので、詳しい方いましたら教えていただけると助かります。

  • Visual C++ 2010 Express: [デバッグなしで開始

    Visual C++ 2010 Express: [デバッグなしで開始] 実行時もコンソールが閉じる Visual C++ 2008 Expressでは、 [デバッグなしで開始](Ctrl + F5)を実行すると、 出現したコンソールが、キー入力を待つ状態になっていたのですが、 Visual C++ 2010 Expressでは、同じ操作では 実行後にコンソールが閉じてしまいます。 Visual C++ 2010 Expressでも、[デバッグなしで開始]を 実行した後に、コンソールを閉じなくする方法があるのでしょうか? C言語の勉強中です。 最近コンピュータを新しくしたので、 ついでにVisual C++ 2010 Expressをダウンロードしたのですが、 プログラムの実行が確認できなくて困っています。 よろしくお願いします。

  • 自動変数ウインドの表示方法

    .NETで開発を始めようとしています。 デバッグで使用する「自動変数」ウインドウを表示したいのですが、どうすればよいかわかりません。 ネットで、[自動変数] ウィンドウを表示するには [デバッグ] メニューの [ウィンドウ] をポイントし、[自動変数] をクリックします。デバッガは動作中であるか、中断モードである必要があります。 と書いてありました。 ですが、 [デバッグ] メニューの [ウィンドウ] には、「イミデイト」「ローカル」「呼び出し履歴」「出力」「ウオッチ」しかありません。 よろしくお願いします。

  • visual c++ のグローバル変数宣言について

    visual c++で、 例えば下記のようにグローバル変数宣言するが 下記プログラムの「FileMei1[0][n1] = 0;」のところでブレークをかけてプログラムを走らせると、ウォッチウィンドウで「FileMei1エラー: 識別子 'FileMei1' はスコープ外です」とでてきます。 グローバル変数宣言のやり方間違っているのでしょうか? namespace TestCpp { extern char FileMei1[300][100]={ 0 }; public void aa{ for(n1=0; n1 < 100 ; n1++) { FileMei1[0][n1] = 0; } }

  • visual C++でのグローバル変数の宣言

    visual C++でマスの色を読みとって、いろいろな処理を行うプログラムを作成中なのですが、グローバル変数として以下の宣言をしたときに、以下のエラーが出ます。 struct{ int r; int g; int b; }rgb[10][10]; //マス数は10×10までとする error C3183: マネージ型 'SOMsample::Form1' の中で名前のないクラス、構造体またはユニオンを定義することはできません。 これをbuilder5で書き込んだときはエラーが出なかったのですが、visual C++ではどう書けばいいのでしょうか? 回答よろしくお願いします。

  • Visual C# 2008 Express ・・ unsafeコードがうまくいかない

    Visual C# 2008 Expressを使っているのですが・・・ unsafeコードを書こうとするとうまくいきません。 ポインタの使い方でエラーになる等というより、 明らかに動作がおかしいです。 例えば・・・ 「新しいプロジェクト」で 「Windowsフォームアプリケーション」を選んで、 まっさらなウィンドウだけ出すアプリを作り、 (勿論、ポインタ操作なんてどこにもない) プロジェクトのプロパティで、 「ビルド」→「アンセーフコードの許可」をONにして、 リビルドすると・・・ デバッガ上では動作する(ウィンドウがでるだけ)のですが、 デバッグなしで実行をすると、ウィンドウも出ずに、 アプリケーションエラーになってしまいます。 何が問題なのでしょうか??

  • Visual C++ Express Edition でもprintf

    Visual C++ Express Edition でもprintfを使いたい 私は、Visual C++ 2008 Express Editionを使っています。  以前はVisual Studio 2005 Professionalを使っていました。 今まではプログラムを走らせている間の変数の変化を見るために、 printf関数を使って「出力」ウィンドウに数値を表示させていました。 Visual C++ 2008 Express Editionに変更してから、 同一のソースコードをコンパイル、実行しても printf文で記述した出力内容を「出力」ウィンドウに表示させることができません。 これは、Express Edition特有のものでしょうか? printfを使って変数を表示できる方法があれば教えてください。 よろしくお願いします。