• ベストアンサー

VisualC++6.0にて、コールスタックを見てもどこから来たかわからない

VisualC++6.0を使用しています。ほとんどわからないのに、都合で修正を任されています。調べながら、少~しずつなんとか進んでいますが、どうしても進めなくなりました。 繰り返し呼び出されているプロシージャ(?)があるのですが、そこの先頭でブレークして、コールスタックを見ても、呼び出し元のほうが、わけのわからない数字になっていて、プロシージャ名ではありませんでした。そこに飛んでみると、アセンブラのような処理が書いてあるだけで、さっぱりちんぷんかんぷんです。。。 このプロシージャを繰り返させている大元を探し出したいのです。 初心者で、質問の意味もわかりにくく、また、答えも書きにくいかもしれませんが。。。なにかアドバイスがありましたら、ご指導ください。m(__)m よろしくお願いします。

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

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

具体的なプロシージャ名を提示しては? 例えば、ダイアログに「Hello,World!」を表示するプログラムなんか、 main(){MsgBox("Hello,World!\n");} のような感じだと思いますが、表示されるダイアログの位置、右上の×ボタンの表示処理とかの処理って、特に何も書かなくてもやってくれます。 そういう処理部分が、 > わけのわからない数字になっていて、 > アセンブラのような処理が書いてあるだけで、 です。 -- そういう場合での呼び出しを避けるには、適度に実行開始して適当な所で [デバッグ]-[ブレーク] ブレークポイントを設定して、 [デバッグ]-[実行] とか。 もっともNo.1さんの指摘のようなマウスが動いた際に呼び出されるような箇所の場合、上のデバッグ操作も影響を与えてしまうので、PC2台でリモートデバッグとかが必要になります。

その他の回答 (2)

回答No.3

TRACEを使うことも有効です。 怪しげな箇所に以下を入れておき、[デバッグ]-[実行]です。 TRACE("hogehoge\n"); VCのアウトプットウィンドウに"hogehoge"と表示されます。 いろいろ原因があると思いますが、何か無限ループに陥いてスタックオーバーフローしてるかも。

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

もし繰り返し呼ばれる関数名がOnDrawとかOnMouseMoveとかなら、それらは画面の再描画が必要なとき、マウスが動いたときに自動的に呼ばれるように登録されています。登録している部分のコードを見たいなら関数名をプロジェクト中の全ファイルに対して検索すれば(VC++6.0なら)見つかるでしょう。 しかし普通は関数名から繰り返し呼ばれる理由は推測がつきます。

関連するQ&A