VisualC++5.0で、CGIのモジュールを作成してます。
これからで出来上がったプログラムのテストを行おうとして気づいた点があるのですが...
この処理の中では、送信されてきたパラメータを解析しようと、
環境変数の"CONTENT_LENGTH"や"QUERY_STRING"を取得する処理をやっているのですが、
実際にVC++5.0のデバッガを動かしてみると、上の環境変数が設定されてない(当たり前ですが...)
ために、null値しかこなくデバッグできずにいます。
VC++5.0のデバッグ機能で上の環境変数を設定しておきたいのですが、
何か良い方法はご存知ないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

そのソースでローカルに getenv() を再定義してしまう。


例えば、

static char* getenv(const char* name)
{
  if (strcmp(name, "QUERY_STRING") == 0) {
    return "a=aaa&b=bbb&c=ccc";
  } else if (...) {
    ...
  }
}

... 以下、実際に getenv() を呼び出している部分。


デバッグの最中に環境変数を変更する必要が無いのであれば、
手で環境変数を設定してから Developer Studio を起動する
という手もありますが...
    • good
    • 0

VC++5.0を使ったことがないのでよくわかりませんが、


プロジェクトの設定のデバックでプログラムの引数と
いうのであるのでそこで環境変数の値を設定してあげるとできると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVC++5.0とVC++6.0の違いは?

何がどう変わったんでしょうか?
なんとなく使っているだけなのでぜんぜんわかりません。

簡単にんでいいんで思いつくことを書いてもらえるだけでもうれしいです。


よろしくお願いいたします。

Aベストアンサー

MFCのバージョンが違います。MFCのリファレンスを見れば6で増えた機能が分かります。

例えばブラウザを簡単に作れるCHtmlViewは6でないと使えません。

QVC++2010のデバッグ中の変数表示について

私はいま、高校の課題研究でvc++2010でソフトの製作をしています。

原因のわからないエラーの理由を探るため、よく理解もしていないデバックのブレークポイントを駆使して変数の中身を見て回っているのですが、時折「自動変数」の欄にも「ローカル変数」の欄にも表示されない変数があります。

あれは、どういった理由で表示されないのでしょうか。

ソースすべては長いので載せませんが、問題の部分だけ載せておきます。

char *p;
char *result;
p = (char*)System::Runtime::InteropServices::Marshal:: StringToHGlobalAnsi(data[i]).ToPointer();

//Mecabインスタンスの作成
MeCab::Tagger *tagger = MeCab::createTagger ("");
result = (char*)tagger->parse(p); //←形態素解析されたデータを格納しているのですが、エラーが起こるような処理ではないと思います。
delete tagger;

System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(p));
String^ SResult = gcnew String(result); //←ここで「ハンドルされていない例外」が入り、デバックが中断されます
MessageBox::Show(SResult);


resultの中身を見たいのですが、表示されません。
ソースのコメント分のあたりにブレークポイントを入れたときには、*pに正常に値が入っていることが確認できました。

例外が発生したときのメッセージウィンドウの表記
「'System.AccessViolationException' のハンドルされていない例外が guiapp.exe で発生しました。

追加情報: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」


よくばりですが、例外が発生した原因についても気が付くことがありましたら指摘してください。

わかりづらい文章で申し訳ないですが、よろしくお願いします。

私はいま、高校の課題研究でvc++2010でソフトの製作をしています。

原因のわからないエラーの理由を探るため、よく理解もしていないデバックのブレークポイントを駆使して変数の中身を見て回っているのですが、時折「自動変数」の欄にも「ローカル変数」の欄にも表示されない変数があります。

あれは、どういった理由で表示されないのでしょうか。

ソースすべては長いので載せませんが、問題の部分だけ載せておきます。

char *p;
char *result;
p = (char*)System::Runtime::InteropServices::Marshal:: Strin...続きを読む

Aベストアンサー

