デバッグログを作った話
ゲームを制作していると、この処理かかったときにログ出せればなあと思ったので、
WindowsAPIの機能を使ってデバッグログを作ってみました。
制作環境:
VisualStudio 2015
↓こんな感じに出力ウィンドウにログを出す。
-
表示の仕方について
表示処理はWindowsAPIのOutputDebugStringを使っています。
しかしコイツには弱点があります。それは、文字列にしか対応していないこと。
つまり、printf関数のような変数の中身を出したり、可変長の引数に対応したり
といったことができません。
仕様
- printfみたいに可変長引数に対応したい。
- どこから呼び出されたのか知りたい。(ファイル名,行数)
- 受け取った引数は最終的に文字列に変換。
- デバッグ実行時のみ機能させる。
- ソース
LogDefine.hpp - ログ定数ヘッダ
Log.hpp - ログ関数
main.cpp[LogDefine.hpp]
giste994e742bb7b23e948b355c81a3976c9
[Log.hpp]
gistdca25f6e934ba329f1a19beaa2733e02
[main.cpp] - 作り方について
可変長の引数を実現するために、可変長テンプレートと再帰処理を使いました。引数がなくなるまでwstringstreamに流し込んでいます。使いたいときはLog.hppをインクルードするだけで使用できます。
改善点
- wstringstreamに対応していない型だとエラーになる。
-
表示するログの種類分けをしたい。(エラー、警告、通常ログ)
まだまだ改善の余地はありますが、参考になれば。
参考サイト
可変長テンプレートを使った C++11 時代の可変長引数関数 | プログラマーズ雑記帳