タグ

debugとCに関するcrafのブックマーク (9)

  • 普通のやつらの下を行け: 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

  • malloc(3)のメモリ管理構造 VA Linux Systems Japan

    malloc()といえばC言語ではお馴染みのライブラリで、最も良く使用されるライブラリの一つです。しかしその分だけ何らかの不具合を経験した人も多いのではないでしょうか。書ではmalloc()、free()で確保、解放されるメモリリソースが内部的にどのように管理されているかを説明していきます。mallocライブラリの仕様を理解する事で、ライブラリ使用時に何らかの不具合が発生した際の手助けになればと思います。 ここではLinuxディストリビューションで標準的に使用されているglibcのmallocライブラリを扱います。今回の調査では次の環境を使用しています。 ディストリビューション :Debian sarge パッケージバージョン :glibc-2.3.2.ds1-22 OS : i386 Linux 書では、上記の通りi386アーキテクチャの場合について記述しています。

  • メモリ破壊の現場を見つけるTips - I am Cruby!

    RubyAdventJP, GC, Ruby(この記事はRuby Advent Calendar jp: 2009 : ATNDの4日目です。前日はmrknさんでした) 健全なるRubyistであれば、RubyのGCをいじることが週に一度はあるでしょう。そのときに困るのが、GCをいじってしまったことによるバグの修正です。GCをいじるというのは想像以上に難しく、少しでも書き間違えるとメモリ破壊が発生します。そのときに使えるTipsをこの記事で書くことにします。 みなさんご存じの通り、メモリ破壊というのは原因を特定するのが困難です。これは問題が発覚する場所とメモリ破壊が起こった現場が位置的に遠いことに起因しています。偉大なるハッカーのまつもとさんですら、その発見は困難です。 [ruby-dev:38628] Re: [BUG: trunk] called on terminated objec

  • Technical Note TN2124: Mac OS X Debugging Magic

    このテクニカルノートでは、Mac OS X のさまざまな「隠れた」デバッグ機能、つまり環境変数、環境設定、GDB から呼び出し可能なルーチン、特別なファイルなどについて説明します。 Mac OS X 向けの開発をしている場合は、開発作業を楽にしてくれるものを見逃していないか確認するために、このリストに目を通してください。 はじめにMac OS X には、個々のサブシステムの開発とデバッグを支援するために、エンジニアリングチームが追加したデバッグ機能がいくつか含まれています。 これら機能の多くは、リリース後のシステムにも残っており、コードのデバッグに利用できます。 このテクニカルノートでは、広く役立つデバッグ機能をいくつか説明します。別の場所で文書化されているデバッグ機能については、機能の簡単な概要と既存ドキュメントへのリンクを記載しています。このテクニカルノートでは、デバッグ機能を網羅的に

  • Cowboy Programming » Debugging Memory Corruption in Game Development

    Definition:  Memory corruption is an unexpected change in the contents of a memory location. The symptoms of memory corruption can range from hard crashes, all the way through minor glitches, to no symptoms at all. The causes of memory corruption are many and varied, and include memory corruption itself.   In this article I attempt to classify the various ways in which memory corruption can man

  • 『コンパイルスイッチによるデバッグプリントの無効化』

    デバッグ用の Print 文や Assertion をコンパイルスイッチで無効化するということはよく行われます。 #ifndef NDEBUG #define TRACE(fmt, ...) printf(fmt, __VA_ARGS__) #else #define TRACE(fmt, ...) #endif しかし、上のような実装にしてしまうと、次のようなケースがリリースコンパイル時にエラーにならないということが起こります。 int a, b; ... TRACE("%d, %d, %d\n", a, b, c); ← c は未定義 もちろん、デバッグコンパイル時に「変数 c が定義されていない」といってコンパイラに怒られるので必ず気付くはずなのですが、ちょっとした変更だと手を抜いて片方のモードでしかコンパイルしないでチェックイン…なんてことをする人が現れて、事故が起こることもありま

    『コンパイルスイッチによるデバッグプリントの無効化』
  • hogetrace - 関数コールトレーサ - memologue

    でかいソフトウェアの、大量のソースコードを短時間で読む必要が生じたので、その補助ツールとしてptrace(2)ベースのLinux用関数トレーサを自作しました。こういうツール上でまずソフトウェアを実行してみて、どのファイルのどの関数がどういう順で呼ばれるか把握おけば、いきなりソースコードの山と格闘を始めるより楽かなーと思いまして。せっかく作ったので公開します。 http://binary.nahi.to/hogetrace/ straceはシステムコールだけ、ltraceは共有ライブラリ(DSO)の関数呼び出しだけ*1をトレースしますが、このツールは、実行バイナリ中の自作関数の呼び出しもトレースします。例えば再帰で1から10まで足し算するソースコードを用意して % cat recursion.c #include <stdio.h> int sum(int n) { return n ==

    hogetrace - 関数コールトレーサ - memologue
  • http://ml.tietew.jp/cppll/cppll/article/6880

  • John Robbins' Blog : CrashFinder 2.55: A Bug Fix and x64 Support!

    Thanks to Dave Scherer who reported a problem in CrashFinder where the 32-bit version running on x64 wasn't properly handling the WOW64 version of NTDLL.DLL because it is missing the import table. In doing the fix I figured it was the time to produce an x64 version of CrashFinder. Download the code here. As always, let me know if you find a problem. My mail address is 'john' at this company. Comme

  • 1