タグ

programmingとdebugに関するhiromarkのブックマーク (17)

  • `Д´)ノ バグベアード抜きで printf デバッグを語るんじゃねぇ! - TrickDiary

    わたしがprintf()デバッグをしない理由 ...くそぅ、まだまだバグベアード( why バグベアード? )の知名度が足りねぇのか。 printf デバッグにおいてはバグベアードのようなモジュールを利用するかどうかで大きく話の前提が変わるんだけどなぁ。自分的には「この作者、頭おかしい!」と呼んでもらうに足るレベルの作り込み*1に達していると思ってんだけど、その存在を知ってもらってなけりゃそりゃお話にならんわな。('A`) しかもこの人、 Debug Hacks の著者かよ。あの様子だとデバッグツールの紹介としても一言も触れられていないんだろうなぁ。バグベアードの存在はまさに Debug における Hack だと言うのに。 printf デバッグの是非について少し自分の意見を述べておきますと、多くの場合、printf デバッグはそれが場当たり的に行われるものである点が非常にまずいものだと考

    `Д´)ノ バグベアード抜きで printf デバッグを語るんじゃねぇ! - TrickDiary
  • 実践 デバッグ技法

    ソフトウェア開発で不可欠なデバッグですが、知識と経験が求められるため熟練プログラマのなかにもデバッグが苦手という開発者は少なくありません。洗練されたデバッガを利用できても、デバッガのどの機能がどの場面で有効かを見極めるのは簡単ではないからです。書では、Linux/Unixプラットフォームでもっとも広く使われているGDB、DDD、Eclipseという3つのツールを取り上げ、各ツールに独自のデバッグテクニックはもちろん、コードに含まれるエラーを見つけ出して修正するプロセスを改善するための総合的な戦略についても解説します。翻訳版ではVisual C++でのデバッグ手法についても加筆しました。 関連ファイル サンプルコード(.zip) 正誤表 書籍発行後に気づいた誤植や更新された情報を掲載しています。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの

    実践 デバッグ技法
    hiromark
    hiromark 2009/05/27
    1から勉強しなおして知識を整理しなおしたいな。
  • C++ のプログラムのデバッグを楽にする方法

    Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な

    C++ のプログラムのデバッグを楽にする方法
    hiromark
    hiromark 2009/04/13
    あー、これ便利そうだなあ。
  • 常駐型サーバープログラムのデバッグ手法

    BOOK: WEB+DB Press TITLE: 常駐型サーバーのデバッグ手法(ドラフト版) AUTHOR: (株)プリファードインフラストラクチャー 太田一樹 *注: この文章はWEB+DB PRESS Vol.48に掲載された記事のドラフト版です はじめに 今回はデバッグ関連特集ということで、常駐型サーバープログラムを作成する際のハマりどころやそれに対する解析方法・解析ツール・対策を、実際の経験を交えながら紹介したいと思います。 筆者は(株)プリファードインフラストラクチャーでインメモリ分散検索エンジン「Sedue (セデュー)」を開発しています。モバイル向け検索エンジン「エフルート」や、2008/11/6にリニューアルされました「はてなブックマーク2」などの検索バックエンドとして使われております。 この検索エンジンはいくつかの常駐型サーバープログラムから構成されており

    hiromark
    hiromark 2009/04/07
    いくつかハマった経験がある。。。
  • Book: Debug Hacks

    TOPICS Hacks , Programming , Linux , Ruby 発行年月日 2009年04月 PRINT LENGTH 424 ISBN 978-4-87311-404-0 FORMAT PDF ミラクル・リナックス株式会社の精鋭エンジニアたちが、長年のLinuxカーネル開発の経験で培ったデバッグテクニックを詳解。こころがまえから、準備、必要な知識、バグの原因をすばやく特定し修正するために便利なテクニックとツール、高度なデバッグ技まで惜しみなく披露します。多くの事例に基づいた実際的実用的な技が満載です。効率良くかつクオリティーの高い開発のために必須の一冊です。 Debug Hacks推薦の言葉 プログラムにはバグが付き物です。バグは人間の予想を超えたところからやってきます。世界最初のバグは、リレー式計算機の中にまぎれこんだ蛾だったそうです。あわれリレーの間に挟まれた蛾に

    Book: Debug Hacks
    hiromark
    hiromark 2009/04/06
    なんだこのすごそうな一冊は。
  • straceを使ったデバッグ | OSDN Magazine

    プログラムが機能を果たせない場合には、有用なエラーメッセージを返し、問題を解決する手がかりを提供するのが理想的だ。しかし残念ながら、このような理想的な状況は珍しく、アプリケーションでエラーが発生したときに、手元に何の情報もないことも多い。 ここで、デバッグツールの登場だ。私にとってなくてはならないツールの1つが、straceだ。straceはシステムコールトレーサで、すでに実行されているプログラムによって発せられたコールを追跡する(straceを既存のPIDにバインドする)ことも、テストしたいプロセスをstraceに開始させることもできる。 では、straceの使い方を実例とともに見ていくことにしよう。 KDE起動時の問題 以前、私はKDEを起動する際の問題をデバッグしていた。返されたエラーメッセージからは、何の手がかりも得ることができなかった。 _KDE_IceTransSocketCr

    straceを使ったデバッグ | OSDN Magazine
    hiromark
    hiromark 2008/12/30
    strace、しばらく使ってなかったからすっかり忘れている。
  • 50回記念 バグ祓いまつり

    なかなか正体を現さないバグ.退治しても退治しても何度でも現れるバグ.初心者しかやらないような間抜けなバグ. プログラミングシンポジウムでは,50回の記念行事として,このように厄介な,しかし愛すべきバグたちの供養,バグ祓いを執り行うことになりました. お祓いしたいバグをお持ちの方は,下記の内容でお申し込みください.シンポジウム当日にお祓いします. バグのなまえ (戒名ではありません.故バグを一発で偲ぶことのできるよい名前をつけてください.) 出現箇所 (システム名称などのことです.ついでに地理住所が入っていてもバグを偲ぶことができてリアルです.) 出現状況 (なるべく抽象化してわかりやすく記述してください.分量は多くの人が閲覧の上,供養できるようにA4半ページ,最大でもA4 1枚以内に押えてください.) 命日 (ログや日記等を調べて,なるべく正確な日付を入れてもらえるとうれしいです.まだ生き

    hiromark
    hiromark 2008/11/05
    "このように厄介な,しかし愛すべきバグたちの供養,バグ祓いを執り行うことになりました"
  • Google、社内で活用しているログAPI glogを公開、強力なログ機能提供 | エンタープライズ | マイコミジャーナル

    glog - Logging library for C++ Google, Software Engineering Team, Shinichiro Hamaji氏はGoogle Open Source Blogにおいてglogを発表した。glogはアプリケーションレベルで活用するロギングAPIC++スタイルストリームのAPIを提供するほか、さまざまなヘルパーマクロを提供している。ライセンスは3条項BSDライセンス。 多くのソフトウェアは必ずといっていいほどバグを抱えており、バグを修正するためにはログデータが欠かせない。glogはそういった用途で活用するためのライブラリ。すでにGoogle社内で広く活用されているものとされている。シンブルでさまざまな機能を提供しており、コマンドラインからログの振る舞いを変更できるという特徴がある。 サポートしているシステムはFreeBSDやMac O

    hiromark
    hiromark 2008/10/15
    要チェック。
  • 『とれないバグをとれるようにする3つの方法』

    最近は、今進んでいるプロジェクトがもうすぐひと段落するので、僕はデバッグをがりがりすることが多いです。バグがあるときになって帰れないので、終電を逃すことが多く、最近は日記を更新できていませんでした(>ω<) 前々から、僕はけっこうプロジェクト終盤でもICPCでもデバッガーとなることが多いのですが、そのときにためた、バグをとるポイントなどまとめてみることにします。 といっても、GDBを使うととれるようなバグは、GDBを使えばとれますのであんまり難易度が高いものではありません。悩んでもなかなかみつからない、なかなかとれない類のバグをとるのが僕は好きですが、そのときに何を考えてとっているのかを紹介します。といっても、僕はここらへんのことは自己流なので、当然もっといい方法があると思っています。なので、コメントなど熱烈歓迎です!! 難しい類のバグをとる際に一番重要なのは、バグにかかわるあらゆる状況を

    hiromark
    hiromark 2008/07/30
    同意。
  • 今日は楽しいバグ修正の日 : 小野和俊のブログ

    昨日でこのところ取り掛かっていた大きな仕事が一段落したので、 今日からは待ちに待ったバグ修正の作業を始められる。 この1ヶ月、私はバグ修正がしたくてしたくてたまらなかった。 今朝は出社してすぐにバグレポートの一覧を表示して、 これは早く直さないとまずいな、とか、これはちょっと後でいいかな、とか、 レポートの内容を見ながら優先度順にバグを並び替えていく。 これからこれらのバグが次々に修正されていくのだと思うと、 もうこの時点でワクワクしてくる。 新しいソフトウェアのアイデアを考えるのは大好きだし、新機能を実装するのも大好きだ。 でもバグ修正には他の作業にはない独特の快感がある。 新しいソフトウェアを開発するのは見た目にも派手だし、世間の注目を集めやすい。 それに比べると既存のソフトウェアのバグ修正というのは地味で注目されない作業だ。 だが、バグ修正は確実に誰かの役に立つ。 もちろん、自分の考

    今日は楽しいバグ修正の日 : 小野和俊のブログ
    hiromark
    hiromark 2007/03/02
    かっこいい。
  • いやなブログ - スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl

    スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl スクリプト言語用の CUIのデバッガの使い方を簡単にまとめました。対象言語は Ruby, Python, Perl です。 私は C, C++ でプログラムを書いているときはデバッガ (主に GNU/Linux 上の gdb) を頻繁に利用します。しかし、スクリプト言語ではそれほどでもありません。これはおそらく次のような理由によります。 ビルドが不要なので printf デバッグが容易 (ある程度大きい C++ のプログラムではビルド時間が長いので printf の挿入はしんどい) 異常終了時にスタックトレースが表示される (Ruby, Python なら自動、Perl の場合は use Carp; $SIG{__DIE__} = \&Carp::confess; など) オブジェクトのインスペクトが簡単 (Ru

    hiromark
    hiromark 2007/02/13
    そういや、あんまりスクリプト言語でデバッガって使わないな、おいらも。
  • Backtraces (The GNU C Library)

    34.1 Backtraces A backtrace is a list of the function calls that are currently active in a thread. The usual way to inspect a backtrace of a program is to use an external debugger such as gdb. However, sometimes it is useful to obtain a backtrace programmatically from within a program, e.g., for the purposes of logging or diagnostics. The header file execinfo.h declares three functions that obtain

    hiromark
    hiromark 2006/05/01
    Backtrace 系の関数の説明。
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hiromark
    hiromark 2006/05/01
    使える。
  • カーソルの位置にデバッグ用のprintfを挿入 - higepon blog

    printfデバッグをする前にバグを出すな、デバッガを使え等のご意見があるかもしれませんが。。 cppのソースを編集中に、C-c dをすると printf("%s %s:%d\n", __func__, __FILE__, __LINE__); が挿入されます。 ソースを見れば分かると思いますがprintfでなくても何でもできます。 ちなみに手元ではprintfではなくTRACEマクロにしてます。 (defun my-insert-printf-debug () (interactive) (insert-string "printf(\"%s %s:%d\\n\", __func__, __FILE__, __LINE__);") (indent-according-to-mode) ) (add-hook 'c++-mode-hook (function (lambda () (def

    カーソルの位置にデバッグ用のprintfを挿入 - higepon blog
    hiromark
    hiromark 2006/02/13
    これ意外といい。
  • Cのプログラムの中でブレークポイントを設定する - bkブログ

    Cのプログラムの中でブレークポイントを設定する Cのプログラムをデバッグする際には GDB などのデバッガが役立ちます。通常、ブレークポイントはデバッガの中から設定しますが、デバッグ対象のCのプログラムの中で設定することもできます。 Linux なら #include <signal.h> して、任意の箇所に raise(SIGTRAP); を挿入すれば OK です。 raise() 関数を用いて SIGTRAP シグナルを発生させています。 あるいは x86 限定なら __asm__("int3"); でも OK です。ここでは SIGTRAP を発生させるために int3 (0xcc) 命令を埋め込んでいます。GDB もソフトウェア的にブレークポイントを設定するときは当該箇所に int3 を書き込んでいるので、やっていることは割と似ています (GDBの場合は int3 を書き込む部分の

    hiromark
    hiromark 2006/02/06
    この方法はこの方法で便利かも。覚えておこうっと。
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hiromark
    hiromark 2006/01/31
    Linux プログラミングにおけるデバッグのやりかたなど。
  • 普通のやつらの下を行け: 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

    hiromark
    hiromark 2005/10/25
    これはいいなぁ。早速このやりかたを導入しよ。
  • 1