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のときに、負の配列のサイズを取得しようとするのでコンパイル時にエラーになる。
これは目鱗だった。
ある配列のサイズが別の変数の大きさよりかならず大きい必要があるとか、そういう場合に一行書いておくと、将来的に拡張された場合などにビルドエラーになって検知できる。
・ポインタが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のときに、負の配列のサイズを取得しようとするのでコンパイル時にエラーになる。
これは目鱗だった。
ある配列のサイズが別の変数の大きさよりかならず大きい必要があるとか、そういう場合に一行書いておくと、将来的に拡張された場合などにビルドエラーになって検知できる。
コメント 0