-------------------------------------------------------------------------------- -- ホムデバッグライブラリ (Ver. 1.1) -- (可能な限りAIの付録ライブラリ) -- 標準のTraceAI ( ) は数分程でトレース情報が多くなりすぎてROクライアントが -- まともに動作できなくなるほど重くなります。 -- これはもうバグと言った方が正解です。(ろくにチェックもしていない) -- AIサイクル毎にファイルのオープン・クローズでも、ここまで重くなる筈が無い -- ので、何かバカなことをやっていると思います。(技術レベル低すぎ) -- デバッグするなら常時トレースONでも重くならないならかまわないわけで、 -- そのために本ライブラリを用意しました。 -- このライブラリを使えば重くなることは無いのですが、HDDの容量はそれなりに -- 用意してもらいたい。 -- これはWriteエラーの監視をしていないためです。 -- -- ○使用方法 -- メインのAI.luaなどから本ライブラリを以下の様に組み込みます。 -- (ライブラリをUSER_AIにおいた場合) -- require ("./AI/USER_AI/Debug.lua") -- それと、AI.lua 内 のエントリールーチン AI ( ) の入り口で -- DebugInit( ) -- 出口で -- SaveDebug( ) -- を呼びます。 -- この辺は可能な限りAI(0.8改版)を参照ください。 -- 可能な限りAI(0.8改2版)では、 -- DEBUG_TRACE = NO -- とすると通常の"./TraceAI.txt"に出力します。 -- DEBUG_TRACE = YES -- とすると、"./AI/Debug.txt" に出力します。 -- あとは、AI.luaなど TraceAI( ) と書かれている部分を全て Debug( ) と置き換えれも -- ば、( ) 内はそのままで動きます。 -- TraceAI( )のままにしておくと、全て"./TraceAI.txt"に出力されます。 -- 一応、AIのサイクル呼び出しタイムやAIのレスポンスタイムなどサイクル毎に -- 細かい数値を得られるようになっています。 -- このライブラリを使えば時間のズレが無くなっているので、もしかしたらTraceAI()の -- 問題だったかも知れません。 -- ↓こんな感じです。 -- AI Cycle=205[32sec] Interval=157ms(Total.32172ms) AI processing time 0ms -- -- -- 履歴 -- 日付 コメント Ver Edit -- 2006/12/24 First edition 1.0 horo -- 2006/12/25 /traceai でのON/OFFに対応 1.1 horo -- -- 本プログラムは自己責任で使用してください。(一切関与しません。) -- 改造・再配布される方は、↑履歴にきちんと修正内容を記録をお願い致します。 -- 特に連絡の義務はありませんが、下記のページに改変のコメントを頂ければ幸いです。 -- http://plaza.rakuten.co.jp/horoRAG -------------------------------------------------------------------------------- DEBUG_PATH = "./AI/Debug.txt" TRACEAI_PATH = "./TraceAI.txt" TRACE_SW = 0 AI_CYCLE_COUNT = 0 AI_CYCLE_TIME = 0 AI_OLD_TICK = 0 AI_OLD_TIME = 0 AI_START_TICK = GetTick() AI_START_TIME = os.time() function CheckTrace() local fp = io.open(TRACEAI_PATH, "r") if (fp == nil) then TRACE_SW = 0 else fp:close() os.remove (TRACEAI_PATH) TRACE_SW = 1 end end function DebugInit() DebugData = {} DebugCount = 0 AI_CYCLE_COUNT = AI_CYCLE_COUNT + 1 AI_TICK = GetTick() AI_TIME = os.time() if (AI_OLD_TIME ~= AI_TIME) then CheckTrace() end end function SaveDebug() if (TRACE_SW > 0) then local fp = io.open(DEBUG_PATH, "a") if (fp == nil) then return end if (AI_OLD_TIME == 0) then fp:write(string.format("\n\n** AI Cycle=1[0sec] Tick = %d os.time = %d) **", AI_START_TICK, AI_START_TIME)) else fp:write(string.format("\n-- AI Cycle=%d[%dsec] Interval=%dms(Total.%dms) AI processing time %dms --", AI_CYCLE_COUNT, AI_TIME - AI_START_TIME, AI_TICK - AI_OLD_TICK, AI_TICK - AI_START_TICK, GetTick() - AI_TICK)) end local i, v for i,v in ipairs(DebugData) do fp:write("\n ") fp:write(v) end fp:close() end if (AI_OLD_TIME ~= AI_TIME) then TraceAI(string.format("TRACE = %d", AI_TIME)) end AI_OLD_TICK = AI_TICK AI_OLD_TIME = AI_TIME end function DebugTrace(s) if (TRACE_SW > 0) then DebugCount = DebugCount + 1 DebugData[DebugCount] = s end end Debug = DebugTrace