C++ デバッグ/エラー処理
目次
コーディング規約など
Cpplint
- Google C++ スタイルチェッカー:cpplint
- “Single-parameter constructors should be marked explicit.”
- 暗黙のコンストラクタを呼び出さないように宣言に explicit を付ける
-
コーディング例
```cpp class Example { public: explicit Example(double arg); }; ```
例外処理
-
基本
#include <iostream> #include <stdexcept> double divide(double a, double b){ if (double b == 0){ throw std::runtime_error("Error: Cannot divide by zero."); } return a / b; } int main(int argc, char* argv[]){ if (argc != 3) { std::cerr << "Error: Please input two args." << std::endl; exit(1); } double ans; try { ans = divide(argv[1], argv[2]); } catch (const std::runtime_error &e) { std::cerr << e.what() << std::endl; exit(1); } std::cout << "Ans = " << ans << std::endl; return 0; } - 例外クラス
- 例外の再送出
Segmentation Fault の解決
- デバッガを用いる方法
- ブレークポイントなしでデバッガ起動
- 「例外の発生」箇所から、コールスタックで呼び出し元を辿る
- 呼び出しに関連する変数チェック
- 「例外の発生」箇所に「条件付きブレークポイント」を設置
- デバッガの再起動
- 例外処理を用いる方法
- 上記「デバッガを用いる方法」で例外の発生箇所を特定
- 「例外発生が確定する箇所」と「例外が発生する箇所」の間で
throw - 呼び出し元で catch して呼び出しに関連する変数を
std::cerrに出力 - 更に呼び出し元を辿る場合は終了せずに再度
throw