
Ubuntu日本語フォーラム

ログインしていません。
プログラミングを勉強する上で、プログラムの流れの把握や入力した数字がどのように変化していくのか見ることが出来るツール、ソフトを探しています。Synapticにあるんでしょうか?あるんだとしたらどのような名前で検索すれば分かるのでしょうか?
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
CMasamiの言われているとおりなので、
sudo apt-get install build-essential
でgccやら、gdbなどの開発ツールがインストールできます。
ただし、IDEのような環境はインストールされませんので、必要な場合は他の方のフォローを。
オフライン
#include
#include
#include
#include
#include
#include
bfd* abfd;
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;
}
void
stack_trace(void)
{
void* trace[100];
int num_frames = get_stack_trace(trace);
long storage_needed = bfd_get_symtab_upper_bound(abfd);
if (storage_needed < 0) {
fprintf(stderr, "bfd_get_symtab_upper_bound failed\n");
return;
}
if (storage_needed == 0)
return;
asymbol **symbol_table = (asymbol**)malloc(storage_needed);
long num_symbols = bfd_canonicalize_symtab(abfd, symbol_table);
long i, j;
/*
for (i = 0; i < num_symbols; i++) {
asymbol *sym = symbol_table[i];
printf("%p = %s\n",
(void*)bfd_asymbol_value(sym),
bfd_asymbol_name(sym));
}
*/
for (i = 0; i < num_frames; i++) {
void *addr = trace[i];
asymbol *ret = NULL;
uintptr_t far = INT_MAX;
for (j = 0; j < num_symbols; j++) {
asymbol *sym = symbol_table[j];
if (bfd_asymbol_value(sym) == 0)
continue;
if (bfd_asymbol_name(sym)[0] == '.')
continue;
if (addr < ((void*)(uintptr_t)bfd_asymbol_value(sym)))
continue;
if (addr - ((void*)(uintptr_t)bfd_asymbol_value(sym)) < far) {
far = addr - ((void*)(uintptr_t)bfd_asymbol_value(sym));
ret = sym;
}
}
if (ret)
printf("%p %15s %p\n",
addr,
bfd_asymbol_name(ret),
(void*)(uintptr_t)bfd_asymbol_value(ret));
}
free(symbol_table);
}
int
func2(int n)
{
if (n == 0) {
stack_trace();
return 0;
}
return func2(n - 1);
}
void
func1(void)
{
func2(5);
}
int
main(int argc, char **argv)
{
abfd = bfd_openr(argv[0], NULL);
assert(abfd != NULL);
bfd_check_format(abfd, bfd_object);
func1();
bfd_close(abfd);
return 0;
}
すいません、このソースはgdbと関係あるようなのですが(参照サイトhttp://kzk9.net/blog/2006/07/c_1.html)このソースには何をincludeすればよいのか消えてます(・・;)
お願いします!お手数ですが何をincludeすれば良いのか教えて下さい。欲をいうと入力した数字の変化も追えるよう改良をくわえたいのですが、どうか御助言お願いします><
オフライン
ソースに関する問い合わせについては作者の方に聞く方が早いと思いますよ。
#とりあえず、stdio.hは判った。
オフライン
ソースコードを貼るときは、
[CODE] #include <stdio.h> [\CODE]
の様に、半角の [CODE]と[\CODE]で囲みます。
オフライン
元ページの画面上からは消えちゃってますがHTMLを確認するとincludeされてるのは
stdio.h
stdlib.h
assert.h
limits.h
stdint.h
bfd.h
ですね。
オフライン
Firefoxであれば, 該当する範囲を選択 (反転) させておいて, 「選択した部分のソースを表示」するとよいカモです。
(そしたら何が書かれてるのか分かる)
つか kkさんのゆーとーり, 作者さんに伝えた方がよいカモ。
オフライン