• ベストアンサー

このプログラムについてなのですが・・・

int get_stack_trace(void **result) { void **sp = (void**)&result - 2; // sp[0] : pointer to previous frame // sp[1] : caller address // sp[2] : first argument int n = 0; while (sp && n < 100) { result[n++] = *(sp + 1); void **new_sp = (void**)(*sp); if (!new_sp) break; sp = new_sp; } return n; } 参照サイトhttp://kzk9.net/blog/2006/07/c_1.html このサイトにあるこのソースプログラムを理解し使用したいのですが、私のレベルでは理解できません>< mainがないのですが、このままコピペしても使えないですよね?どうプログラムを付け加えればつかえるようになるのでしょう?(例えばソースを貼ってそのソースで使った関数の流れを表示出来るようにしたいのですが・・。)参照サイトにあるようにアドレスから使用した関数の流れを表示したいのです。欲を言うと、入力した数字の変化も表示できるようにしたいです><お願いします!C言語に詳しい方教えて下さい!><

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

見えないinclude部分は #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <limits.h> #include <stdint.h> #include <bfd.h> ですね。 もっとも、このプログラムはx86とlibbfdに依存するものであり、どんな環境でも動くという種類のプログラムではないことに注意してください。 また、動作を理解するにはスタックフレームの構造の知識が必要です。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

参照サイトのページの下の方に、当該関数を使った ソースコードの例が載っています。もちろん main 関数ほか付きで。 ただ、#include の後ろが見えなくなっていますので、 どのヘッダーファイルをインクルードすればよいかがわからない :D

yamada11
質問者

お礼

ありがとうございます。そうだったんですか、これは当該関数を使った ソースコードの例だったんですか(・・;) しかし、何をincludeすれば良いのでしょう?分かる方更にお願いします><

関連するQ&A