SSブログ

LinuxカーネルのBUG_ONとか [Linux]

たまにドライバ書いたりすると忘れるのでメモ

・ポインタがNULLであることは想定上はありえない(はず)
・が、開発版や、開発していて仕様が変わるともしかしたらNULLが入ってしまうかもしれない

なんてときにWARN_ON/BUG_ONを使うとよい

WARN_ONやBUG_ONはconditionをひとつとって真のときにクラッシュログを出してくれる
コールスタックとソースコードの位置が出てくるので開発に便利。
WARN_ONの場合はカーネルが停止しないので警告を出してくれるだけなのでこっちのほうが使いやすいかもしれない。

前もって条件分岐されている場合は、WARNやBUGを使う。

上記は、実際に動作させた場合だが、staticに判定出来る場合はBUILD_BUG_ONを使う。

実装は sizeof(char[1 - 2 * !!(condition)]) というマクロらしい

conditionが1のときに、負の配列のサイズを取得しようとするのでコンパイル時にエラーになる。
これは目鱗だった。

ある配列のサイズが別の変数の大きさよりかならず大きい必要があるとか、そういう場合に一行書いておくと、将来的に拡張された場合などにビルドエラーになって検知できる。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。