タグ

C-Languageに関するvaliumのブックマーク (4)

  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

    valium
    valium 2007/01/02
    C : gdb でバックトレース表示
  • ライブラリの外に公開するシンボルを制限する - bkブログ

    ライブラリの外に公開するシンボルを制限する C言語にはファイル内 (コンパイル単位) からしかアクセスできない static 関数と、別のファイルからもアクセスできる非static 関数があります。しかし、ライブラリを作成する上では、この2つのスコープだけでは不十分なときがあります。 記事では GNUの開発環境において、ライブラリの外に公開するシンボルを制限する方法を紹介します。 次のような例を考えてみます。 % cat a.c // foo() は libfoo の主役の関数なので公開したい void foo() { bar(); } % cat b.c // bar() はライブラリの中だけで使われるべきなので当は公開 // したくない。しかし別のファイルに含まれる foo() から使われ // ているので、非staticにせざるをえない void bar() { } このようなコ

  • 更新履歴兼雑記

    woさんに感化されました。 http://d.hatena.ne.jp/w_o/20060224#p4 なんというかワンライナーを書けるってのは重要な要素なのですよ。 http://shinh.skr.jp/dat_dir/tcci.c 以下実行例。 > time curl -s www.yahoo.co.jp | ./tcci -n 'char* p; if (p=strstr(_, "<title>")) puts(_);' <title>Yahoo! JAPAN</title> curl -s www.yahoo.co.jp 0.01s user 0.01s system 21% cpu 0.092 total ./tcci -n 'char* p; if (p=strstr(_, "<title>")) puts(_);' 0.01s user 0.00s system 13% c

    更新履歴兼雑記
    valium
    valium 2007/01/02
    Cをワンライナーで
  • www.textfile.org - Super Technique 講座〜longjmpと例外

    http://www.nurs.or.jp/~sug/soft/super/longjmp.htm だから、コメントのかたちで /* NOTREACHED */ と書いてやると、コンパイラはこのコメントを認識し、このコメントには制御が移らないことを理解する。 ... ちなみにこのようにコンパイラが認識する特殊なコメントとしては、switch 文の FALLTHROUGH を「判って書いている」ことを伝える /* FALLTHROUGH */ があることはご存知かな? へえ当!? 知らなかった。 via http://d.hatena.ne.jp/higepon/20061114/1163517868 追記: http://www.linux.or.jp/JM/html/GNU_gcc/man1/cpp.1.html -lint コメント中に埋め込まれた、プログラムチェッカ lint のコ

    www.textfile.org - Super Technique 講座〜longjmpと例外
  • 1