SlideShare una empresa de Scribd logo
1 de 58
ヽ( `Д´)ノ 俺の話を聴けぇ! エラーハンドリング
エラーハンドリング Boost.勉強会 #3 関西 ( 2010-10-23 )
概要 エラーハンドリングの重要性 C++でのエラーハンドリング エラーハンドリング設計 エラーハンドリング Boost.勉強会 #3 関西 3 `Д´)ゝ
お断り またBoostの話じゃありません! エラーハンドリング Boost.勉強会 #3 関西 4 (´∀`
ここで言うエラーとは? assert や例外も含めた割と広義なエラー 文脈によって、多少、指し示す意味の範囲が変化します。 エラーハンドリング Boost.勉強会 #3 関西 5 |`Д´) ・・・。
発表者前科 「luciferの設計コンセプトと導入予定の機能紹介」 「バグベアード入門」 「並列プログラミング 入門!&おさらい!」 「マスタリング バベル」 エラーハンドリング Boost.勉強会 #3 関西 6
エラーハンドリングの重要性 エラーハンドリング
直接的には意味がない エラーハンドリングはプログラムの主目的とは直接関係がないものであり、エラーハンドリングが一切なくともプログラムは正常に動作できないことはありません。 いくらエラーハンドリングを頑張っても直接的に主機能の性能がよくなったり機能が増えることはなく、直接的には非常に非生産的。 エラーハンドリング Boost.勉強会 #3 関西 8 アゥ (´Д`;
正常系 < 異常系 直接的には意味がないとはいえエラーハンドリングはプログラムに欠かかすことができない要素。 よく言われるようにしっかりと作り込まれたプログラムでは通常、「正常系のコード量よりも異常系のコード量が多い」くらい。 現実的にはエラーハンドリング(異常系)こそ、プログラムの主体と言えないこともない。 エラーハンドリング Boost.勉強会 #3 関西 9 キリッ(`・ω・´
エラーが起きるのは当然 ハードウェアは経年変化により必ずいつかは物理的に破損する。 昨今はネットワーク越しに処理を分散したりするのが当たり前になってきてる。 ネットワークを利用すればエラーの発生率は跳ね上がる。 将来的には低価格化・高速化の為に演算結果の確実性が若干損なわれたチップが主流になる可能性もある。 エラーハンドリング Boost.勉強会 #3 関西 10 狭い (´Д`;
人間もミスをする ユーザー、システム管理者、プログラマはいずれもミスを犯す。 エラーハンドリング Boost.勉強会 #3 関西 11 人間だもの。 (´∀`
エラーは損害をもたらす 適切なエラーハンドリングを怠ると、状況によっては 「データ破損」、 「システム破損」に留まらず「人の死傷」、「工場の爆発事故」と言った非常に致命的で甚大な損害さえもたらすことがあります。 エラーハンドリング Boost.勉強会 #3 関西 12 gkbr (((゚Д゚;)))
一番に利益を得るのはプログラマ 始めからしっかりエラーハンドリングをやっておけばプログラムの開発中からリリース後のサポートに至るまで原因不明の問題の惑わされると言った状況が減る。 原因調査は手間と時間を喰うものであり、エラーハンドリングに賭けた手間と時間は割に合いやすい。 最終的にどのみち実装する必要のあるエラーハンドリングは最初からやっておいたほうがお得。 エラーハンドリング Boost.勉強会 #3 関西 13 (^ω^
エラーハンドリングの重要性 直接的には意味がない 正常系<異常系 エラーが起きるのは当然 人間もミスをする エラーは損害をもたらす 一番に利益を得るのはプログラマ エラーハンドリング Boost.勉強会 #3 関西 14 キリッ(`・ω・´
C++でのエラーハンドリング エラーハンドリング
assert 使用例: エラーハンドリング Boost.勉強会 #3 関西 16 intget_value(hoge_type * hoge) { assert(NULL != hoge);  // 絶対に成立するハズの条件を断言(assert)する。     return hoge->value; }
assert バグ検出の為の機能。 リリース版ではコンパイル時のオプションで NDEBUG マクロを指定することで除去できるし、除去される。 パフォーマンス的に問題になるようなチェックをやってもリリース版には影響しないので、気軽に assert を挿入できる。 リリース版でもチェックするべき内容であれば assert とは別にエラーハンドリングを記述する必要がある。 エラーハンドリング Boost.勉強会 #3 関西 17
_DEBUG と NDEBUG _DEBUG マクロはデバッグ版で定義されるマクロで、 NDEBUG マクロはリリース版で定義されるマクロ。 assert のようにデバッグ版とリリース版で挙動を変えたい場合はCプリプロセッサのディレクティブでこの二つのマクロの定義状況を条件にC++のコードを切り替えます。 assertでチェックしたい内容が簡単な条件式で収まらない場合に、assert同様にデバッグ版のみで動作するチェック用コードを記述できます。 エラーハンドリング Boost.勉強会 #3 関西 18
assert 問題の早期検出に。 絶対に成立しなければならないハズの条件を記述するだけ。 エラーハンドリング Boost.勉強会 #3 関西 19
assert assertで指定される条件式がfalseになるとC++のプログラムはそのassertが記述されているファイル名(__FILE__)と行番号(__LINE__)と条件式とその条件式が成立しなかった旨のメッセージを表示後、強制的に終了します。 メッセージの表示形式等は処理系に依存し、一般的にコンソールアプリであればコンソール上に、GUIアプリではポップアップダイアログで表示されます。 エラーハンドリング Boost.勉強会 #3 関西 20
assert assertの条件式が成立しなかった場合のこのメッセージの表示に落とし穴があり、特にバックグラウンドで動作するプログラムにおいてはプログラマ/ユーザーがアクセスできるハズのないコンテキストでプログラマ/ユーザーの確認待ちをすることがあり、この状況に陥るとただフリーズしてしまったようにも見えます。 エラーハンドリング Boost.勉強会 #3 関西 21
assert assert の条件式だけでは、その条件式が成立しないことがなぜ駄目なのかなどと言ったことが分かりにくいであろう場合には次のように条件式に説明文を混ぜ込むことで条件式が成立しなかった場合に表示されるメッセージに説明文を挿入することもできます。 エラーハンドリング Boost.勉強会 #3 関西 22 assert("hogeは必ず指定してください。" && NULL!=hoge);
assert assert は通常次のようなマクロと条件式が成立しなかった時にメッセージを表示して終了するだけの極簡単な関数で構成されます。 エラーハンドリング Boost.勉強会 #3 関西 23 #ifdef NDEBUG #define assert(X) ((void)0) #else #define assert(X) assert_body(X, #X, __FILE__, __LINE__) #endif
assert assertは簡単に自作できるので、独自のassertを実装して利用するのもままある話で、関数名、ビルド番号、コンパイル日時(__DATE__ + __TIME__)などをメッセージに付加したり、ログファイルに記録を残したりするのも実用的です。 エラーハンドリング Boost.勉強会 #3 関西 24
static assert 標準の assert は実際にそのコードが呼び出されなければ問題を検出できないが、static assert であればコンパイル時に問題を検出可能。 特にマクロ絡みやクラステンプレートおよび関数テンプレートの実装などでコンパイル時に問題を検出したくなることがあります。 配列の要素数は最低でも一つなければエラーになるという性質を利用。 エラーハンドリング Boost.勉強会 #3 関西 25 int static_assert[(int)(bool)(条件式)];
例外処理 使用例: エラーハンドリング Boost.勉強会 #3 関西 26 intget_value(hoge_type * hoge) {     try {         if (NULL == hoge)         { throw std::exception();         }         return hoge->value;     } catch(std::exception)     {         return 0;     } }
例外処理 Java なんかと違って C++ は値なら型を問わずなんでもなげられる。 ※ただし、コピーができない値は除く。 throw; で再送出 継承元のクラスでも catch できる。 operator T() の T では catch できない。 気持ち的にはコンセプトのようなもので catch したいけどそれはできない。 例外処理の仕組み的にダックタイピングが適してるんだけど・・・ エラーハンドリング Boost.勉強会 #3 関西 27
例外処理 例外仕様は非推奨。 共通の例外処理関数 ダブルフォールトで terminate(); what() 標準ライブラリのメッセージは使えたものじゃない。 NUL文字終端文字列ならなにを入れてもいいことになってるよ。 UTF-8を入れる場合は先頭にUTF-8のBOMを挿入することで、他と区別するといいよ。 エラーハンドリング Boost.勉強会 #3 関西 28
例外処理 what() 標準ライブラリのメッセージは使えたものじゃない。 NUL文字終端文字列ならなにを入れてもいいことになってます。 UTF-8を入れる場合は先頭にUTF-8のBOMを挿入することで、他と区別可能。 finaly標準ではないんだけど、事実上 C++ にはfinally がある。 Windows では catch(...) で一般保護違反すらも拾えるけど、 Linuxではシグナルを拾えないよ。 例外安全 コンストラクタとデストラクタで例外送出する場合の話。 エラーハンドリング Boost.勉強会 #3 関西 29
Boost系 いろいろ Boost 版でも用意してくれてるみたいだから自分で調べてみてください。 エラーハンドリング Boost.勉強会 #3 関西 30 ごめん! 人(´Д`;
エラー付き戻り値テンプレート DigitalGhostさんのエラー付き戻り値クラステンプレート http://d.hatena.ne.jp/DigitalGhost/20090413/1239646614/ 本来の戻り値の型をラップするクラステンプレートで、本来の戻り値の型の値、あるいはエラー情報としてその他の型の値を呼び出し元に返却できる。 エラーハンドリング Boost.勉強会 #3 関西 31
trickerr.h trickerr.hはワシが作った! http://tricklib.com/cxx/dagger/trickerr.h エラーハンドリング Boost.勉強会 #3 関西 32
trickerr.h エラークラスを throw でき、処理漏れを防ぎやすい。 且つ、catch されなかったからと言って必ずしも異常終了させなくて済む。 throw型なので、関数インターフェイス等に縛られない。 catch を行うリスナークラスは場面に応じた拡張が可能でエラーハンドリング処理を共通化しやすく、ネストも可能。 処理の継続/中断をリスナークラスで制御可能。 catchされなかったエラーについてはエラークラス側で制御可能。 エラー情報をツリー構造で扱える。 エラーハンドリング Boost.勉強会 #3 関西 33
trickerr.h trickerr.h最高! これにはもう自画自賛を惜しみません! エラーハンドリング Boost.勉強会 #3 関西 34
みんな大好きC++0x! C++0xが嫌いなC++erなんていません!
exception_ptr 例外オブジェクトに対するスマートポインタで、catch 句を抜けた後でもこのexception_ptrにより例外オブジェクトを保持できます。 current_exception() 現在 throw されてる例外オブジェクトを保持する exception_ptrを取得する。 rethrow_exception() 引数で渡された exception_ptrが保持している例外オブジェクトを再送出する。 make_exception_ptr() 引数で渡されたオブジェクトを保持する exception_ptrを返す。 エラーハンドリング Boost.勉強会 #3 関西 36
nested_exception ネストされた例外オブジェクト nested_exception::rethrow_nested() ネストの内側の例外オブジェクトを再送出。 nested_exception::nested_ptr() ネストの内側の例外オブジェクトを保持する exception_ptrを返す。 throw_with_nested() 引数で渡されたオブジェクトがnested_exceptionを継承している場合はそのまま、されていない場合は元の型とnested_exceptionの両方を継承している型で例外を送出する。 rethrow_if_nested() 引数で渡されたオブジェクトがpublicにnested_exceptionを継承している場合にのみそのrethrow_nested()を呼び出します。 エラーハンドリング Boost.勉強会 #3 関西 37
エラーハンドリング設計 エラーハンドリング
エラーの定義 そもそもエラーってなに? エラーハンドリング Boost.勉強会 #3 関西 39
エラーの定義 契約に基づく設計(DbC)的には事前条件・事後条件・不変条件を満たせない場合に発生するのが例外 でもそれもある意味事後条件であり、矛盾してない? エラーハンドリング Boost.勉強会 #3 関西 40
エラーの定義 正常であるとされる状態の影 正常ではない状態としか定義できない。 エラーハンドリング Boost.勉強会 #3 関西 41
エラーの定義 エラーの本質 隙間に潜む エントロピーが高い。 所以にエラー周りを事前に設計しきることは現実的ではない。 エラーハンドリング Boost.勉強会 #3 関西 42
エラーの検出 サブファンクション・他からのエラー通知 照合 入力チェック 処理結果チェック ここで言う処理結果は途中経過を含む エラーハンドリング Boost.勉強会 #3 関西 43
エラーの通知 戻り値 グローバル変数 assert assertさんは、実際には検出から処理までを一手に担うパッケージ 例外処理 コールバック関数 他 メッセージキュー ログ エラーハンドリング Boost.勉強会 #3 関西 44
エラーの処理 通知・記録 呼び出し元へ 最終的には人への通知 プログラマ 管理者 ユーザー 問題解決 再試行 別案・次善策 中断 無視 エラーハンドリング Boost.勉強会 #3 関西 45
自動伝播と隔壁 例外処理機構によって送出された例外は捕捉されるまで呼び出し元を遡っていく。 これは捕捉されるまでどんどん自動で処理が中断されていくことを意味する。 自動伝播であるべきかどうかは呼べ出し側のコンテキストに依存する。 全く同一の処理内容であっても、呼び出し側のコンテキストにより、自動伝播が望ましい場合と、そうでない場合がある。 エラーハンドリング Boost.勉強会 #3 関西 46
自動伝播と隔壁 自動伝播じゃないと見落としちゃ困るエラーを見逃しやすくなる お金の計算をするようなソフトウェアでは1円でも間違えると大変なことになる。なにか問題があった場合はスルーされるよりは異常終了してくれたほうが嬉しい。 かと言ってそれを前提にすると今度は些細な問題でシステム全体が停止することになってしまう為、自動伝搬に対する隔壁は必須。 ゲームなんかで1フレームの描画が少し乱れたぐらいの問題で異常終了してもらっちゃ困る。 エラーハンドリング Boost.勉強会 #3 関西 47
自動伝播と隔壁 自動伝播と隔壁をうまく両立させることが重要。 trickerr.hを使えばリスナークラスで制御可能! エラーハンドリング Boost.勉強会 #3 関西 48
フェイルソフト エラー忘却型コンピューティングとほぼ同義。 問題がおきてもその影響を最小限にしてシステム全体の稼働率を向上させる設計、作りのこと。 エラーハンドリング Boost.勉強会 #3 関西 49
フェイルセーフ 問題が起きた際に致命的な損害を起こしうるシステムなどでよく適用される、安全を重視したエラーハンドリングを行う設計、作り。 エラーハンドリング Boost.勉強会 #3 関西 50
超例外原理主義 エラーハンドリングを真面目にやると必ずエラー情報はツリー構造を形成させる必要がある。 trickerr.hなら対応しt(略 エラー状況を詳細に知るにはエラーに関する情報でなく正常に終了した処理に関する情報も必要。 いくつかの処理がまとめて実行される場合、エラー情報だけでは、それ以外の処理が正常に終了したのか?あるいはエラーが発生したことにより中断され実行されなかったのか?と言ったことがわからなくて困ります。 エラーハンドリング Boost.勉強会 #3 関西 51
不具合仕様書のススメ 許容する不具合、許容しない不具合について明記する。 許容する不具合の場合について、どの程度の不具合までを許容するのかを明記。 アプリが落ちるのはいいけど、ファイルを破損させちゃダメよ。とか。 このドキュメントがしっかりしていれば、オーバーエンジニアリングやアンダーエンジニアリングを未然に防げる。 異常系のテストケース作成の為にも本来必要な情報。 エラーハンドリング Boost.勉強会 #3 関西 52
簡潔主義 完璧主義より簡潔主義 簡素なものであればコストも対してかからない。 多くの場合それで事足りるし、そうでない場合にもコストがかかっていないのでロストはしれている。 サクッと曲がりなりにも一通りのものを揃えれば、そのほうが手前と時間をかけるべきところに注力できる。 エラーハンドリング Boost.勉強会 #3 関西 53
簡潔主義 最初は碌にエラーハンドリングをやらなくてもいい。 しかし、認識するべきエラーを認識できなかった為に大きなロストが発生することも無視できない。 後でインターフェイスや最悪大枠のフローの大幅な回収が入るとしても、assertや例外送出まではしっかりやっておくべき。 エラー処理は必用に応じて書き足していく。 一方で、このスタンスは特に例外送出を行う場合に、些末な問題によりソフトウェアの稼働率を下げかねない点に留意 エラーハンドリング Boost.勉強会 #3 関西 54
ブラッシュアップ リファクタリングと同じようにエラーハンドリングも常により最適な状態にブラッシュアップしていくことが必要。 その為のワークフローを確立することも必要。 エラーハンドリング Boost.勉強会 #3 関西 55
エラーハンドリングの在り方 エラーハンドリングそのものは別にプログラミングに限った話ではなく、実世界上の様々な問題がどの様に処理されるかと言ったことは、プログラミング上のエラーハンドリングの参考になり得るし、またプログラミング上のエラーハンドリングは実世界上のエラーハンドリングの参考になり得ます。 エラーハンドリング Boost.勉強会 #3 関西 56
質疑応答 エラーハンドリング ●~* (`Д´;
ご静聴ありがとうございました! エラーハンドリング ヽ(´∀` )ノ

Más contenido relacionado

La actualidad más candente

良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理KageShiron
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 

La actualidad más candente (20)

良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 

Destacado

C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門道化師 堂華
 
Bodlogiin code
Bodlogiin codeBodlogiin code
Bodlogiin codeorgil
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に信之 岩永
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版信之 岩永
 

Destacado (7)

C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門
 
Bodlogiin code
Bodlogiin codeBodlogiin code
Bodlogiin code
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 
C#とaop
C#とaopC#とaop
C#とaop
 

Similar a エラーハンドリング

C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編道化師 堂華
 
わんくま東京#38 LT 「Func<> と ref / out 小咄」
わんくま東京#38 LT 「Func<> と ref / out 小咄」わんくま東京#38 LT 「Func<> と ref / out 小咄」
わんくま東京#38 LT 「Func<> と ref / out 小咄」Takeshi Kiriya
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26Yoshihisa Ozaki
 
プログラミングで言いたい聞きたいこと集
プログラミングで言いたい聞きたいこと集プログラミングで言いたい聞きたいこと集
プログラミングで言いたい聞きたいこと集tecopark
 
プログラミングで言いたいこと聞きたいこと集
プログラミングで言いたいこと聞きたいこと集プログラミングで言いたいこと聞きたいこと集
プログラミングで言いたいこと聞きたいこと集tecopark
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 

Similar a エラーハンドリング (20)

C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
app-c.odp
app-c.odpapp-c.odp
app-c.odp
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
C++ tips4 cv修飾編
C++ tips4 cv修飾編C++ tips4 cv修飾編
C++ tips4 cv修飾編
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
C++14言語編
C++14言語編C++14言語編
C++14言語編
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編
 
わんくま東京#38 LT 「Func<> と ref / out 小咄」
わんくま東京#38 LT 「Func<> と ref / out 小咄」わんくま東京#38 LT 「Func<> と ref / out 小咄」
わんくま東京#38 LT 「Func<> と ref / out 小咄」
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
 
プログラミングで言いたい聞きたいこと集
プログラミングで言いたい聞きたいこと集プログラミングで言いたい聞きたいこと集
プログラミングで言いたい聞きたいこと集
 
プログラミングで言いたいこと聞きたいこと集
プログラミングで言いたいこと聞きたいこと集プログラミングで言いたいこと聞きたいこと集
プログラミングで言いたいこと聞きたいこと集
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 

Más de 道化師 堂華

Reflection with xamarin.forms
Reflection with xamarin.formsReflection with xamarin.forms
Reflection with xamarin.forms道化師 堂華
 
独りガラパゴス開発
独りガラパゴス開発独りガラパゴス開発
独りガラパゴス開発道化師 堂華
 
エラーハンドリングモデル考察
エラーハンドリングモデル考察エラーハンドリングモデル考察
エラーハンドリングモデル考察道化師 堂華
 
マスタリング バベル
マスタリング バベルマスタリング バベル
マスタリング バベル道化師 堂華
 
並列プログラミング 入門!&おさらい!
並列プログラミング入門!&おさらい!並列プログラミング入門!&おさらい!
並列プログラミング 入門!&おさらい!道化師 堂華
 
LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介道化師 堂華
 

Más de 道化師 堂華 (9)

Reflection with xamarin.forms
Reflection with xamarin.formsReflection with xamarin.forms
Reflection with xamarin.forms
 
独りガラパゴス開発
独りガラパゴス開発独りガラパゴス開発
独りガラパゴス開発
 
C++ tips1 #include編
C++ tips1 #include編C++ tips1 #include編
C++ tips1 #include編
 
エラーハンドリングモデル考察
エラーハンドリングモデル考察エラーハンドリングモデル考察
エラーハンドリングモデル考察
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
マスタリング バベル
マスタリング バベルマスタリング バベル
マスタリング バベル
 
並列プログラミング 入門!&おさらい!
並列プログラミング入門!&おさらい!並列プログラミング入門!&おさらい!
並列プログラミング 入門!&おさらい!
 
バグベアード入門
バグベアード入門バグベアード入門
バグベアード入門
 
LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介
 

エラーハンドリング