result = (char*)tagger->parse(p);
delete tagger; ★

taggerがdeleteされたので、そこから返された
resultが指している空間も無効になったと
思います。それで、中身も見えないし、使えば
エラーになるのでしょう。
MessageBoxの後までtaggerをdeleteしない
ようにすれば解決するのでは?

QWinXPProにVC++6.0をインストールした際のJITデバッガ更新について

WindowsXPProにVC++6.0をインストールしました。

最後に、メッセージボックスでJITデバッガを更新しますか?という質問がでたので、「はい」を押してしまいました。。

その後、ネットでしらべたところ、何かをインストールする時に「デバッガが見つかりませんでした。 登録されたJITデバッガを使用できません」などの文章がみつかり、ちょっと怖くなってしまいました。

上記の例は、私の場合と直接関係あるのかないのかわかりませんが、これ以降、大丈夫でしょうか?なにか注意点とかあれば教えてください。よろしくお願いします。

Aベストアンサー

通常アプリケーションがエラーを起こすと「ご迷惑を
おかけして申し訳ありません」等と書かれたアラートが出て「マイクロソフトにエラー情報を通知する」などの画面が出ます。
JITデバッカを入れ替えるとアプリケーションがエラーを起こした時にVisualStudio(VC++)が起動してエラーを起こしたアプリケーションのデバックを行う状態になります。
自分で作成したアプリケーション以外は(ソースがありませんので)実際にはデバック出来ませんしVC++以外で作成されていれば「登録されたJITデバッガを使用できません」と言うことになります。
アプリケーションがエラーを起こしたときにVC++が立ち上がって鬱陶しい事はあるかもしれませんが害はありません。

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

QVC++のデバッグ方法

いつもお世話になっています。
今回はVC++6.0でのデバッグについてお聞きしたいです。

デバッグをする際、たとえば
if (i > 1)
{ 処理 }
という条件があったとして、環境が整っていないなどの理由で
条件を満たせないけど、処理の確認はしたい時、
デバッグであったらできるのでしょうか?

要するにデバッグのときだけ擬似的?(一時的?)にif文を無視することは
できるのでしょうか?
ご教授お願いします。

Aベストアンサー

よくやるのは、

if (1 || i > 1) と、 1 || をつけると、必ず条件成立
if (0 && i > 1) と、 0 && をつけると、必ず条件不成立
というのがあります。

デバッグ時のみということであれば、たとえば、
#if defined(DEBUG)
#define DEBUG_TRUE 1 ||
#define DEBUG_FALSE 0 ||
#else
#define DEBUG_TRUE
#define DEBUG_FALSE
#endif

という定義をしておいて、

if (DEBUG_TRUE i > 0) // デバッグ時に条件成立にしたいところ
if (DEBUG_FALSE i > 0) // デバッグ時に条件不成立にしたいところ
などとすれば、

#define DEBUG があれば、それ以降、それぞれ、無条件に、成立・不成立になります。
#deifne DEBUG がなければ、DEBUG_TRUE や DEBUG_FALSE はなかったことになります。

多くの処理系では、コンパイルオプション -d で #define が指定できるので、デバッグモードとリリースモードで、#define DEBUG の有無を指定できたりします。

よくやるのは、

if (1 || i > 1) と、 1 || をつけると、必ず条件成立
if (0 && i > 1) と、 0 && をつけると、必ず条件不成立
というのがあります。

デバッグ時のみということであれば、たとえば、
#if defined(DEBUG)
#define DEBUG_TRUE 1 ||
#define DEBUG_FALSE 0 ||
#else
#define DEBUG_TRUE
#define DEBUG_FALSE
#endif

という定義をしておいて、

if (DEBUG_TRUE i > 0) // デバッグ時に条件成立にしたいところ
if (DEBUG_FALSE i > 0) // デバッグ時に条件不成立にしたいところ...続きを読む


人気Q&Aランキング

おすすめ情報