デバッグログを作った話

ゲームを制作していると、この処理かかったときにログ出せればなあと思ったので、

WindowsAPIの機能を使ってデバッグログを作ってみました。

制作環境:

VisualStudio 2015

 

↓こんな感じに出力ウィンドウにログを出す。

f:id:Usushiki:20160529002930p:plain

 

 

 

 

 

  • 表示の仕方について


    表示処理はWindowsAPIのOutputDebugStringを使っています。
    しかしコイツには弱点があります。それは、文字列にしか対応していないこと。
    つまり、printf関数のような変数の中身を出したり、可変長の引数に対応したり
    といったことができません。

  仕様

    1. printfみたいに可変長引数に対応したい。
    2. どこから呼び出されたのか知りたい。(ファイル名,行数)
    3. 受け取った引数は最終的に文字列に変換。
    4. デバッグ実行時のみ機能させる。


  • ソース

    LogDefine.hpp - ログ定数ヘッダ
    Log.hpp           - ログ関数
    main.cpp

    [LogDefine.hpp]

    giste994e742bb7b23e948b355c81a3976c9

    [Log.hpp]

    gistdca25f6e934ba329f1a19beaa2733e02
    [main.cpp]

    github.com




    ついでにプロジェクト全体も

    github.com


  • 作り方について
    可変長の引数を実現するために、可変長テンプレートと再帰処理を使いました。引数がなくなるまでwstringstreamに流し込んでいます。使いたいときはLog.hppをインクルードするだけで使用できます。

   改善点

  1. wstringstreamに対応していない型だとエラーになる。
  2. 表示するログの種類分けをしたい。(エラー、警告、通常ログ)

 

 

 まだまだ改善の余地はありますが、参考になれば。


 参考サイト

可変長テンプレートを使った C++11 時代の可変長引数関数 | プログラマーズ雑記帳

__FILE__、__LINE__ 実行時エラーが出たファイルと行番号を知りたい

その3 デバッグウィンドウを知らないと大変です