タグ

cに関するStingrayのブックマーク (12)

  • gcc のデバッグ術

    Unix系コマンドラインユーザーのための、 gcc/g++/g77 による開発におけるデバッグ術を簡単に紹介します。 以下の内容は gcc 2.7.2.3 での動作は確認しています。 g++/g77 でも恐らくは通用すると思うのですが、 ひょっとすると異なる部分があるかもしれません。 筆者は g++/g77 の使用経験がないので、その場合は御容赦を願います。 実行前 キーワード「コンパイルオプション, -Wall, -O2, -O4」 まずは gcc にオプション opt'-Wall' を付けてコンパイルし、 警告がなくなるまでソースを修正します。 これは 常識 です。 次に opt'-O4 -Wall' でコンパイルします。 「未初期化変数の使用」の警告 (`foo' might be used uninitialized in this function) は、 opt'-O4' を付

  • Cプログラミングの秘訣

    特集 Cプログラミングの秘訣 最終更新: 2006-03-28 このテキストはC MAGAZINE 1992年4月号に掲載された原稿のオリジナルテキストを元にしてHTMLに変換したものです。掲載文章と細部が異なっていると思われます。また、気付いた個所をいくつか修正してあります。 当時はまだWindows 95もないような時代で、現在の状況から見ると違和感のある内容も結構あるかもしれませんが、時代背景を想像しながら補正しつつ読んでいただければ幸いです。 ※2006年3月28日追記: 何が原因か知りませんがこのページのアクセスが増えているそうなので、 HTML のおかしなところを修正しました。 文章の変更はありません。 なお、このサイト(表ページ)は現在休眠状態ですが、 裏ページ や 裏の裏ページ の方を、細々と更新していたりします。 目次 Part1 よいプログラムを書く条件 Part2 明

    Stingray
    Stingray 2006/03/27
  • 「止まる」「遅い」を元から絶つ!オープンソースのトラブル解決第2回 システムが遅くなる(その1)

    オープンソース・ソフトウエアで構築したシステムのトラブル原因を探り,解決するこのシリーズ,今回と次回は「システムが遅くなる」スローダウン事例の解析方法をご紹介します。今回は(その1)として,LKST(Linux Kernel State Tracer)を使ってタイマー駆動型アプリケーションの遅延原因を調べてみましょう。 それでは前回に引き続き,若手エンジニアのタカハシくんと,先輩のスズキさんにご登場いただきます。

    「止まる」「遅い」を元から絶つ!オープンソースのトラブル解決第2回 システムが遅くなる(その1)
  • 「止まる」「遅い」を元から絶つ!オープンソースのトラブル解決第1回 アプリケーション異常終了

    止まる,性能が出ない…システム開発に携わる人なら誰もがぶつかった経験のあるトラブルでしょう。特に,通常は問題がないのに,負荷が高くなったり,長時間連続稼働した時にだけ発生するトラブル,さらにどういった場合に発生するのかわからないトラブルはやっかいです。 でも,原因を突き止める方法はあります。この連載では,そういったトラブルをタカハシくんとスズキさんの2人といっしょに解決していきましょう。 タカハシくんは,IT企業の若手エンジニア。元気はあるのですが,おっちょこちょいなのが欠点です。LinuxでC言語やJavaを使った開発には少し自信が出てきましたが,トラブルがあるとなかなか原因がわからず,先輩のスズキさんに教えを請う毎日です。スズキさんはこの道ン十年,汎用機でのアプリケーション開発の経験もあるベテラン・エンジニアです。 第1回目は,高負荷時にアプリケーションが異常終了するというトラブルです

    「止まる」「遅い」を元から絶つ!オープンソースのトラブル解決第1回 アプリケーション異常終了
    Stingray
    Stingray 2006/03/03
    エラーの原因をソースコードからデバッグ
  • ちくわプログラマの作業履歴@はてな

    ほぼ日のホワイトボードカレンダーを購入してみる。 とりたてて書くことも無いのでスケジュールを引いてみたり。ホワイトボードなのでスケジュールが更新されても書き直しが簡単なのが(・∀・)イイ!! あと。裏面のイヌの写真にイタズラガキをするのもこのカレンダーの楽しみ方のひとつ。 via 日経バイト1月号 青木さん曰く lsのソースを読んでないのはプログラマとしてかなりまずいのではないでしょうか。 とのこと。 ホントごめんなさい。読みます読みます。 つ[http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/]

    ちくわプログラマの作業履歴@はてな
    Stingray
    Stingray 2006/01/09
  • ひげぽん OSとか作っちゃうかMona- - Emacs + GLOBALでソース読みを快適に

    ネットワークサーバー実装のためにuIPのソースを読もう。 NICドライバの移植のためにFreeBSDのソースを読もう。 ということで以前使っていた etags を使おうと思ったがキーバインド忘れた。 そして etags はなんだかいろいろ不満点があった気がするので GLOBALを使ってみることに。 以前GLOBALは出力をHTMLにして使ったことがあるのだが、最近EmacsにどっぷりなのでEmacsから使ってみることに。 0.GLOBALって何? GNU GLOBAL は、ソースコードに索引付けを行うことで、大規模システムのハックやレビューを効率化するソフトウエアです。 ソースファイル中の指定したシンボルを高速に見つけ出し、素早くその場所に移動することができます。多くのサブディレクトリからなり、#ifdef や main() 関数を沢山含んでいるような、いわゆる巨大なプロジェクトをハックす

    ひげぽん OSとか作っちゃうかMona- - Emacs + GLOBALでソース読みを快適に
    Stingray
    Stingray 2006/01/09
    コードをリンクでたどって読める
  • http://www.ccn.aitai.ne.jp/~ccc/linux.html

  • CandASM

  • prelink の効果を測定する - bkブログ

    prelink の効果を測定する prelink は大量の共有ライブラリをリンクしたプログラムの起動時間を短縮するためのツールです。最近の Linux で利用できます。Gentoo Linux Prelink ガイドによると「典型的なKDEプログラムの起動時間は50%も短縮することができます」とのことです。このエントリでは簡単なプログラムを書いて prelink の効果を調べる実験を行ってみます。 通常、動的リンクされたプログラムはシンボルの参照時に再配置およびシンボルのルックアップなどを行う必要があります。prelink は実行ファイルと依存する共有ライブラリを書き換えて、これらの処理を行う必要性を減らします。また、prelink されたプログラムはリロケーションによって発生する共有不可能ページが減るため、プロセス間で共有できるページが増えるというという効果もあります。 prelink

  • Linuxメモリーリーク調査方法

    http://www.nianyan.net/library/memory.html 最近では export MALLOC_TRACE=log とかできるらしいglibcスゲーわ。

    Linuxメモリーリーク調査方法
  • 普通のやつらの下を行け: Cで動的コード生成・実行 - bkブログ

    普通のやつらの下を行け: Cで動的コード生成・実行 スクリプト言語には動的にコードを生成して実行する機能を持ったものが多くあります。 普通のやつらの下を行けの第3回として、今回は C による動的なコード生成と実行に取り組んでみたいと思います。 今回書いたコードの main() 関数は以下のようなものです。 int main(int argc, char **argv) { assert(argc == 2); define(int, add, (int x, int y), "{ return x + y; }"); define(int, mul, (int x, int y), "{ return x * y; }"); define(int, add_argv1, (int x), "{ return x + %d; }", atoi(argv[1])); printf("%d\n"

    Stingray
    Stingray 2005/10/28
  • 普通のやつらの下を行け: assert_caller() - bkブログ

    普通のやつらの下を行け: assert_caller() 以前に、低レベルプログラミングを愛好する知人が「普通のやつらの下を行け」を口癖にしていました。当時は何を言っているのかと聞き流していましたが、自分も最近になってようやく低レベルプログラミングのおもしろさがわかってきました。今回は「普通のやつらの下を行け」企画の第一弾として assert_caller() なるものを作ってみたいと思います。 assert_caller() とは assert_caller() とは、特定の関数からの関数呼び出しだけを通すためのアサーションです。たとえば、次のように foo() の先頭で assert_caller(main) と書いた場合、 foo() は main() からしか呼び出せなくなります。他の関数から foo() を呼び出した場合はエラーメッセージとともに異常終了します。 void foo

    Stingray
    Stingray 2005/10/24
  • 1