• ベストアンサー

関数の実行順序を知りたい

一般論としてお聞きしたいのですが、 ファイル数が数百もあるようなプログラム中の 関数の実行順序を知りたいときには皆さんはどのようにされてますか? cout(printf)をいろいろなところに置いて 順序を調べるというのがわかりやすいですが、 大きなプログラムになると大変です。 あるいは、関数の実行順序を調べることができる、 使いやすいデバッガを教えていただいてもかまいませんが、 linuxでも使えるツールでお願いします。

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

g++で-finstrument-functionsすれば-O2でも情報は取れるはずですけどね。試していないので分かりませんが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

プロファイラと呼ばれるものを使います。 http://e-words.jp/w/E38397E383ADE38395E382A1E382A4E383A9.html Linuxだとgprofが有名でしょうか。

noname#108554
質問者

お礼

ありがとうございます。 以下のHP: http://blog.livedoor.jp/rydeen999/archives/10063289.html によると、gprofを用いるにあたって 正常にプロファイリングできなくなるので、最適化オプション(-O2等)を付けてはならないことに注意する。 だそうですが、-O2をつけても大丈夫なプロファイラというものはあるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

gccなら-finstrument-functionsオプションでコンパイルすると関数の出入り口でプロファリング出来ます。 参考↓ http://www.ibm.com/developerworks/jp/linux/library/l-graphvis/index.html Graphvizで視覚化までする必要は無いですが、プロファイリングの仕組みと自分でツール等を工夫すればよろしいかと。

noname#108554
質問者

お礼

ありがとうございます。 実は書き忘れたことがあります。 ユーザとのインターフェース部分がpythonで、 計算の実行部分がC++で書かれたアプリケーションを 解析しなければならないのですが、 このようなプログラムでも実行順序を調べるツールはあるのでしょうか?

noname#108554
質問者

補足

