assert:エラーが出た箇所でプログラムを無理やり途中で止める

assert.png

不変条件assertの特殊な形態である。

assertとは、単純に指定された論理式が真になっていなければならない、

なので、assertの中には真になってほしいことを書きましょう
assertは引数を評価して、結果が0(偽)になっていたら、abortを呼び出す。
assertは異常終了する前に、自分が含まれているソースファイルの名前と行番号を出力する。
だからデバッグに便利。

各言語のプログラムを無理やりとめる方法まとめ

include
C #include <assert> assert(!"文字")
C #include <stdlib> abort()
WinAPI MessageBox()
python import sys assert 条件式 "メッセージ"
Java assert,throw new RuntimeException("しっぱいだよーん");
Android 不明

Cの場合

#include <assert>
assert(!"メッセージ");

!をつけるのがポイント。
好きなところでプログラムを無理やりとめることができるぞ。

pythonの場合

assert 条件式 "エラーメッセージ"

条件式が偽のときにアサートで止めることができる。

#coding: UTF-8
import sys 
assert 0, "error message"
print "args[1]="+argvs[1]
Traceback (most recent call last):
  File "F:\sandbox\python\args.py", line 14, in <module>
    assert 0, "error message"
AssertionError: error message

try~catchで囲むこともできる
messageで変数と一緒にprintしたいならこうするしかないっぽい
#coding: UTF-8
import sys 
try:
   for c in range(5):
      print c
      assert c != 3#3になったらexceptへ行く
except:
   print "except: %d" % c

javaの場合

コンパイルオプションで設定してassert文を有効にする

java 1.4以降でサポートされている。

assert 評価式;//falseならばjava.lang.AssertionError;が投げられる。
assert 評価式 : エラーコード;

これだけではassertはひっかからない

プロジェクトを右クリック->Run as..->Run Configuration

でVM引数に-eaと書くと、assertが効くようになる

junitを使う

Android Developerのページにもあります。

package com.hiramine.asserttruesample;
 
import junit.framework.Assert;
import android.app.Activity;
import android.os.Bundle;
 
public class AssertTrueSampleActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.main );
 
        Assert.assertTrue( false );
    }
}

try catchでassertする

もしコンパイルオプションを変えずにassertをかけるの面倒ならば、

if(a==0) throw new AssertionError();

こう書くね。
どっちにしろ、どこかで
catch(AssertionError ae){
   System.out.println("assertionのキャッチ");
}

としないと、キャッチすることはできない。
もしVisualStudioみたいに、assertしたところを無理やり止めたいなら、
なるべく一番外側にcatch assertionErorを書いて、そこにBreakPointを貼っておくことかなぁ。
throw new RuntimeException("しっぱいだよーん");

debug

サポートサイト Wikidot.com debug