• 締切済み

関数の呼び出し元の検索

Visual Studio 2008を使い、C++のプロジェクトを引き継ぎましたが ヘッダーファイルに定義されているとある関数がどこから呼び出されているか分からないので質問させていただきました。 呼び出し元を探すためにやったこと ・関数名の上で右クリック→全ての参照の検索 ・関数名の上で右クリック→呼び出しブラウザ→呼び出し元の表示 ・Doxygenでドキュメント生成し、当該関数の確認 以上のいづれをやっても呼び出されていないような状態なのですが、他に確認できる方法はあるのでしょうか? また、これだけやって呼び出し元がないような状況なら呼び出されていないと結論づけても問題はないでしょうか?

みんなの回答

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.3

>当該クラスは別クラスを継承しており、その中で純粋仮想関数が定義されているため、クラスのインスタンスを作成できないというエラーになってしまいました。 継承元クラスの関数としての呼び出しは確認されてますか? class A { public: virtual void foo() = 0; }; class B: public A { public: virtual void foo() {printf("foo\n"); } }; A *a = new B(); a->foo(); // これだとclass B::foo()の呼び出しとは認識されないんじゃないかな

nobb_hero
質問者

補足

ご回答ありがとうございます。 休日に入ってしまったため、出社した際に確認してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

中に入ったら実行時の致命的なエラーを引き起こすように関数を変更するとか?

nobb_hero
質問者

補足

現状として、当該関数の中はメッセージボックスが表示される状態なのですが、そのメッセージボックスは見たことがないメッセージであった為、どうにかして呼び出されている(または、いない)事を確認したかったのです。

回答No.1

> 以上のいづれをやっても呼び出されていないような状態なのですが、他に確認できる方法はあるのでしょうか? 一時的に関数名を変更してビルド。どこからも呼ばれていなければリンクに成功する。

nobb_hero
質問者

お礼

ご回答ありがとうございます。 あえてのエラーですね。その発想はできませんでした・・・ 一番簡単な方法なんですけどね。 ひとまず、試してみます。 他にも「こんな方法思いついたけどどーよ?」なんてありましたらよろしくお願いします。

nobb_hero
質問者

補足

完全に失念していたことがありました。 当該クラスは別クラスを継承しており、その中で純粋仮想関数が定義されているため、クラスのインスタンスを作成できないというエラーになってしまいました。