なお、python部分はとりあえず無視することにします。 C++の関数の実行順序が分かればOKです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • printf関数の振る舞い?に関して

    皆様、こんにちは。 C言語のデバッグに関して詳しい方どなたか教えてください。 現在、静的SQLを使ったC言語でのプログラム開発をおこなっております。DBはIBM DB2で、マシンはAS400、言語は C/400です。最初はPCで、Microsoft Visual Stadio .NET 2003で開発して、やはりPC上のIBM DB2にアクセスしてテストしておりました。 問題のCのソースはステップ数が巨大(Cで5,000ステップ)なため、printf関数をとこどどころに入れてテストしておりました(プリコンパイル→コンパイルの作業がある為?にデバッガーは使えなかった為)。 全てのテストが完了したので、ソース上からprintf関数を全て削除して、実行させてみました。 ところがprintf文が入って、正しい結果を出力していたころのプログラムとは思えないほどの、エラーが続出しました。 まず、メモリーエラーと思われるエラー、永久ループ、重複レコード出力エラーなどです。これらは今までと、同じデータで実行したので、全く同じロジックを通るはずなのですが、まるで別人のような振る舞いをしまます。 以前、デバッガーにはデバッガー自身が動くためにメモリーを整理して実行するため、このような事がおきるとは聞いておりましたが、ただのprintf関数で、このような事が起きる事があるのでしょうか? 本プログラムはstrcpyやstrcmp関数が多用されていて、NULL -STOPが正しくセットされていないのではかと、現在調査・改修しているところです。 皆様、このような現象って何が考えられるでしょうか? 宜しくお願いいたします。

  • Linux上で実行関数使用

    Windowsで作成したphpプログラムをLinuxに移動させようとしています。 そのプログラムの中ではC言語で作成したプログラムの実行形式(.exe)をshell_execを使って実行させています。 Linux上で動作させる場合は.outを実行すればよいとはわかるのですが、 どの実行関数を試してみてもパスが通らないか、通っても動作していなor結果が返ってこないようで、全く反応がありません。 .outを単体で実行させた場合は問題なく動作するので、C言語のプログラム上の間違いではないです。 どなたかLinux上で、phpで実行形式を動かす方法を知りませんか?

    • 締切済み
    • PHP
  • C#の実行関数トレース

    C#プログラムのプロジェクトに途中から参画しています。 まだプログラムの全容を理解していないため、どのメニューを実行したときにどの関数が呼ばれるのか、を追うだけでいちいち時間がかかってしまい、困っています。 あるメニューを実行したときにコールされる関数名をすべて出力できるような方法やツールはありますか?

  • スタートアップのプログラム実行順序を任意に変えるには?

    Windows98SE において、スタートアップフォルダに登録されているプログラムの実行順序は、何によって決定されているのでしょうか? レジストリ? INI ファイル? スタートアップフォルダ内のディレクトリエントリ順? また、この実行順序を任意に変えたいのですが、どうすればできるでしょうか? そういう機能を提供するオンラインソフトがあるのは知っていますが、条件としてそういう外部ソフトを*一切使わず*、レジストリや INI ファイル、またはディレクトリエントリの編集等、Windows の基本機能の範囲だけで実現したいのです。 ご存じのかた、よろしくお願いします。

  • 関数の容量を知るには?

    MAPファイルで調べるのではなく、プログラム中からある関数の大きさ(コンパイル後のバイナリのバイト数)を調べる方法は無いでしょうか? 例えば、 void abc(void) { printf("dummy\n"); } というabc関数があったとします。 この関数のコンパイル後のバイナリのバイト数を、 int i; i = sizeof( abc ); みたいな形で調べられないでしょうか? 宜しくお願いします。

  • linuxでの実行中のプログラムのトレースの仕方

    アスタリスクというlinuxで動作するpbxのオープンソースのC言語のソフトがあります。 アスタリスクを立ち上げたとき、関数がどういう順序で呼び出されているかを調べる必要があります。 そこで、http://www.geekpage.jp/blog/?id=2007/1/17を参考にgdbでアタッチしてみましたが、一部 しか表示されないのででうまくいきませんでした。(全関数の呼び出しを表示するにはメモリ・レジスタが不足と出ました) 実行中の複数のモジュールが絡み合うプログラムの関数の呼び出され方を調べるのに、なにか良い方法がありましたら教えて下さい

  • 他の実行ファイルを実行するプログラム

    他の実行ファイルを実行するプログラムを作りたいです。 わかりにくいと思うので例を書いて説明します。 まずhello.cというプログラムがあったとします。 中身は -hello.c----------------- #include <stdio.h> main(){ printf("Hello!\n"); } -------------------------- これをコンパイルしてできた実行ファイルを他のプログラムから呼び出す?実行したいんです。 説明が下手ですいません(>_<) たとえば新しくexe.cというプログラムを作ります。 このexeを実行するとhello.exeが呼び出されて 結果的にhello.cの中身が実行されるような exe.cを作りたいです。 初歩的な質問ですいません。 どなたかアドバイスいただけないでしょうか(>_<)

  • LINUXでのプログラムの実行方法(超初歩的な質問です)

    小生はLINUXをはじめて扱うものです。超初歩的な質問で恐縮ですが、LINUXでプログラムを実行するのはどうすればよろしいのでしょうか。Windowsのように、プログラムファイルをダブルクリックしても、LINUXでは実行されないようです。LINUXのバージョンはVINE3.0です。

  • C言語での式の評価順序について

    ANSI C規格では 「式の評価順序は処理系により異なる」 とのことですが,次のプログラムがどのような評価順序で処理されたのか,どうしても分かりません. C言語の細かいところまでご存知の方がいらっしゃいましたら教えてください. #include <stdio.h> main(){ int c; c = 0; printf("%d\n", c + 1 == ++c); c = 0; printf("%d\n", c + 0 == ++c); } 私の処理系のccでコンパイルして実行すると 1 1 と出力されます. 上の二つの条件式が両方とも真であると解釈され得るような評価順序が存在するのでしょうか?

  • Fedoraで新しいアプリをインストールしたのですがどこから実行すればよいのでしょうか?

    Fedoraで新しいアプリをインストールしたのですがどこから実行すればよいのでしょうか? Windowsではプログラムメニューに追加されますが。 またLINUX一般ではどこから実行すればよいのでしょうか?