みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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言語に詳しい方教えて下さい!><

投稿日時 - 2008-10-05 18:40:50

QNo.4379705

すぐに回答ほしいです

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

見えないinclude部分は
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdint.h>

#include <bfd.h>
ですね。

もっとも、このプログラムはx86とlibbfdに依存するものであり、どんな環境でも動くという種類のプログラムではないことに注意してください。
また、動作を理解するにはスタックフレームの構造の知識が必要です。

投稿日時 - 2008-10-05 20:14:55

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

投稿日時 - 2008-10-05 19:10:09

お礼

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

投稿日時 - 2008-10-05 19:29:24

あなたにオススメの質問