関連するQ&A

  • visual studio 2015 exe 生成

    visual studio 2015のC++でWin32アプリケーションを作りました。 デバッグしようとしたところ、ビルドエラーが発生して、 「プログラム 'c:¥users¥documents¥visual studio 2015¥Projecst¥Win32project1¥Win32project1.exe'を開始できません。 指定されたファイルが見つかりません」と表示されます。 ソリューションのビルドは正常に出来ます。 そこでprojectのファイルを開いて見たのですが、確かにexeファイルが生成されていませんでした。 特に設定はいじってないです。 どうすればexeファイルが生成されるのでしょうか?

  • atlstr.hのインクルードによるエラーについて

    atlstr.hのインクルードにより生じるエラーについて質問させて頂きます。 開発環境は、Visual Studio 2008 Professional Editionです。 (Visual Studio 2008におけるプログラミングは正直まだ慣れておりませんorz) Visual Studio 2008製品内のVisual C++ 2008において、以下の操作を行いプログラムを 実行すると、コンパイルは通るのですが、プログラム実行後にエラー音が一度鳴るだけ でフォームが表示されないというエラーが発生します。その際、タスクマネージャでプロセ スを確認するとプログラム自体は動いているようで、”AtlStrTest.exe”というプロセスが実 行されているのが確認できます。 1.[ファイル]->[新規作成]->[プロジェクト]で新しいプロジェクトダイアログを表示させる 2.[Visual C++]->[CLR]->[Windows フォーム アプリケーション]を選択し、プロジェクト名   ”AtlStrTest”でプロジェクトを新規作成 3.プロジェクト内に生成された”atdafx.h”の”// TODO: プログラムに必要な追加ヘッダー   をここで参照してください。”というコメントの下に#include <atlstr.h>の一行を追加する  原因を分析しようにも、ヘッダをインクルードしただけでエラーが起きるという状況がは じめてなので、途方に暮れている状態です。 大変恐縮ですが、このatlstr.hのインクルードによるエラーがなぜ発生したのかについて、 どなたかアドバイスよろしくお願いいたします。 【関連情報】  同様の操作を、Win32コンソールアプリケーションで実行したときは、このようなエラーは 出ませんでした

  • C++ での関数について

    C++ での関数について 先週Visual C++を始めたばかりの初心者です。 最初に作られるForm1から別の関数に飛ばしたいのですが、やりかたがわかりません。 どなたかお願いします。 \\\\\\\ 詳しく //////// Form1 ここにスタートボタンを作る Form2 Form1のスタートボタンを押すとこちらのウィンドウが起動し、実行される。 ちなみにForm2はプロジェクト名を右クリックし、「追加」→「新しい項目の追加」→「テンプレート」→「windowsフォーム」で作成し追加しました。 C言語はだいたい理解できているのですが、いまいちC++がわかりません。よろしくお願いします。

  • デバッグを解除したときに元の画面に戻る処理が異常に長い

    Visual Studio で1つのソリューションの中に20くらいのプロジェクトがありますが、 コンパイル数を1つにしても、 デバッグを解除したときに元の画面に戻る処理が異常に長いです。 プロジェクトが少ないと早いので、 内部的に何か処理を行っていると思うのですが、 何か早くする対策はあるのでしょうか?

  • 一番上だけ・・・?

    初めて投稿させていただきます。 私は今WEBを見て、DirectXとVisualStudio2005でC++のプログラムを作っています。 ユーザー定義のソースファイルとヘッダーファイル、リソースファイルを使っていて、そのうちヘッダーファイルを「stdafx.h」で参照したのですが、以下のようなエラーが出ました。 (以下プロジェクト名と各種ファイル名は一部仮称です) ------ ビルド開始: プロジェクト: prg, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\prg\stdafx.h(38) : fatal error C1083: include ファイルを開けません。'hdf01.h': No such file or directory prg - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== おそらく、以下のところに問題があると思われます。 ----------[SAMPLE CODE]----------(stdafx.h内) // TODO: プログラムに必要な追加ヘッダーをここで参照してください。 #include "hdf01.h" #include "hdf02.h" #include "hdf03.h" #include "hdf04.h" #include "hdf05.h" ----------[SAMPLE CODE]---------- そこで、この掲示板を参考にして次のような方法を取りました。 (1)""を<>に変えてみる (2)[ツール]-[オプション]からインクルードファイルにパス先を登録してみる (3)「"hdfXX.h"」を相対パスにする (4)「"hdfXX.h"」を絶対パスにする 結果は、(1)と(3)は元と同じエラー、(2)と(4)は300以上のエラーが出て、コンパイルが中断されてしまいました。 気になるのは、「"hdf01.h"」と「"hdf02.h"」の位置を入れ替えてみると、「hdf02.h だけを読み込めない」といったエラーが出たことです。 その後もヘッダーファイルを記述する順番を替えてみましたが、どうやら「一番上のヘッダーファイル」だけを読まないらしいです。 実は、WEBで見たプログラムはVC++6.0向けのプログラムで、そのままコピーしてVS2005に貼り付けたところ、 ------ ビルド開始: プロジェクト: SampleSTG, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp コンパイルしています... ssf01.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf.cpp(537) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf02.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf02.cpp(54) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf03.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf03.cpp(136) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf04.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf04.cpp(370) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? コードを生成中... スキップ中... (関連する変更は検出されませんでした) prg.cpp prg - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== というエラーが出たため見直してみたところ、stdafx.hに「// TODO: ~ 」といったものを見かけたため、上のように書き加えました。 PSDKやDirectXのパスは通っています。 アプリケーションは「Win32 Application」→「Win32 プロジェクト」と読み替えて、「プロジェクト名を入力して[OK]を押したら、次の画面でいきなり[完了]を押す」と、指示通りに作成しました。 ちなみに、OSは WindowsXP HomeEdition、 VS2005は AcademicEditionです。 よろしくお願いいたします。

  • C#でのドキュメント生成ソフト

    Visual Studio 2008でC#を使っています。 C#のドキュメント生成システムは、みなさん何をお使いでしょうか? 私が思いつくのは、Doxygenくらいしかないのですが、、 よろしくお願いします。

  • VS2010 で summary を生成するには?

    Visual Studio 2010 C# を1年ぶりに使ったのですが・・・・ PG中の関数の入り口部分の /// <summary> /// </summary> /// <returns></returns> という記述は(うろ覚えで悪いのですが)自動で生成されたような気がするのですが・・・・ 何か設定を変更するんでしょうか? (実験的なソースなんで新規でプロジェクトを作りました) もし勘違いだったらすみません。

  • フォーム1はどこへいったのでしょう?

    初心者です。 Microsoft Visual Basic 2008 Express Editionを使用しています。 新しいプロジェクト→windowsフォームアプリケーション →Form1に何個かコントロールを置く→デバッグ開始 →プロジェクトの保存→名前、ソリューソン名、WindowsApplication1→上書き保存→VB2008の終了 をしました。 さて質問ですがForm1を起動されたいのですがどこにあるのでしょう? C:\Users\○○\Documents\Visual Studio 2008\Projectsの中に 「WindowsApplication1」というフォルダがあるのでクリックしてみましたがどれを探せばいいのかわかりません。 そもそも「exe」の拡張子を捜せばいいのですよね?どうも見当たりません。 ご教授よろしくお願いします。

  • VS 2005 で新規作成で困っています。

    ファイル - 新しいプロジェクト 【新しいプロジェクト】 Visual Studio にインストールされているテンプレートの中から (Windows アプリケーション)を選択 プロジェクト名はそのままで(OK)をクリックすると フォームの左下に プロジェクト"プロジェクト名"の作成に失敗しました。 が表示され、新しいフォームが作成できません。 再インストールをしたりしていますが、全くうまくいきません。 誰か教えて頂けますでしょうか。宜しくお願い致します。

  • Visual Studio 2008でのC言語のサンプルコード実行につ

    Visual Studio 2008でのC言語のサンプルコード実行について教えてください。 他のプログラミング言語の経験はありますが、C言語とVisual Studioの開発環境は初めてでつまずいています。 C言語で書かれたたくさんのサンプルコードを、 Visual Studioと、Visual Studio コマンドプロンプトでテストしたいのです。 「test」というソリューション(プロジェクト)の下に、「新しいクラス」を追加して、 サンプルコードをコピペして、順次デバックでテストしようとしたところ、 ひとつのプロジェクトの中でmainが重複してしまいエラーになります。 main重複でエラーは当たり前とはいえ、 サンプルコードごとにプロジェクトを作成するのは大げさすぎる気がすることと、 体裁にこだわらず、とにかくデバックで各コードが動くことを確認したいこと、 サンプルコードの書き出し(main関数)などを修正してサブクラスに書き直してデバックすれば mainの重複とみなされず、手軽にVisual Studioでテストできるのではないかと やり方を調べています。 2つ目以降を、サブクラスにすればmainの重複がなくなるでしょうか? その場合、最初のmain関数 int main (int argc, char **argv) をどう修正すればいいのでしょうか。 それとも、何か別のやり方で、Visual Studioで手軽にテストする方法があるでしょうか。 調べてみたのですが、具体策がわからず困っています。 今回初めてVisual Studioに触れましたが、今後長く使いたいので別の環境に逃げずいろいろ勉強したいと思っています。 もし何かお心当たりがありましたら、ぜひ教えてください。 宜しくお願い致します。