タグ

debugとgccに関するmaisenakajimaのブックマーク (2)

  • 実行時の関数全ての in/out をトレースする - Qiita

    こういう DebugPrint 1関数ずつ入れなくてOK。 素敵ポイント: 大元のソースには手を入れない。 gcc 使用。 ソース #include<stdio.h> /* Proto Type */ void hello_world( void ); void hello_world(void) { printf( "hello!\n" ); } int main(void) { hello_world(); return 0; } #define _GNU_SOURCE #include <dlfcn.h> #include <iostream> extern "C" { void __cyg_profile_func_enter(void* func_address, void* call_site); void __cyg_profile_func_exit(void* func_

    実行時の関数全ての in/out をトレースする - Qiita
    maisenakajima
    maisenakajima 2014/04/27
    ポイントは、 -finstrument-functions 。関数の in/out で指定した関数を呼ぶ、というオプション。in のときにやりたい処理を __cyg_profile_func_enter に、out のときにやりたい処理を __cyg_profile_func_exit に記載する。
  • DWARF の行情報を読む - 兼雑記

    なんか行情報読むとかそいう話題が twitter にあったので、適当に作ってあったのでなんか書いてみる。 http://github.com/shinh/test/blob/master/addr2line.cc DWARF 情報つけると (今の GCC だと -g でつくと思う) アドレスからコードの名前を行番号をひけるようになるんだけど、まぁその情報をプログラムから読むという話。 まずどこに格納されてるかっていうと、 .debug_line っていうセクションに入っているので、それを探す必要がある。上のプログラムで言うと main の中。先頭にある ELF ヘッダを読んでセクションヘッダの開始位置とセクション名の格納されてる .shstrtab の位置を教えてもらって、 .shstrtab の情報を参考にして .debug_info の位置を特定する。 .debug_line の中身は

    DWARF の行情報を読む - 兼雑記
  • 1