hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
HspCmd/logmes - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

logmes

HSP2.61のlogmesはメッセージをファイルに書き出しました(知らなかった!)が、HSP3.0aではデバッグウィンドウを表示していると logmesを使ってもファイルには書き出されず、デバッグウィンドウに書き出されます。

ウィンドウが小さくて見難い、行番号を確認したい、などという場合には不便です。
そこでこんなマクロを作ってみました。

汎用的に使えるようにログファイルの名前はコンパイル対象のファイルに拡張子 ".log" をつけたものになります。

logmes 改1

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#module "mylog"
#undef logmes
 
#define global logini \
    logname@mylog = getpath(__FILE__,1)+".log":\
    bsave logname@mylog, str_log@mylog, 0, -1
 
#define global logmes(%1) \
    logmes@hsp %1:\
    str_log@mylog = "#"+strf("%%8d",__LINE__)+" ["+__FILE__+\
                    "] ("+__DATE__+") ("+__TIME__+")\t|>"+%1+"\n":\
    bsave logname@mylog, str_log@mylog, strlen(str_log@mylog), p_log@mylog: \
    p_log@mylog += strlen(str_log@mylog)
 
#global

logmes 改2

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#module "mylog"
#undef logmes
#deffunc logini
    logname = getpath(__FILE__,1)+".log"
    bsave logname, log, 0, -1
    return
#deffunc _logmes str msg, int row
    logmes@hsp msg
    log = "#"+strf("%d",row)+" ["+__FILE__+"] ("+__DATE__+ ") ("+__TIME__+")|>"+msg+"\n"
    bsave logname, log, strlen(log), p
    p += strlen(log)
    return
#define global logmes(%1,%2=__LINE__) _logmes %1, %2
#global

こちらはぷまさんに言われて作ったモジュールバージョンです。

モジュール内に__LINE__を書いた場合、コンパイル前のプリプロセッサ処理で__LINE__がその行番号に置換されてしまうので、 そのままでは書き出す行番号が固定になってしまいます。

ぷまさんとこではそういう理由でマクロにしましたと言ってるけど、だったら行番号をモジュールに渡しちゃえばいいじゃない?とか自分で思いました。

ただし、logmesに行番号を受け取るパラメータを用意しちゃうと元と書式が変わってしまうので・・・そこで新規命令はlogmesではない名前で定義します。(例えば_logmes)
そしてこの_logmesに行番号を渡すための置換マクロをlogmesとして公開します。 置換マクロlogmesは第二パラメータを省略することで自動的に__LINE__を付加して_logmesに渡します。

実際には__LINE__が渡されるのではなくプリプロセッサで置き換えられた行番号が渡されるのでこれでOKです!
やっぱりモジュールの方が見易いよねぇ〜^^

コメント

  • 行番号は8桁固定です。固定じゃなくしたほうがいいという場合は文字列操作で可変幅にすることもできます。 -- kz3 2005-10-22 15:21:09 (土)
  • が、printf("%*d",w,num);などのように「*」を使って幅を指定できると便利なのですが・・・(以外と「*」は知られていない?!) -- kz3 2005-10-22 15:22:01 (土)
  • 申し遅れました。今日はぷまさんの掲示板へ行ってネタを拾ってきましたorzでもスクリプトは自作ですので [smile2] -- kz3 2005-10-22 15:23:04 (土)
  • このマクロ結構使えますね、使わせてもらいます。 -- QIG 2005-10-22 18:18:01 (土)
  • それにしても、なぜlogmodeがなくなったんでしょうか? 便利だったのに・・・orz -- QIG 2005-10-22 18:18:27 (土)
  • logmodeなんて命令まであるとは!履歴付き実行はいつもメニューから・・・;; -- kz3 2005-10-22 22:42:54 (土)
  • (それから)あっQIGさんこんばんわ〜^^ -- kz3 2005-10-22 22:45:03 (土)
  • こんばんは〜 初編集に見えて、実は初でなかったりします。 -- QIG 2005-10-23 00:12:21 (日)
  • コマンドラインコンパイラのソースを勝手に編集してます。 -- QIG 2005-10-23 00:12:51 (日)
  • logmodeは便利でしたよ。HSPのやってることがすべて読み取れるんですから。 -- QIG 2005-10-23 00:14:14 (日)
    • 編集してたのはQIGさんだったんですね!教えてくれてもいいのに〜(・公・; 笑い -- kz3 2005-10-23 08:38:43 (日) -- kz3 2005-10-23 08:38:43 (日)
  • 初めはこちらで実現しようかと思ってたんですが、結局独自に作ってしまいました・・・。 -- QIG 2005-10-23 23:37:39 (日)
  • んむ?!logmesですか?ログは人によって必要な情報が違うのでバシバシ加工してくださいな!とりあえずラップ命令(ラップ関数といいたい)の作り方みたいなのをHSP3掲示板で習ったので・・・。(#undefがそうです。) -- kz3 2005-10-24 12:31:44 (月)
  • まぁでも#undefしなくてもマクロが定義できればいいわけだから
      1
    
     
    
        #define _logmes(%1) ...
    と定義しておけば標準命令と何か区別されているんだな、って視覚的に分かってそっちのほうが良かったり・・・。 -- kz3 2005-10-24 14:52:30 (月)
  • logmsg って、MS-DOSでいうところのパイプみたいなもの? Cコンパイラのすごいエラーメッセージを、ファイルに記録するのに使ってたけど...。 -- hiroki? 2005-10-26 08:23:04 (水)
  • いや・・・たしかstderrでしたっけ・・・標準エラー出力。それとは多分違うような・・・。 -- kz3 2005-10-26 08:49:24 (水)
  • いまいちlogmsgの使い方が解りません。 いつでもいいから教えてね。 -- hiroki? 2005-10-26 09:38:17 (水)

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:27:12 (2436d)