VCで関数の呼び出し先が調べられますか? – プログラミング – Home

VCで関数の呼び出し先が調べられますか...
 
通知
すべてクリア

[解決済] VCで関数の呼び出し先が調べられますか?


え~いち
 え~いち
(@え~いち)
ゲスト
結合: 19年前
投稿: 78
Topic starter  

現在、VC++6.0 SP5で作成された大規模なアプリケーションのデバックをしております
VCの機能であるクラスのある関数を呼び出している箇所を検索する方法はないでしょうか?
ファイルから検索で検索文字列を指定する場合には、同じ名前の関数もピックアップされます
すると、数千件単位で列挙されるので追いきれません
コンパイラ自信は利用先を知っているはず(知らなければコンパイルできない)なので、
VCにそういった機能はないでしょうか
関数ポインタを使っての関数呼び出しもわかるとさらにうれしいです


引用未解決
トピックタグ
え~いち
 え~いち
(@え~いち)
ゲスト
結合: 19年前
投稿: 78
Topic starter  

一応、調べたい関数の名前をかえてコンパイルをかけるって方法があることはあるのです
が・・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

仮想関数はいかがいたしましょう。
実行時に呼び先が決定するので、静的に見つけ出すのはムリではないかと。


返信引用
え~いち
 え~いち
(@え~いち)
ゲスト
結合: 19年前
投稿: 78
Topic starter  

>仮想関数はいかがいたしましょう

その仮想関数が呼び出される可能性のある箇所の特定はできませんか?

aを継承したx,yというクラスがあった場合に
各クラスが、virtual fun()という関数をもっているとしたら、x::fun()の呼び出し先と
して、a::fun()、x::fun()、y::fun()のいずれかを呼び出す可能性のある箇所を教えてく
れるといいですね

・・・が、現在私の追っているプロジェクトでは、仮想関数は比較的追い(と、言うか仮
想関数になっているような構造だと、どんなプロジェクトであっても、同じような用途の
関数になるはずなので追いやすい気がします)やすいので仮想関数は特定できなくてもい
いのですが


返信引用
旧通りすがり
 旧通りすがり
(@旧通りすがり)
ゲスト
結合: 18年前
投稿: 2
 

VisualStudio2005でもよければ
関数名右クリックしてポップアップメニューの「呼び出しブラウザ」に
「呼び出し先の表示」や「呼び出しもとの表示」てのがあります


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

>ファイルから検索で検索文字列を指定する場合には、同じ名前の関数もピックアップさ
れます
>すると、数千件単位で列挙されるので追いきれません

追いかける以上は、クラス構造とかクラスの関係についてあらかた頭に入っている
または、直ぐ参照できるような関連図があるとおもうので検索するにしてもファイルを
絞り込めそうな気がしますが、違うでしょうか?
多分、対象のファイル全体に対して関数名で検索を掛けるからそういう事になっている
わけで、クラス名::関数名等で検索すれば、少なくとももっと絞り込めると思います。
クラス構造とクラスの関係が分からない状態では多分難しいと思います。
この辺は地道に追いながら勉強するしかないような気がします。


返信引用
Ryo
 Ryo
(@Ryo)
ゲスト
結合: 23年前
投稿: 252
 

タイトルと最初の質問だと、
「呼び出し先」なんだか「呼び出し元」なんだかわからんな

とりあえず、VC6なら、「定義と参照」ってのがある。
.net以降の「呼び出しブラウザ」と同じ目的のもの(てか、.netで名前変えすぎ)

○やり方
1:まず、ツールバーの「参照」を追加しておく(ツール→カスタマイズで)
2:調べたい関数にカーソルを置く
3:追加したツールバーの真ん中あたりにある「定義と参照」を押す。
4:あとは一目瞭然。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> とりあえず、VC6なら、「定義と参照」ってのがある。

ただし、精度はVC6のインテリセンスなどから推して知るべし、という程度。
まともな調査に使うには精度が低すぎて、漏れの可能性も高く、保証もない。
# そもそもまともに動かないことも…
デバッグの参考くらいにはなるかも。


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

doxygen導入するとか・・。


返信引用
え~いち
 え~いち
(@え~いち)
ゲスト
結合: 19年前
投稿: 78
Topic starter  

結局解析のほうは、調べたい関数の名称を変えてコンパイルしたり、検索ファイルを絞り
込んだりして解析をしました
一番苦労したのは関数ポインタ・・・

VC++6.0には私の望む機能はないんですね
コードの静的解析ツールなども調べてみます

皆様、アドバイスありがとうございました


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 一番苦労したのは関数ポインタ・・・

静的な解析ではどーしよーもありませんね。仮想関数も同じく。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

結局、システム内のクラスの構成図やらを見てクラス間の関係をきちんと理解するしか
方法はないと思います。επιστημηさんも言われている通り、動的な部分は
これをきちんと理解して解析するしかありません。
ツールはあくまでもツールに過ぎず、それ以上でもそれ以下でもないです。
調べたい関数の名称を変えてコンパイルするのだったら
OutputDebugString等を使ってモニタリングしながら動かした方が
よっぽどわかりやすかったのではないかと言う気もします。
ただ、クラス構造がきちんと理解できていれば実際にはわかると思うんですが、
難しいですかねぇ。
それとも資料の提供が無かったんですかねぇ。


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

解決したようですが、蛇足情報。
MSはVCシリーズにBrowserToolKitという解析ツールを用意してます。
コンパイル時に生成されるBSCファイルを自由に解析できます。

http://www.microsoft.com/downloads/details.aspx?FamilyId=621AE185-1C2A-4D6B-
8146-183D66FE709D&displaylang=en


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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