Aritalab:Lecture/Programming/Debug
From Metabolomics.JP
Contents |
Debugの仕方
Print Debug
いわずと知れた、print文をプログラムの随所に挟むデバッグ法です。
#ifndef NDEBUG
Assert Debug
assertとは「主張」の意味で、プログラム実行中にtrue/falseを検証するために使います。 assert文で検証するのは「真とみなされる論理式」である点に注意してください。
Javaの場合
Javaの場合は、エラーメッセージを出力することができます。
assert denominator != 0 : "Division by zero!";
C++の場合
C++のassert文は以下のようにして使えます。
/* #define NDEBUG */ #include <assert.h> : : assert( ...);
直前のNDEBUGをコメントアウトすると、No Debugの意味でプログラム中のassert文を全てコンパイル時に無視します。 つまり、ソースプログラムを変更しなくても実行速度が落ちないデバッグを実現できます。 しかし、この文はエラーメッセージを出さないので使いづらいです。
以下のようなマクロを自分で定義すると良いでしょう。
#define ASSERT( condition, message ){\ if ( !(condition) ) { \ Error( "Assertion: ",(message),\ (__FILE__),(__LINE__) ); \ exit( -1 ); } } static void Error (const char* label, const char* msg, const char* fname, const int line) { //最低限の処理 printf("%s %s %s %d", label, msg, fname, line); }