簡潔かつ乱暴に説明すると、このモジュールは printf デバッギングを簡単且つゴージャスに行う為のものです。
バグベアードはC++プログラマの目となり、その膨大なログで大半のバグを丸裸にします。
なぜ、ビ○ルダーでもゲイザーでもスズキドゲザエモンでもアスコモイドでもスカイラインでもなくバグベアードなのか? それはもちろん "不具合" という意味と "盗聴器" という意味を持つ "bug" をその名に含むからです。 って、そーじゃなくて、なぜ、デバッガじゃなく良識あるプログラマには一般的に悪しき事とされる printf デバッギング用ロガーであるバグベアードなのか? ということについて少々説明しておきます。
最初に断っておきますが、「バグベアードがあればデバッガは不要」などと言うつもりもありませんし、情報収集のアスペクトが直交する(※)関係になるのでむしろデバッギングツールとしては相補する関係になると考えます。
※ある瞬間のシステム全体の情報...いわば空間に対して強いデバッガと、時間に対して強いバグベアードはその情報収集のアスペクトが直交します。
デバッガにはデバッギングの為のツールとしてはあまり頂けない次のような問題があります。
他のも問題はあるでしょうがこれらの問題に対しバグベアードでは次のようになります。
またバグベアードを利用すればソースコード修正後の動作確認もステップ実行の代わりにただ実行してログを確認するだけで済ませるというお手軽なスタイルを採用することもできます。
バグベアード固有の問題についても以下に挙げておきます。
バグベアードにより出力されたログを追跡してデバッグする際は高速な検索ができるビューア(テキストエディタ)を使用することを強く推奨します。 バグベアードが出力するログは非常に膨大になりますので検索性能の差が残酷なまでに現れます。 例えば、約200MBのログの末尾に現れる文字列を Notepad++ で検索したところ約 3 分 30 秒もかかってしまいましたが、同じ環境下でサクラエディタで検索すれば 2 秒もかかりませんでした。その性能差は実に100倍以上にすら及びます。
┌────────────────────────────────────── │日付&時刻:2008-02-24(日) 23:26:11.874 └─────┬──────────────────────────────── 23:26:11.874├┬▽if (1 < current) == true; <tree.cpp>#104 23:26:11.874│├・while (1 < current) == true; <tree.cpp>#109 23:26:11.874│├┬▽if (current %p) == true; <tree.cpp>#111 23:26:11.874││├┬▽if (pn) == false; <tree.cpp>#113 23:26:11.874│││└△if (pn) == false; <tree.cpp>#113 23:26:11.874││├・p(0x00D8FC5C) = 3(0x00000003) <tree.cpp>#126 23:26:11.874││└△if (current %p) == true; <tree.cpp>#111 23:26:11.874│├・while (1 < current) == true; <tree.cpp>#109 23:26:11.874│├┬▽if (current %p) == true; <tree.cpp>#111 23:26:11.874││├┬▽if (pn) == false; <tree.cpp>#113 23:26:11.874│││└△if (pn) == false; <tree.cpp>#113 23:26:11.874││├・p(0x00D8FC5C) = 5(0x00000005) <tree.cpp>#126 23:26:11.874││└△if (current %p) == true; <tree.cpp>#111 23:26:11.874│├・while (1 < current) == true; <tree.cpp>#109 23:26:11.874│├┬▽if (current %p) == true; <tree.cpp>#111 23:26:11.874││├┬▽if (pn) == false; <tree.cpp>#113 23:26:11.874│││└△if (pn) == false; <tree.cpp>#113
いくつかのマクロを適宜定義し、bug.h をしかるべき場所で include しコンパイルするだけです。詳細についてはこのページの情報に一通り目を通してください。
邪道な技術により構築されたバグベアードは邪悪で忌むべき存在です。 またバグベアードの肝であるステートメントハックにより、さながらナノマシンの如くバグベアードのコードはユーザプログラムを隅々まで侵食します。 故にバグベアードの利用にあたっては以下のような注意が必要となります。
┌────────────────────────────────────── │日付&時刻:2008-02-24(日) 18:06:13.739 └─────┬──────────────────────────────── 18:06:13.743├・Hello, Bugbeard! <sample/simple.cpp>#46 18:06:13.744├┬▽Compile Information <bug.h>#2839 18:06:13.745│├・Compiler:Borland C++(0x0564) <bug.h>#2841 18:06:13.745│├・Compile Date:Feb 24 2008 / Compile Time:18:06:11 <bug.h>#2843 18:06:13.746│└△Compile Information <bug.h>#2839 18:06:13.747├┬▽Commandline Argument Information <bug.h>#2849 18:06:13.748│├・argc(0x0012F994) = 1(0x00000001) <bug.h>#2850 18:06:13.749│├・args[0]:o:\cxx\bugbeard\simple.exe <bug.h>#2853 18:06:13.750│└△Commandline Argument Information <bug.h>#2849 18:06:13.751├・args[0](0x00DE21C4) = "o:\cxx\bugbeard\simple.exe" <sample/simple.cpp>#55 18:06:13.752├・このプログラムのファイル名:"o:\cxx\bugbeard\simple.exe" <sample/simple.cpp>#58 18:06:13.753├・return <sample/simple.cpp>#60 ┌─────┴──────────────────────────────── │日付&時刻:2008-02-24(日) 18:06:13.754 └──────────────────────────────────────
BUG_define_logger() の行によりログの出力形式等を指定しています。
NDEBUG マクロが定義された場合の assert() マクロと同様に、BUG_DISABLE_BUGBEARD マクロが定義されると BUG_* な命名になっているコードは全て消え去ります。
なお、Windowsではデフォルトで標準エラーがアスキーモードになっている為、改行コード "\r\n" が無駄に拡張され "\r\r\n" になってしまうので標準エラーをファイルへリダイレクトすると不格好になります。Windowsでは bugbeard::bug_file_writer で直接ファイルに出力するか、bugbeard::bug_OutputDebugString_writer で OutputDebugString() で出力することを推奨します。
このサンプルでは Win32API の OutputDebugString() でログを出力しています。 ご利用のIDEのデバッグ出力表示機能や sysinternals の DebugView などで出力内容を確認できます。
|
┌────────────────────────────────────── │日付&時刻:2008-09-23(火) 22:06:59.771 └─────┬──────────────────────────────── 22:06:59.772├┬▽Compile Information#4450 22:06:59.772│├・Compiler:Borland C++(0x0564) #4452 22:06:59.772│├・Compile Date:Sep 23 2008 / Compile Time:22:06:25 #4454 22:06:59.772│└△Compile Information #4450 22:06:59.772├┬▽Commandline Argument Information #4461 22:06:59.772│├・argc(0x0012D500) = 1(0x00000001) #4462 22:06:59.772│├・args[0]:O:\cxx\bugbeard\work\win.exe #4465 22:06:59.772│└△Commandline Argument Information #4461 22:06:59.773├┬▽Windows Version Information #4505 22:06:59.773│├・Microsoft Windows Vista Business Edition, 32-bit #4508 22:06:59.773│├・OSVERSIONINFO dwMajorVersion:6 / dwMinorVersion:0 / dwBuildNumber:6001 / dwPlatformId:2 / szCSDVersion:Service Pack 1 #4510 22:06:59.773│├・OSVERSIONINFOEX wServicePackMajor:1 / wServicePackMinor:0 / wSuiteMask:256 / wProductType:1 / wReserved:30 #4514 22:06:59.773│└△Windows Version Information #4505 22:06:59.773├┬▽Windows System Information #4474 22:06:59.773│├・wProcessorArchitecture:0 #4488 22:06:59.773│├・wReserved:0 #4489 22:06:59.773│├・dwPageSize:4096 #4490 22:06:59.773│├・lpMinimumApplicationAddress:00010000 #4491 22:06:59.773│├・lpMaximumApplicationAddress:7FFEFFFF #4492 22:06:59.773│├・dwActiveProcessorMask:3 #4493 22:06:59.773│├・dwNumberOfProcessors:2 #4494 22:06:59.773│├・dwProcessorType:586 #4495 22:06:59.773│├・dwAllocationGranularity:65536 #4496 22:06:59.773│├・wProcessorLevel:6 #4497 22:06:59.773│├・wProcessorRevision:3846 #4498 22:06:59.773│└△Windows System Information #4474 22:06:59.773├┬▽Module Version Information #4591 22:06:59.773│├・module:"O:\cxx\bugbeard\work\win.exe" / no version information #4584 22:06:59.773│├・module:"C:\Windows\system32\ntdll.dll" / language:041104b0 / FileDescription: NT レイヤ DLL / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: ntdll.dll.mui #4577 22:06:59.774│├・module:"C:\Windows\system32\kernel32.dll" / language:041104b0 / FileDescription: Windows NT ベース API クライアント DLL / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: kernel32 #4577 22:06:59.774│├・module:"C:\Windows\system32\ADVAPI32.DLL" / language:041104b0 / FileDescription: Advanced Windows 32 ベース API / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: advapi32.dll.mui #4577 22:06:59.774│├・module:"C:\Windows\system32\RPCRT4.dll" / language:041104b0 / FileDescription: リモート プロシージャ コール ランタイム / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: rpcrt4.dll.mui #4577 22:06:59.774│├・module:"C:\Windows\system32\VERSION.DLL" / language:040904b0 / FileDescription: Version Checking and File Installation Libraries / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: VERSION.DLL #4577 22:06:59.774│├・module:"C:\Windows\system32\msvcrt.dll" / language:040904b0 / FileDescription: Windows NT CRT DLL / FileVersion: 7.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 7.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: msvcrt.dll #4577 22:06:59.775│├・module:"C:\Windows\system32\USER32.DLL" / language:041104b0 / FileDescription: マルチユーザー Windows ユーザー API クライアント DLL / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: user32 #4577 22:06:59.775│├・module:"C:\Windows\system32\GDI32.dll" / language:040904b0 / FileDescription: GDI Client DLL / FileVersion: 6.0.6001.18023 (vistasp1_gdr.080221-1537) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18023 / CompanyName: Microsoft Corporation / OriginalFilename: gdi32 #4577 22:06:59.775│├・module:"C:\Windows\system32\PSAPI.DLL" / language:040904b0 / FileDescription: Process Status Helper / FileVersion: 6.0.6000.16386 (vista_rtm.061101-2205) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6000.16386 / CompanyName: Microsoft Corporation / OriginalFilename: PSAPI #4577 22:06:59.775│├・module:"C:\Windows\system32\IMM32.DLL" / language:040904b0 / FileDescription: Multi-User Windows IMM32 API Client DLL / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: imm32 #4577 22:06:59.775│├・module:"C:\Windows\system32\MSCTF.dll" / language:041104b0 / FileDescription: MSCTF サーバー DLL / FileVersion: 6.0.6000.16386 (vista_rtm.061101-2205) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6000.16386 / CompanyName: Microsoft Corporation / OriginalFilename: MSCTF.DLL.MUI #4577 22:06:59.776│├・module:"C:\Windows\system32\LPK.DLL" / language:040904b0 / FileDescription: Language Pack / FileVersion: 6.0.6001.18000 (longhorn_rtm.080118-1840) / ProductName: MicrosoftR WindowsR Operating System / ProductVersion: 6.0.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: LanguagePack #4577 22:06:59.776│├・module:"C:\Windows\system32\USP10.dll" / language:040904b0 / FileDescription: Uniscribe Unicode script processor / FileVersion: 1.0626.6001.18000 (longhorn_rtm.080118-1840) / ProductName: Microsoft(R) Uniscribe Unicode script processor / ProductVersion: 1.0626.6001.18000 / CompanyName: Microsoft Corporation / OriginalFilename: Uniscribe #4577 22:06:59.776│└△Module Version Information #4591 22:06:59.776├┬▽Module Hash #4605 22:06:59.789│├・file:"O:\cxx\bugbeard\work\win.exe" / hash(MD5):DA0A29DA42E371316446BFE64A528921 #4528 22:06:59.792│├・file:"C:\Windows\system32\ntdll.dll" / hash(MD5):172E1B9EB61167AD232291A6761501BF #4528 22:06:59.796│├・file:"C:\Windows\system32\kernel32.dll" / hash(MD5):DC2338093F91BA4E0512208E60206DDD #4528 22:06:59.799│├・file:"C:\Windows\system32\ADVAPI32.DLL" / hash(MD5):C44A1766E93E506EE2102A305799E1A1 #4528 22:06:59.802│├・file:"C:\Windows\system32\RPCRT4.dll" / hash(MD5):520CE99A9C1A3B14078BB39272424652 #4528 22:06:59.802│├・file:"C:\Windows\system32\VERSION.DLL" / hash(MD5):187D588F7A1A45DE48B8540401A90850 #4528 22:06:59.805│├・file:"C:\Windows\system32\msvcrt.dll" / hash(MD5):04CBEAA089B6A752B3EB660BEE8C4964 #4528 22:06:59.808│├・file:"C:\Windows\system32\USER32.DLL" / hash(MD5):B974D9F06DC7D1908E825DC201681269 #4528 22:06:59.809│├・file:"C:\Windows\system32\GDI32.dll" / hash(MD5):F77456EB036D834BFBC700EB2414879E #4528 22:06:59.810│├・file:"C:\Windows\system32\PSAPI.DLL" / hash(MD5):93A1732F7F997E36A5C3893539E2FF02 #4528 22:06:59.811│├・file:"C:\Windows\system32\IMM32.DLL" / hash(MD5):EC17194A193CD8E90D27CFB93DFA9A2E #4528 22:06:59.814│├・file:"C:\Windows\system32\MSCTF.dll" / hash(MD5):030981927E732FD4013910B3B06BD45B #4528 22:06:59.815│├・file:"C:\Windows\system32\LPK.DLL" / hash(MD5):DD496299B7351E16E602FC4299345A33 #4528 22:06:59.817│├・file:"C:\Windows\system32\USP10.dll" / hash(MD5):3122DAF86B33ED8AC4662D07593025D7 #4528 22:06:59.817│└△Module Hash #4605 22:06:59.817├┬▽Memory Information #4623 22:06:59.817│├・load:61% #4628 22:06:59.817│├・TotalPhys:2.98GiByte(3201634304) #4629 22:06:59.817│├・AvailPhys:1.14GiByte(1222332416) #4630 22:06:59.817│├・Used-Phys:1.84GiByte(1979301888) #4631 22:06:59.817│├・TotalPageFile:6.16GiByte(6611963904) #4632 22:06:59.817│├・AvailPageFile:1.14GiByte(1222332416) #4633 22:06:59.817│├・Used-PageFile:5.02GiByte(5389631488) #4634 22:06:59.817│├・TotalVirtual:2.00GiByte(2147352576) #4635 22:06:59.817│├・AvailVirtual:1.14GiByte(1222332416) #4636 22:06:59.817│├・Used-Virtual:882MiByte(925020160) #4637 22:06:59.817│├・AvailExtendedVirtual:0Byte(0) #4638 22:06:59.817│└△Memory Information #4623 22:06:59.817├┬▽Drives Information #4752 22:06:59.817│├・drive:C / type:fixed / label:***** / file-system:NTFS / serial:0x******** / max-path:255 / flags:0x002700FF / sectors-per-cluster:8 / bytes-per-sector:512Byte / available:6.08GiByte(6528913408) / total:74.5GiByte(80003198976) / free:6.08GiByte(6528913408) #4747 22:06:59.818│├・drive:D / type:fixed / label:** / file-system:NTFS / serial:0x******** / max-path:255 / flags:0x002700FF / sectors-per-cluster:8 / bytes-per-sector:512Byte / available:39.0GiByte(41832468480) / total:74.5GiByte(80007262208) / free:39.0GiByte(41832468480) #4747 22:06:59.818│├・drive:F / type:fixed / label:*** / file-system:NTFS / serial:0x******** / max-path:255 / flags:0x002700FF / sectors-per-cluster:8 / bytes-per-sector:512Byte / available:726GiByte(779961614336) / total:931GiByte(1000202240000) / free:726GiByte(779961614336) #4747 22:06:59.819│├・drive:G / type:cdrom #4747 22:06:59.831│├・drive:I / type:removable #4747 22:06:59.842│├・drive:J / type:removable #4747 22:06:59.854│├・drive:K / type:removable #4747 22:06:59.866│├・drive:L / type:removable #4747 22:06:59.866│├・drive:O / type:fixed / label:**** / file-system:NTFS / serial:0x******** / max-path:255 / flags:0x002700FF / sectors-per-cluster:8 / bytes-per-sector:512Byte / available:10.4GiByte(11172679680) / total:114GiByte(122683387904) / free:10.4GiByte(11172679680) #4747 22:06:59.866│├・drive:X / type:fixed / label:***** / file-system:NTFS / serial:0x******** / max-path:255 / flags:0x002700FF / sectors-per-cluster:8 / bytes-per-sector:512Byte / available:143GiByte(154588205056) / total:202GiByte(217409646592) / free:143GiByte(154588205056) #4747 22:06:59.866│└△Drives Information #4752 22:06:59.866├┬▽Monitor Information #4793 22:06:59.866│├・Monitor Rect:(0,0)-(1920,1200) / Work:(0,0)-(1920,1200) / Device:\\.\DISPLAY1 #4786 22:06:59.866│├・Monitor Rect:(1920,176)-(3200,1200) / Work:(1920,176)-(3200,1200) / Device:\\.\DISPLAY2 #4786 22:06:59.866│└△Monitor Information #4793 22:06:59.866├┬▽Display Information #4851 22:06:59.866│├・Display Name:\\.\DISPLAY1 / Context:NVIDIA GeForce 8600 GTS #4867 22:06:59.867│├・Display Name:\\.\DISPLAY2 / Context:NVIDIA GeForce 8600 GTS #4867 22:06:59.867│├・Display Name:\\.\DISPLAYV1 / Context:RDPDD Chained DD #4867 22:06:59.867│├・Display Name:\\.\DISPLAYV2 / Context:RDP Encoder Mirror Driver #4867 22:06:59.867│└△Display Information #4851 22:06:59.867├┬▽All Environment Information #4838 22:06:59.867│├・=::=::\ #4842 22:06:59.867│├・=C:=C:\Users\wraith #4842 22:06:59.867│├・=ExitCode=00000000 #4842 22:06:59.867│├・=O:=O:\cxx\bugbeard\work #4842 22:06:59.867│├・ALLUSERSPROFILE=C:\ProgramData #4842 22:06:59.867│├・APPDATA=C:\Users\wraith\AppData\Roaming #4842 22:06:59.867│├・BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\5.0 #4842 22:06:59.867│├・CLASSPATH=.;C:\Program Files\Java\jre1.5.0_10\lib\ext\QTJava.zip #4842 22:06:59.867│├・CommonProgramFiles=C:\Program Files\Common Files #4842 22:06:59.867│├・COMPUTERNAME=CRUISER #4842 22:06:59.867│├・ComSpec=C:\Windows\system32\cmd.exe #4842 22:06:59.867│├・FP_NO_HOST_CHECK=NO #4842 22:06:59.867│├・HOMEDRIVE=C: #4842 22:06:59.867│├・HOMEPATH=\Users\wraith #4842 22:06:59.867│├・LOCALAPPDATA=C:\Users\wraith\AppData\Local #4842 22:06:59.867│├・LOGONSERVER=\\CRUISER #4842 22:06:59.867│├・NUMBER_OF_PROCESSORS=2 #4842 22:06:59.867│├・OS=Windows_NT #4842 22:06:59.867│├・Path=************************************************************************************************************************* #4842 22:06:59.867│├・PATHEXT=**************************************************** #4842 22:06:59.867│├・PROCESSOR_ARCHITECTURE=x86 #4842 22:06:59.867│├・PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 6, GenuineIntel #4842 22:06:59.868│├・PROCESSOR_LEVEL=6 #4842 22:06:59.868│├・PROCESSOR_REVISION=**** #4842 22:06:59.868│├・ProgramData=C:\ProgramData #4842 22:06:59.868│├・ProgramFiles=C:\Program Files #4842 22:06:59.868│├・PROMPT=$P$G #4842 22:06:59.868│├・PUBLIC=C:\Users\Public #4842 22:06:59.868│├・QTJAVA=C:\Program Files\Java\jre1.5.0_10\lib\ext\QTJava.zip #4842 22:06:59.868│├・SESSIONNAME=Console #4842 22:06:59.868│├・solomoncmd="O:\solomon\bcc32" win.cpp #4842 22:06:59.868│├・SystemDrive=C: #4842 22:06:59.868│├・SystemRoot=C:\Windows #4842 22:06:59.868│├・TEMP=C:\Users\wraith\AppData\Local\Temp #4842 22:06:59.868│├・TMP=C:\Users\wraith\AppData\Local\Temp #4842 22:06:59.868│├・UGII_3DCONNEXION_LIBRARY=%UGII_BASE_DIR%\ugalliance\vendor\startup\3DxNX.dll #4842 22:06:59.868│├・USERDOMAIN=cruiser #4842 22:06:59.868│├・USERNAME=wraith #4842 22:06:59.868│├・USERPROFILE=C:\Users\wraith #4842 22:06:59.868│├・windir=C:\Windows #4842 22:06:59.868│└△All Environment Information #4838 22:06:59.868├・return #88 ┌─────┴──────────────────────────────── │日付&時刻:2008-09-23(火) 22:06:59.868 └──────────────────────────────────────
101 = 101 301 = 7 * 43 201 = 3 * 67
20:04:19.182 540 0 bug.h 2462 ▽bugbeard session root 20:04:19.183 540 1 bug.h 2463 日付&時刻:2008-02-24(日) 20:04:19.183 20:04:19.183 540 1 bug.h 2839 ▽Compile Information 20:04:19.183 540 2 bug.h 2841 Compiler:Visual C++(1400) 20:04:19.183 540 2 bug.h 2843 Compile Date:Feb 24 2008 / Compile Time:20:02:37 20:04:19.183 540 2 bug.h 2839 △Compile Information 20:04:19.183 540 1 bug.h 2849 ▽Commandline Argument Information 20:04:19.183 540 2 bug.h 2850 argc(0x0012FAC8) = 4(0x00000004) 20:04:19.183 540 2 bug.h 2853 args[0]:tsv 20:04:19.183 540 2 bug.h 2853 args[1]:101 20:04:19.183 540 2 bug.h 2853 args[2]:201 20:04:19.183 540 2 bug.h 2853 args[3]:301 20:04:19.183 540 2 bug.h 2849 △Commandline Argument Information 20:04:19.183 540 1 tsv.cpp 176 ▽new 20:04:19.183 540 2 tsv.cpp 176 △new 20:04:19.183 540 1 tsv.cpp 179 ▽for 20:04:19.183 540 2 tsv.cpp 69 return 20:04:19.183 5772 0 bug.h 2462 ▽bugbeard session root 20:04:19.183 540 2 tsv.cpp 69 return 20:04:19.183 5772 1 bug.h 2463 日付&時刻:2008-02-24(日) 20:04:19.183 20:04:19.183 5772 1 tsv.cpp 104 ▽if (1 < current) == true; 20:04:19.183 540 2 tsv.cpp 69 return 20:04:19.183 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.183 540 2 tsv.cpp 179 △for 20:04:19.183 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.183 540 1 tsv.cpp 184 ▽for 20:04:19.183 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.183 868 0 bug.h 2462 ▽bugbeard session root 20:04:19.183 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.183 868 1 bug.h 2463 日付&時刻:2008-02-24(日) 20:04:19.183 20:04:19.183 5772 3 tsv.cpp 126 p(0x0133FC5C) = 3(0x00000003) 20:04:19.183 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.183 868 1 tsv.cpp 104 ▽if (1 < current) == true; 20:04:19.183 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.183 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.183 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.183 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.183 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.183 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.183 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.183 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.183 5772 3 tsv.cpp 126 p(0x0133FC5C) = 5(0x00000005) 20:04:19.183 868 3 tsv.cpp 126 p(0x0143FC5C) = 3(0x00000003) 20:04:19.183 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.183 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.183 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.183 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.183 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.183 868 2 tsv.cpp 111 ▽if (current %p) == false; 20:04:19.183 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.183 868 3 tsv.cpp 135 current(0x0143FD9C) = 67(0x00000043) 20:04:19.183 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.183 868 3 tsv.cpp 140 pn(0x0143FC54) = 1(0x00000001) 20:04:19.183 5772 3 tsv.cpp 126 p(0x0133FC5C) = 7(0x00000007) 20:04:19.183 868 3 tsv.cpp 111 △if (current %p) == false; 20:04:19.184 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 0 bug.h 2462 ▽bugbeard session root 20:04:19.184 868 3 tsv.cpp 113 ▽if (pn) == true; 20:04:19.184 4264 1 bug.h 2463 日付&時刻:2008-02-24(日) 20:04:19.184 20:04:19.184 868 4 tsv.cpp 116 ▽if (1 < pn) == false; 20:04:19.184 4264 1 tsv.cpp 104 ▽if (1 < current) == true; 20:04:19.184 868 5 tsv.cpp 116 △if (1 < pn) == false; 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 868 4 tsv.cpp 113 △if (pn) == true; 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.183 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 126 p(0x0153FC5C) = 3(0x00000003) 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 9(0x00000009) 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 126 p(0x0153FC5C) = 5(0x00000005) 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 11(0x0000000B) 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 126 p(0x0153FC5C) = 7(0x00000007) 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 13(0x0000000D) 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == false; 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 135 current(0x0153FD9C) = 43(0x0000002B) 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 3 tsv.cpp 140 pn(0x0153FC54) = 1(0x00000001) 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == false; 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 15(0x0000000F) 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == true; 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 4 tsv.cpp 116 ▽if (1 < pn) == false; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 5 tsv.cpp 116 △if (1 < pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == true; 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 126 p(0x0153FC5C) = 9(0x00000009) 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 17(0x00000011) 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 126 p(0x0153FC5C) = 11(0x0000000B) 20:04:19.184 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.184 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 5772 3 tsv.cpp 126 p(0x0133FC5C) = 19(0x00000013) 20:04:19.184 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.184 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.184 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.184 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 13(0x0000000D) 20:04:19.184 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 21(0x00000015) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 15(0x0000000F) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 23(0x00000017) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 17(0x00000011) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 25(0x00000019) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 19(0x00000013) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 27(0x0000001B) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 21(0x00000015) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 29(0x0000001D) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 23(0x00000017) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 31(0x0000001F) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 25(0x00000019) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 33(0x00000021) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 27(0x0000001B) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 35(0x00000023) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 126 p(0x0153FC5C) = 29(0x0000001D) 20:04:19.185 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.185 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.185 5772 3 tsv.cpp 126 p(0x0133FC5C) = 37(0x00000025) 20:04:19.185 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.185 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.185 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.185 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.184 868 3 tsv.cpp 126 p(0x0143FC5C) = 5(0x00000005) 20:04:19.185 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 126 p(0x0153FC5C) = 31(0x0000001F) 20:04:19.186 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 39(0x00000027) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 126 p(0x0153FC5C) = 33(0x00000021) 20:04:19.186 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 41(0x00000029) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 126 p(0x0153FC5C) = 35(0x00000023) 20:04:19.186 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 43(0x0000002B) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 45(0x0000002D) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 47(0x0000002F) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 49(0x00000031) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 51(0x00000033) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.186 5772 3 tsv.cpp 126 p(0x0133FC5C) = 53(0x00000035) 20:04:19.186 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.186 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.186 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.186 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 55(0x00000037) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 57(0x00000039) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 59(0x0000003B) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 61(0x0000003D) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 63(0x0000003F) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 65(0x00000041) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 67(0x00000043) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 69(0x00000045) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 71(0x00000047) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.187 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.187 5772 3 tsv.cpp 126 p(0x0133FC5C) = 73(0x00000049) 20:04:19.187 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.187 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.187 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.187 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 75(0x0000004B) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 77(0x0000004D) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 79(0x0000004F) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 81(0x00000051) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 83(0x00000053) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 85(0x00000055) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 87(0x00000057) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 89(0x00000059) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 91(0x0000005B) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.188 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.188 5772 3 tsv.cpp 126 p(0x0133FC5C) = 93(0x0000005D) 20:04:19.188 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.188 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.188 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.188 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 5772 3 tsv.cpp 126 p(0x0133FC5C) = 95(0x0000005F) 20:04:19.189 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.186 4264 3 tsv.cpp 126 p(0x0153FC5C) = 37(0x00000025) 20:04:19.189 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 5772 3 tsv.cpp 126 p(0x0133FC5C) = 97(0x00000061) 20:04:19.189 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 4264 3 tsv.cpp 126 p(0x0153FC5C) = 39(0x00000027) 20:04:19.189 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 5772 3 tsv.cpp 126 p(0x0133FC5C) = 99(0x00000063) 20:04:19.189 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 5772 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 5772 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 4264 3 tsv.cpp 126 p(0x0153FC5C) = 41(0x00000029) 20:04:19.189 5772 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 5772 3 tsv.cpp 126 p(0x0133FC5C) = 101(0x00000065) 20:04:19.189 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 5772 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 4264 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 5772 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 4264 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 5772 2 tsv.cpp 111 ▽if (current %p) == false; 20:04:19.189 4264 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 5772 3 tsv.cpp 135 current(0x0133FD9C) = 1(0x00000001) 20:04:19.189 4264 3 tsv.cpp 126 p(0x0153FC5C) = 43(0x0000002B) 20:04:19.189 5772 3 tsv.cpp 140 pn(0x0133FC54) = 1(0x00000001) 20:04:19.189 4264 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 5772 3 tsv.cpp 111 △if (current %p) == false; 20:04:19.189 4264 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 5772 2 tsv.cpp 109 while (1 < current) == false; 20:04:19.189 4264 2 tsv.cpp 111 ▽if (current %p) == false; 20:04:19.189 5772 2 tsv.cpp 144 ▽if (1 < pn) == false; 20:04:19.189 4264 3 tsv.cpp 135 current(0x0153FD9C) = 1(0x00000001) 20:04:19.189 5772 3 tsv.cpp 144 △if (1 < pn) == false; 20:04:19.189 4264 3 tsv.cpp 140 pn(0x0153FC54) = 1(0x00000001) 20:04:19.189 5772 2 tsv.cpp 104 △if (1 < current) == true; 20:04:19.189 4264 3 tsv.cpp 111 △if (current %p) == false; 20:04:19.189 4264 2 tsv.cpp 109 while (1 < current) == false; 20:04:19.189 4264 2 tsv.cpp 144 ▽if (1 < pn) == false; 20:04:19.189 4264 3 tsv.cpp 144 △if (1 < pn) == false; 20:04:19.189 4264 2 tsv.cpp 104 △if (1 < current) == true; 20:04:19.189 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 868 3 tsv.cpp 126 p(0x0143FC5C) = 7(0x00000007) 20:04:19.189 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.189 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.189 868 3 tsv.cpp 126 p(0x0143FC5C) = 9(0x00000009) 20:04:19.189 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.189 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.189 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.189 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 11(0x0000000B) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 13(0x0000000D) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 15(0x0000000F) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 17(0x00000011) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 19(0x00000013) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 21(0x00000015) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 23(0x00000017) 20:04:19.190 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.190 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.190 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.190 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.190 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.190 5772 1 tsv.cpp 154 return 20:04:19.190 5772 1 tsv.cpp 161 return 20:04:19.190 5772 1 bug.h 2468 日付&時刻:2008-02-24(日) 20:04:19.190 20:04:19.190 5772 1 bug.h 2469 △bugbeard session root 20:04:19.190 868 3 tsv.cpp 126 p(0x0143FC5C) = 25(0x00000019) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 27(0x0000001B) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 29(0x0000001D) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 31(0x0000001F) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 33(0x00000021) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 35(0x00000023) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 4264 1 tsv.cpp 154 return 20:04:19.191 4264 1 tsv.cpp 161 return 20:04:19.191 4264 1 bug.h 2468 日付&時刻:2008-02-24(日) 20:04:19.191 20:04:19.191 4264 1 bug.h 2469 △bugbeard session root 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 37(0x00000025) 20:04:19.191 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.191 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.191 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.191 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.191 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.191 868 3 tsv.cpp 126 p(0x0143FC5C) = 39(0x00000027) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 41(0x00000029) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 43(0x0000002B) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 45(0x0000002D) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 47(0x0000002F) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 49(0x00000031) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 51(0x00000033) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 53(0x00000035) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 55(0x00000037) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 57(0x00000039) 20:04:19.192 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.192 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.192 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.192 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.192 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.192 868 3 tsv.cpp 126 p(0x0143FC5C) = 59(0x0000003B) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.193 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.193 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.193 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.193 868 3 tsv.cpp 126 p(0x0143FC5C) = 61(0x0000003D) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.193 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.193 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.193 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.193 868 3 tsv.cpp 126 p(0x0143FC5C) = 63(0x0000003F) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.193 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.193 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.193 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.193 868 3 tsv.cpp 126 p(0x0143FC5C) = 65(0x00000041) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.193 868 2 tsv.cpp 111 ▽if (current %p) == true; 20:04:19.193 868 3 tsv.cpp 113 ▽if (pn) == false; 20:04:19.193 868 4 tsv.cpp 113 △if (pn) == false; 20:04:19.193 868 3 tsv.cpp 126 p(0x0143FC5C) = 67(0x00000043) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == true; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == true; 20:04:19.193 868 2 tsv.cpp 111 ▽if (current %p) == false; 20:04:19.193 868 3 tsv.cpp 135 current(0x0143FD9C) = 1(0x00000001) 20:04:19.193 868 3 tsv.cpp 140 pn(0x0143FC54) = 1(0x00000001) 20:04:19.193 868 3 tsv.cpp 111 △if (current %p) == false; 20:04:19.193 868 2 tsv.cpp 109 while (1 < current) == false; 20:04:19.193 868 2 tsv.cpp 144 ▽if (1 < pn) == false; 20:04:19.193 868 3 tsv.cpp 144 △if (1 < pn) == false; 20:04:19.193 868 2 tsv.cpp 104 △if (1 < current) == true; 20:04:19.194 868 1 tsv.cpp 154 return 20:04:19.194 868 1 tsv.cpp 161 return 20:04:19.194 868 1 bug.h 2468 日付&時刻:2008-02-24(日) 20:04:19.194 20:04:19.194 868 1 bug.h 2469 △bugbeard session root 20:04:19.194 540 2 tsv.cpp 184 △for 20:04:19.194 540 1 tsv.cpp 189 ▽delete 20:04:19.194 540 2 tsv.cpp 189 △delete 20:04:19.194 540 1 tsv.cpp 191 return 20:04:19.194 540 1 bug.h 2468 日付&時刻:2008-02-24(日) 20:04:19.194 20:04:19.194 540 1 bug.h 2469 △bugbeard session root
上記の出力結果は...
20:04:19.183 540 1 bug.h 2849 ▽Commandline Argument Information 20:04:19.183 540 2 bug.h 2850 argc(0x0012FAC8) = 4(0x00000004) 20:04:19.183 540 2 bug.h 2853 args[0]:tsv 20:04:19.183 540 2 bug.h 2853 args[1]:101 20:04:19.183 540 2 bug.h 2853 args[2]:201 20:04:19.183 540 2 bug.h 2853 args[3]:301 20:04:19.183 540 2 bug.h 2849 △Commandline Argument Information
このサンプルでの一つ目の肝は...
このサンプルでの二つの肝は最初に bug.h を include する前に...
このサンプルでは同じ出力先へログ出力を行うので bugbeard::bug_smart_writer 型でラップした bugbeard::bug_writer 派生オブジェクトを各スレッドで使いまわしています。これはロガーが自分に与えられた bugbeard::bug_writer 派生オブジェクトを自身のデストラクタ内で破棄する為です。bugbeard::bug_smart_writer 型でラップしないと最初に終了したスレッドにより bugbeard::bug_writer 派生オブジェクトが破棄され残りのスレッドが既に破棄されたオブジェクトを使用してログ出力を行おうとして異常終了します。
マルチプロセス/マルチスレッドな状況ではツリー形式より.tsv形式のほうが有効だろうと思って.tsv形式での出力にも対応したもののフィルターの使えるビューアで見る分にはマルチプロセス/マルチスレッドな状況であっても.tsv形式よりもツリー形式のほうが見やすかったりします。でも、まぁ、.tsv形式はデータとして処理し易いんで統計的な情報分析やる際に役立ってくれると思います。
このサンプルのコードでは日付別のディレクトリにログファイルを出力します。
┌────────────────────────────────────── │日付&時刻:2008-09-17(水) 07:07:06.587 └─────┬──────────────────────────────── 07:07:06.587├┬▽for#107 07:07:06.587│├┬▽if (1 < current) == true; #48 07:07:06.587││├・while (1 < current) == true; #53 07:07:06.587││├┬▽if (current %p) == false; #55 07:07:06.587│││├・current(0x0012E6F0) = 3(0x00000003) #79 07:07:06.587│││├・pn(0x0012E50C) = 1(0x00000001) #84 07:07:06.587│││└△if (current %p) == false; #55 07:07:06.587││├・while (1 < current) == true; #53 07:07:06.587││├┬▽if (current %p) == true; #55 07:07:06.587│││├┬▽if (pn) == true; #57 07:07:06.587││││├┬▽if (1 < pn) == false; #60 07:07:06.587│││││└△if (1 < pn) == false; #60 07:07:06.587││││└△if (pn) == true; #57 07:07:06.587│││├・p(0x0012E510) = 3(0x00000003) #70 07:07:06.587│││└△if (current %p) == true; #55 07:07:06.587││├・while (1 < current) == true; #53 07:07:06.587││├┬▽if (current %p) == false; #55 07:07:06.587│││├・current(0x0012E6F0) = 1(0x00000001) #79 07:07:06.587│││├・pn(0x0012E50C) = 1(0x00000001) #84 07:07:06.587│││└△if (current %p) == false; #55 07:07:06.587││├・while (1 < current) == false; #53 07:07:06.587││├┬▽if (1 < pn) == false; #88 07:07:06.587│││└△if (1 < pn) == false; #88 07:07:06.587││└△if (1 < current) == true; #48 07:07:06.587│├・return #98 07:07:06.587│└△for #107 07:07:06.587├・return #112 ┌─────┴──────────────────────────────── │日付&時刻:2008-09-17(水) 07:07:06.587 └──────────────────────────────────────
__FILE__ __LINE__ スコープ 合計総稼働時間 合計総バグ時間 合計総実働時間 合計自稼働時間 合計自バグ時間 合計自実働時間 合計子稼働時間 合計子バグ時間 合計子実働時間 コールカウント 平均総稼働時間 平均総バグ時間 平均総実働時間 平均自稼働時間 平均自バグ時間 平均自実働時間 平均子稼働時間 平均子バグ時間 平均子実働時間 最小スタンプ 最小総稼働時間 最小総バグ時間 最小総実働時間 最小自稼働時間 最小自バグ時間 最小自実働時間 最小子稼働時間 最小子バグ時間 最小子実働時間 最大スタンプ 最大総稼働時間 最大総バグ時間 最大総実働時間 最大自稼働時間 最大自バグ時間 最大自実働時間 最大子稼働時間 最大子バグ時間 最大子実働時間 @OVERALL_SCOPE 0 @OVERALL_SCOPE 0.003570 0.002757 0.003212 0.003570 0.000085 0.000000 0.001543 0.002672 0.003212 1 0.003570 0.002757 0.003212 0.003570 0.000085 0.000000 0.001543 0.002672 0.003212 @OVERALL_SCOPE 0.003570 0.002757 0.003212 0.003570 0.000085 0.000000 0.001543 0.002672 0.003212 @OVERALL_SCOPE 0.003570 0.002757 0.003212 0.003570 0.000085 0.000000 0.001543 0.002672 0.003212 profile.cpp 48 if (1 < current) == true; 0.001865 0.002458 0.001882 0.001865 0.000382 0.001482 0.000969 0.002075 0.000399 1 0.001865 0.002458 0.001882 0.001865 0.000382 0.001482 0.000969 0.002075 0.000399 07:07:06.587 0.001865 0.002458 0.001882 0.001865 0.000382 0.001482 0.000969 0.002075 0.000399 07:07:06.587 0.001865 0.002458 0.001882 0.001865 0.000382 0.001482 0.000969 0.002075 0.000399 profile.cpp 55 if (current %p) == false; 0.000539 0.000507 0.000031 0.000539 0.000507 0.000031 0.000000 0.000000 0.000000 2 0.000269 0.000253 0.000015 0.000269 0.000253 0.000015 0.000000 0.000000 0.000000 07:07:06.587 0.000173 0.000166 0.000006 0.000173 0.000166 0.000006 0.000000 0.000000 0.000000 07:07:06.587 0.000365 0.000341 0.000024 0.000365 0.000341 0.000024 0.000000 0.000000 0.000000 profile.cpp 55 if (current %p) == true; 0.000304 0.001444 0.000365 0.000304 0.000142 0.000162 0.001351 0.001302 0.000202 1 0.000304 0.001444 0.000365 0.000304 0.000142 0.000162 0.001351 0.001302 0.000202 07:07:06.587 0.000304 0.001444 0.000365 0.000304 0.000142 0.000162 0.001351 0.001302 0.000202 07:07:06.587 0.000304 0.001444 0.000365 0.000304 0.000142 0.000162 0.001351 0.001302 0.000202 profile.cpp 57 if (pn) == true; 0.001351 0.001302 0.000202 0.001351 0.001150 0.000200 0.000153 0.000151 0.000002 1 0.001351 0.001302 0.000202 0.001351 0.001150 0.000200 0.000153 0.000151 0.000002 07:07:06.587 0.001351 0.001302 0.000202 0.001351 0.001150 0.000200 0.000153 0.000151 0.000002 07:07:06.587 0.001351 0.001302 0.000202 0.001351 0.001150 0.000200 0.000153 0.000151 0.000002 profile.cpp 60 if (1 < pn) == false; 0.000153 0.000151 0.000002 0.000153 0.000151 0.000002 0.000000 0.000000 0.000000 1 0.000153 0.000151 0.000002 0.000153 0.000151 0.000002 0.000000 0.000000 0.000000 07:07:06.587 0.000153 0.000151 0.000002 0.000153 0.000151 0.000002 0.000000 0.000000 0.000000 07:07:06.587 0.000153 0.000151 0.000002 0.000153 0.000151 0.000002 0.000000 0.000000 0.000000 profile.cpp 88 if (1 < pn) == false; 0.000125 0.000123 0.000002 0.000125 0.000123 0.000002 0.000000 0.000000 0.000000 1 0.000125 0.000123 0.000002 0.000125 0.000123 0.000002 0.000000 0.000000 0.000000 07:07:06.587 0.000125 0.000123 0.000002 0.000125 0.000123 0.000002 0.000000 0.000000 0.000000 07:07:06.587 0.000125 0.000123 0.000002 0.000125 0.000123 0.000002 0.000000 0.000000 0.000000 profile.cpp 107 for 0.001543 0.002672 0.003212 0.001543 0.000213 0.001330 0.001865 0.002458 0.001882 1 0.001543 0.002672 0.003212 0.001543 0.000213 0.001330 0.001865 0.002458 0.001882 07:07:06.587 0.001543 0.002672 0.003212 0.001543 0.000213 0.001330 0.001865 0.002458 0.001882 07:07:06.587 0.001543 0.002672 0.003212 0.001543 0.000213 0.001330 0.001865 0.002458 0.001882
タブ区切りテキストなんで普通にテキスト表示しただけだとカラムがずれた状態で表示されます。MS-Excel のシートに貼り付けるなり、その他のデータ形式に変換するなりしてご利用ください。 各項目の意味についてはリファレンスを参照してください。
このデータを元にプログラムの高速化を図る場合は、"合計自実働時間"順にソートし最も"合計自実働時間"が大きなスコープから高速化を検討するとよいでしょう。またその際には"最大スタンプ"や"最小スタンプ"を手がかりに、どういったフローの時に時間がかかって逆にどういったフローの時に時間がかかっていないのか参考にするのとよいでしょう。
このプロファイルデータにはどうしても測定誤差というものがあることにご留意ください。特にコールカウントが大きなスコープの合計時間に関しては積み重なりにより誤差が大きくなる傾向があります。
__FILE__ __LINE__ スコープ コールカウント profile.cpp 48 if (1 < current) == false; 0 profile.cpp 48 if (1 < current) == true; 1 profile.cpp 55 if (current %p) == false; 2 profile.cpp 55 if (current %p) == true; 1 profile.cpp 57 if (pn) == false; 0 profile.cpp 57 if (pn) == true; 1 profile.cpp 60 if (1 < pn) == false; 1 profile.cpp 60 if (1 < pn) == true; 0 profile.cpp 88 if (1 < pn) == false; 1 profile.cpp 88 if (1 < pn) == true; 0
タブ区切りテキストなんで普通にテキスト表示しただけだとカラムがずれた状態で表示されます。MS-Excel のシートに貼り付けるなり、その他のデータ形式に変換するなりしてご利用ください。
プロファイルのデータと異なり if スコープだけが抽出され、且つ if の条件式が true あるいは false のどちらか片方しかしか実行されなかった if スコープの実行されなかった側をコールカウントが 0 のデータとして挿入します。
このサンプルのコードでは以下の指定により、プロファイルおよびカバレッジの測定結果をそれぞれ "profile.tsv" および "coverage.tsv" に出力します。(+メインのログを "trace.log" に出力します。 )
尚、マルチスレッドの場合はスレッド毎に定義する必要があります。マルチスレッドでのプロファイラの使い方は基本的にロガーと同じですので *_logger と *_profiler という名称の違いはありますが、 .tsv形式ログ出力&マルチスレッドサンプル を参考してください。
| スコープ | 補足 | |
|---|---|---|
| if | if ステートメントの条件判定結果(bool値)もログに出力します。 | |
| while | while ステートメントの条件判定結果(bool値)もログに出力します。 | |
| switch | switch ステートメントの条件判定結果(int値)もログに出力します。 | |
| goto | ||
| break | ||
| continue | ||
| return | 『return func();』のような形の場合、極力『func()』の呼び出しが終了した時点でログを出力するようにしていますが、コンパイラ及びのバージョン等によっては必ずしもはそうなっていないので注意してください。 | |
| do | ||
| for | ||
| try | ||
| throw | 『throw func();』のような形の場合、極力『func()』の呼び出しが終了した時点でログを出力するようにしていますが、コンパイラ及びのバージョン等によっては必ずしもはそうなっていないので注意してください。 | |
| new | ||
| delete |
| マクロ | 説明 |
|---|---|
| BUG_DISABLE_BUGBEARD | このマクロが定義されいる場合、バグベアードはロードされず、"悪魔の契約"も不要です。 |
| BUG_EVIL_CONTRACT | バグベアードを利用するには"悪魔の契約"をよく読んでその意味を理解した上でこのマクロを定義してください。 |
| BUG_STATEMENT_HACK | バグベアードの真骨頂であるステートメントハックを有効にするにはこのマクロを定義した上で bug.h をインクルードしてください。逆に一度有効にしたステートメントハックをソースコードの途中から無効したい場合はこのマクロの定義を解除(#undef)した上で再度 bug.h をインクルードしてください。 cf. ステートメントハックによってマクロ置換されるステートメント |
| BUG_USE_CHAR | char型をバグベアードで使用する文字型として指定する場合にこのマクロを定義してください。このマクロも BUG_USE_WCHAR もともに定義されていない場合で且つ、UNICODE マクロおよび _UNICODE マクロが定義されていない場合、このマクロは自動で定義されます。 |
| BUG_USE_WCHAR | wchar_t型をバグベアードで使用する文字型として指定する場合にこのマクロを定義してください。このマクロも BUG_USE_CHAR もともに定義されていない場合で且つ、UNICODE マクロもしくは _UNICODE マクロが定義されていた場合、このマクロは自動で定義されます。 |
| BUG_SINGLE_PROCESS | シングルプロセスで動作するプログラム上でバグベアードを利用する場合、このマクロを定義してください。このマクロも BUG_MULTI_PROCESS マクロもともに定義されていない場合、このマクロは自動で定義されます。 |
| BUG_MULTI_PROCESS | マルチプロセスで動作するプログラム上でバグベアードを利用する場合、このマクロを定義してください。 |
| BUG_SINGLE_THREAD | シングルスレッドで動作するプログラム上でバグベアードを利用する場合、このマクロを定義してください。このマクロも BUG_MULTI_THREAD マクロもとも定義されていない場合で且つ、_MT マクロおよび __MT__ マクロが定義されていない場合、このマクロは自動で定義されます。 |
| BUG_MULTI_THREAD | マルチスレッドで動作するプログラム上でバグベアードでバグベアードを利用する場合、このマクロを定義してください。このマクロも、BUG_SINGLE_THREAD マクロも定義されていない場合で且つ、_MT マクロもしくは __MT__ マクロが定義されていた場合、このマクロは自動で定義されます。 |
| BUG_THREAD_LOCAL_STORAGE | バグベアードに処理系由来のスレッドローカルストレージ機能を使用させる場合、このマクロでスレッドローカルストレージであることを示す為の型への修飾を指定してください。指定例は bug.h 内のコメントを参照してください。 |
| BUG_WITHOUT_LOCATION_INFO | このマクロが定義されているとロケーション情報(__FILE__,__LINE__,及び関数名)をログ出力しません。 |
| BUG_MASK_SOURCECODE | このマクロが定義されているとステートメントハックによるログ出力中の条件式が "..." に置き換えられます。 |
| BUG_FUNCTION_NAME | __function__ のような関数名を取得する組み込みマクロを利用できる処理系で、関数名をログに出力させた場合にこのマクロでその処理系が持つ関数名取得用組み込みマクロを指定してください。このマクロが定義されていない場合でも処理系によってはこのマクロは自動で定義されます。 |
| BUG_NO_FUNCTION_NAME | BUG_FUNCTION_NAME マクロが自動で定義される処理系で、関数名をログに出力させたく場合はこのマクロを定義することで BUG_FUNCTION_NAME マクロの自動定義を抑止できます。 |
| BUG_DISABLED_PSAPI | Windows で利用する際にお使いのコンパイル環境で PSAPI が利用できない場合は、このマクロを定義してください。このマクロが定義されると bug_enum_module_version_info() の実装が抑止されます。 |
| BUG_DEFINE_GLOBAL_LOGGER | このマクロはシンタックスシュガー的なもので、このマクロでグローバルなロガーの定義を指定おくとバグベアードのヘッダーファイル内でロガーの定義が行われます。このマクロを利用することでロガーを定義する際にバグベアードのヘッダーファイルを2度インクルードすることを回避できます。使用例は プロファイル&カバレッジ測定サンプル を参照してください。 |
| BUG_DEFINE_GLOBAL_PROFILER | このマクロはシンタックスシュガー的なもので、このマクロでグローバルなプロファイラの定義を指定おくとバグベアードのヘッダーファイル内でプロファイラの定義が行われます。このマクロを利用することでプロファイラを定義する際にバグベアードのヘッダーファイルを2度インクルードすることを回避できます。使用例は プロファイル&カバレッジ測定サンプル を参照してください。 |
| BUG_WITHOUT_TSV_LOG_HEADER | このマクロが定義されていると .tsv ログのヘッダー行を出力しなくなります。 |
| BUG_WITHOUT_TSV_PROFILE_HEADER | このマクロが定義されていると .tsv プロファイルデータのヘッダー行を出力しなくなります。 |
| BUG_WITHOUT_TSV_COVERAGE_HEADER | このマクロが定義されていると .tsv カバレッジデータのヘッダー行を出力しなくなります。 |
| マクロ | 説明 |
|---|---|
| BUGBEARD_BUG_H | bug.h の所謂インクルードガードに相当するマクロです。ただし、一般的なインクルードガードはそのヘッダファイル全体が多重に展開されることを防ぐ作りなっていますが、bug.h は BUG_STATEMENT_HACK マクロの定義状態を変更しながら複数回インクルードされること想定した作りとなっており、ステートメントハック関連のマクロ定義/解除がインクルードガードの対象になっていません。 |
| BUG_LOAD_BUGBEARD | BUG_DISABLE_BUGBEARD マクロが定義されずに bug.h がインクルードされたことにより、バグベアードがロードされている場合に定義されます。BUG_* な命名のマクロは全てバグベアードがロードされていない時にはきえさりますが、その他のコードでバグベアードがロードされていない時に消し去りたい場合はそのコードを #if defined(BUG_LOAD_BUGBEARD) 〜 #endif で囲んでください。 |
| BUG_MS_WINDOWS | Windows環境でバグベアードがロードされている場合に定義されます。 |
| マクロ | 説明 |
|---|---|
| BUG_define_logger | ロガーを定義するのに使用します。マルチスレッドの場合、各スレッド毎に定義する必要があります。 |
| BUG_puts | 指定されたテキストをログ出力します。このマクロは標準関数の puts と同じくただ与えられた文字列を出力するだけで printf のような書式機能はありません。書式を利用したい場合は BUG_FORM を利用してください。
BUG_puts("このロリコンどもめ!");
|
| BUG_VAL |
指定された変数・オブジェクトの内容をその名前とともに文字列に変換します。BUG_puts マクロと組み合わせて変数・オブジェクトをログ出力するのに使用します。
BUG_puts(BUG_VAL(speech));
|
| BUG_FORM |
printfと同様の引数をとり、文字列を返します。
BUG_puts(BUG_FORM("%s", "このロリコンどもめ!"));
|
| BUG_exec | バグベアードがロードされている場合にのみ引数部のコードが有効になります。 |
| BUG_scope | 指定されたテキストをスコープログ出力します。 |
| BUG_CHAR_TYPE |
バグベアード使用される文字型を示します。Windows プログラミングでの TCHAR に相当し、BUG_USE_CHAR マクロが定義されていれば char 型を BUG_USE_WCHAR マクロが定義されていれば wchar_t 型を示します。
const BUG_CHAR_TYPE *speech = BUG_T("このロリコンどもめ!");
|
| BUG_API_T | BUG_USE_CHAR/BUG_USE_WCHAR マクロにあわせて Windows API を修飾し ANSI 版と UNICODE 版の切り替えを用意にします。 |
| BUG_T |
BUG_USE_CHAR/BUG_USE_WCHAR マクロにあわせて文字および文字列の型を修飾します。このマクロは Windows プログラミングでの _T/TEXT マクロに相当します。
BUG_puts(BUG_T("たまにはロリコンもいいよね!"));
|
| BUG_LOG | カレントスレッドに関連づけられているロガーを取得します。 |
| BUG_MSG | ログ出力される元テキストにロケーション情報を付加します。ユーザプログラミングにおいてこのマクロは通常意識する必要はありません。 |
| BUG_COMPILER_NAME | コンパイルに使用したコンパイラの名前です。 |
| BUG_COMPILER_VERSION_NUMBER | コンパイルに使用したコンパイラのバージョン番号(数値)です。 |
| BUG_COMPILER_VERSION | コンパイルに使用したコンパイラのバージョン情報(文字列)です。 |
| namespace | 説明 |
|---|---|
| bugbeard | バグベアードの各種型や関数等は一部の例外を除き全てこの名前空間で定義されます。 |
| bugbeard::bug_term | バグベアードで使用される文字列定数(全てではない)がこの名前空間で定義されます。 |
| 型 | 定義 | 説明 |
|---|---|---|
| bug_char | BUG_CHAR_TYPE | バグベアードで使用される文字型です。 |
| bug_string | std::basic_string<bug_char> | バグベアードで使用される文字列型です。 |
| bug_form | bug_form_ex<> | printf書式で文字列を作成するのに使用されるクラスです。BUG_FORM マクロはこのクラスに置換されます。 |
| bug_sint64_type | int64_t | バグベアードで使用される int64_t 。stdint.h を持たない VC++ の為に存在します。 |
| bug_uint64_type | uint64_t | バグベアードで使用される uint64_t 。stdint.h を持たない VC++ の為に存在します。 |
| クラス名 | 説明 |
|---|---|
| bug_form_ex | printf書式による文字列作成機能を提供します。 |
| bug_clock | 現在時刻情報を提供します。 |
| bug_dull_dir | bug_dirの無能版(ディレクトリを作成しない)。 |
| bug_dir | ファイルパス文字列の構築とともにディレクトリ作成を行うユーティリティクラス。 |
| bug_mutex | 汎用ミューテックスクラス。 |
| bug_lock | 自動ロッククラス。 |
| bug_smart_ptr_ref_cnt | 内包用リファレンスカウンタ。 |
| bug_smart_ptr_share | 外付け用リファレンスカウンタ。 |
| bug_smart_ptr | スマートポインタ。 |
| bug_thread_local_storage | スレッドローカルストレージ。 |
| bug_OSVERSIONINFO | Windowsバージョン情報クラス。 |
| クラス名 | 説明 |
|---|---|
| bug_writer | ライター基本クラス。このクラスはインターフェイスを提供する為の抽象クラスなので直接は利用できません。 |
| bug_file_writer_base | 指定されたファイルポインタ(FILE*)に対して書き込みを行うライター。 |
| bug_file_writer | 指定されたファイルパスに対して書き込みを行うライター。Windows 環境下では bug_handle_writer の派生型として実装され、その他の環境下では bug_file_writer_base の派生型として実装されます。なお、Windows環境では UNICODE/_UNICODE マクロや BUG_USE_CHAR/BUG_USE_WCHAR マクロに関係なく常に MBCS および UNICODE でファイルパスを指定できます。 |
| bug_stream_writer | 指定されたストリーム(std::otream)に対して書き込みを行うライター。 |
| bug_fstream_writer | 指定されたファイルパスに対して書き込みを行うライター。bug_file_writerとは異なり名前の通り std::ofstream ベースの実装。 |
| bug_handle_writer | 指定されたハンドルに対して書き込みを行うライター。Windows専用。 |
| bug_OutputDebugString_writer | OutputDebugString()を利用するライター。Windows専用。 |
| クラス名 | 説明 |
|---|---|
| bug_stamp | タイムスタンプ基本クラス。このクラスはインターフェイスを提供する為の抽象クラスなので直接は利用できません。 |
| bug_counter_stamp | カウンタ型タイムスタンプ。形式:%d |
| bug_hex_counter_stamp | 16進表記のカウンタ型タイムスタンプ。形式:0x%08.8X |
| bug_clock_stamp | 時刻型タイムスタンプ。形式:%2.2d:%2.2d:%2.2d |
| bug_clock_stamp_with_date | 日付付き時刻型タイムスタンプ。形式:%4.4d-%2.2d-%2.2d(%s) %2.2d:%2.2d:%2.2d |
| bug_short_clock_stamp | ショート時刻型タイムスタンプ。形式:%2.2d%2.2d%2.2d |
| bug_short_clock_stamp_with_date | 日付付きショート時刻型タイムスタンプ。形式:%4.4d%2.2d%2.2d%2.2:%2.2d%2.2d |
| bug_clock_stamp_ex | 精細時刻型タイムスタンプ。形式:%2.2d:%2.2d:%2.2d.%3.3d |
| bug_clock_stamp_ex_with_date | 日付付き精細時刻型タイムスタンプ。形式:%4.4d-%2.2d-%2.2d(%s) %2.2d:%2.2d:%2.2d.%3.3d |
| bug_clock_stamp_ex2 | 高精細時刻型タイムスタンプ。形式:%2.2d:%2.2d:%2.2d.%6.6d |
| bug_clock_stamp_ex2_with_date | 日付付き高精細時刻型タイムスタンプ。形式:%4.4d-%2.2d-%2.2d(%s) %2.2d:%2.2d:%2.2d.%6.6d |
| bug_GetTickCount_stamp | GetTickCount型タイムスタンプ。Windows専用。形式:%08.8X |
| bug_QueryPerformanceCounter_stamp | QueryPerformanceCounter型タイムスタンプ(RAW)。Windows専用。形式:%08.8X%08.8X |
| bug_QueryPerformanceSecond_stamp | QueryPerformanceCounter型タイムスタンプ(秒+マイクロ秒)。Windows専用。形式:%7d.%06.6d |
| クラス名 | 説明 |
|---|---|
| bug_message | ロケーション情報(__FILE__ 及び __LINE__)とログ出力するテキストを保持します。 |
| クラス名 | 説明 |
|---|---|
| bug_profile_time_type | 高精度時間型。 |
| bug_profile_time_set | bug_profile_time_type で、稼働時間、バグ時間、実働時間を保持します。 |
| bug_profile_time_score | bug_profile_time_set で、自スコープと子スコープの時間を保持します。 |
| bug_profile_time_score_set | 特定のスコープに関する全プロファイルデータを保持します。 |
| bug_bug_time_scope | その生存期間でバグベアードによるオーバーヘッド(バグ時間)を測定します。 |
| bug_profile_scope | その生存期間でスコープの稼働時間を測定します。 |
| クラス名 | 説明 |
|---|---|
| bug_logger | ロガー基本クラス。このクラスは主にインターフェイスを提供する為の抽象クラスなので直接は利用できません。 |
| bug_tsv_logger | .tsv(タブ区切り)形式のログを出力します。 |
| bug_tree_logger | ツリー形式のログを出力します。 |
| bug_compact_tree_logger | 圧縮ツリー形式のログを出力します。ツリー部分が bug_tree_logger の約1/6に圧縮されます。 |
| クラス名 | 説明 |
|---|---|
| bug_profiler | プロファイラー基本クラス。このクラスはプロファイルデータを保持しますが、出力する機能を持ち合わせいないので直接指定しても意味がありません。このクラスの代わりに bug_tsv_profiler を指定してください。 |
| bug_tsv_profiler | .tsv(タブ区切り)形式でプロファイルおよびカバレッジ測定結果を出力します。 |
| 関数名 | 説明 |
|---|---|
| bug_binary_prefix | 符号なし64ビット値を二進接頭辞で修飾した文字列(bug_string型)に変換します。bug_binary_prefix(39029211136, BUG_T("Byte")) で呼び出すと "36.3GiByte(39029211136)" のような文字列が返ります。第二引数は省略可。 |
| bug_hex_encode | 与えられたバイナリデータをHEXエンコードされた文字列(bug_string型)に変換します。 |
| bug_encode_value | 各種データを文字列(bug_string型)に変換します。BUG_VALマクロで呼び出される bug_encode() はこの bug_encode_value() を利用して各種データを文字列に変換します。その他なデータ型は bug_hex_encode() で HEX エンコードされます。独自のデータ型を HEX エンコード以外の形でログに残したい場合は自前でこの bug_encode_value() のオーバーロードを定義してください。 |
| bug_encode | BUG_VALマクロ用の本体関数で、BUG_VALマクロで指定された変数の「名前」、「アドレス」、「内容」をひとつの文字列(bug_string型)にまとめます。 |
| bug_run_string | 第一引数で指定された数だけ第二引数で指定された文字列を繰り返した文字列(bug_string型)を返します。 |
| bug_get_win32_err_msgA | Win32APIのエラーコード(GetLastError())に対応するエラーメッセージ(std::string型)を返します。Windows専用。 |
| bug_get_win32_err_msgW | Win32APIのエラーコード(GetLastError())に対応するエラーメッセージ(std::wstring型)を返します。Windows専用。 |
| bug_get_winver | Windows のバージョン+エディション表記(bug_string型)を返します。Windows専用。 ex. "Microsoft Windows Vista Business Edition, 32-bit" |
| bug_compile_info | コンパイルを行った日時、コンパイルに使用したコンパイラの名称およびバージョンを第一引数で指定されたロガーを使って出力します。 |
| bug_arg_info | main()関数の引数の内容を第一引数で指定されたロガーを使って出力します。 |
| bug_windows_version_info | Windowsのバージョン情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_module_version_info | 第二引数で指定された実行形式ファイル(*.exe;*.dll)のバージョン情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_enum_module_version_info | カレントプロセスがロードしている全てのモジュール(*.exe;*.dll)のバージョン情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_memory_info | システム全体のメモリの使用状況を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_drive_info | 第二引数で指定されたドライブの情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_enum_drive_info | 全てのドライブの情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_MonitorEnumProc | 第二引数で指定されたモニターの情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_enum_monitor_info | 全てのモニターの情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_enum_display_info | 全てのディスプレイの情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_env | 第二引数で指定された環境変数の内容を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_enum_env | 全ての環境変数の内容を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_windows_system_info | Win32APIの GetSystemInfo() で得られた情報を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| bug_file_hash | 第二引数で指定されたファイルのハッシュ値を第一引数で指定されたロガーを使って出力します。デフォルトではMD5が使用されますが第三引数+第四引数でその他のハッシュ関数も指定できます。Windows専用。 |
| bug_enum_module_hash | カレントプロセスがロードしている全てのモジュール(*.exe;*.dll)のハッシュ値を第一引数で指定されたロガーを使って出力します。Windows専用。 |
| 項目名 | 説明 |
|---|---|
| プロセスID | プロセスID。BUG_MULTI_PROCESS マクロが定義されている場合にのみ出力されます。 |
| スレッドID | スレッドID。BUG_MULTI_THREAD マクロが定義されている場合にのみ出力されます。 |
| __FILE__ | ファイル名。オーバーオールスコープでは "@OVERALL_SCOPE" となります。 |
| __LINE__ | 行番号。オーバーオールスコープでは 0 となります。 |
| __function__ | 関数名。BUG_FUNCTION_NAME マクロが定義されている場合にのみ出力されます。オーバーオールスコープでは "@OVERALL_SCOPE" となります。 |
| スコープ | スコープ。オーバーオールスコープでは "@OVERALL_SCOPE" となります。 |
| そのスコープ自身とその内包するスコープの実行に要した全ての時間の合計。合計総稼働時間=(合計総バグ時間+合計総実働時間)=(合計自稼働時間+合計子稼働時間)=SUM(総稼働時間)。 | |
| 合計総バグ時間 | そのスコープ自身とその内包するスコープの測定の為に要した全てのオーバーヘッドの合計。合計総バグ時間=(合計自バグ時間+合計子バグ時間)=SUM(総バグ時間)。 |
| 合計総実働時間 | そのスコープ自身とその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の合計。合計総実働時間=(合計自実働時間+合計子実働時間)=SUM(総実働時間)。 |
| 合計自稼働時間 | そのスコープ自身の実行に要した全ての時間の合計(内包するスコープの時間は除く)。合計自稼働時間=(合計自バグ時間+合計自実働時間)=SUM(自実働時間)。 |
| 合計自バグ時間 | そのスコープ自身の測定の為に要した全ての時間の合計(内包するスコープの時間は除く)。合計自バグ時間=SUM(自バグ時間)。 |
| 合計自実働時間 | そのスコープ自身の実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の合計(内包するスコープの時間は除く)。合計自実働時間=SUM(自実働時間)。 |
| 合計子稼働時間 | その内包するスコープの実行に要した全ての時間の合計。合計子稼働時間=(合計子バグ時間+合計子実働時間)=SUM(子実働時間)。 |
| 合計子バグ時間 | その内包するスコープの測定の為に要した全ての時間の合計。合計子バグ時間=SUM(子バグ時間)。 |
| 合計子実働時間 | その内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の合計。合計子実働時間=SUM(子実働時間)。 |
| コールカウント | そのスコープが実行された回数。 |
| 平均総稼働時間 | そのスコープ自身とその内包するスコープの実行に要した全ての時間の平均。平均総稼働時間=(合計総稼働時間÷コールカウント)=(平均総バグ時間+平均総実働時間)=(平均自稼働時間+平均子稼働時間) |
| 平均総バグ時間 | そのスコープ自身とその内包するスコープの測定の為に要した全てのオーバーヘッドの平均。平均総バグ時間=(合計総バグ時間÷コールカウント)=(平均自バグ時間+平均子バグ時間)。 |
| 平均総実働時間 | そのスコープ自身とその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の平均。平均総実働時間=(合計総実働時間÷コールカウント)=(平均自実働時間+平均子実働時間)。 |
| 平均自稼働時間 | そのスコープ自身の実行に要した全ての時間の平均(内包するスコープの時間は除く)。平均自稼働時間=(合計自稼働時間÷コールカウント)=(平均自バグ時間+平均自実働時間)。 |
| 平均自バグ時間 | そのスコープ自身の測定の為に要した全ての時間の平均(内包するスコープの時間は除く)。平均自バグ時間=(合計自バグ時間÷コールカウント)。 |
| 平均自実働時間 | その内包するスコープの実行に要した全ての時間の平均。平均子稼働時間=(合計子稼働時間÷コールカウント)=(平均子バグ時間+平均子実働時間)。 |
| 平均子稼働時間 | その内包するスコープの実行に要した全ての時間の平均。平均子稼働時間=(合計子稼働時間÷コールカウント)=(平均子バグ時間+平均子実働時間)。 |
| 平均子バグ時間 | その内包するスコープの測定の為に要した全ての時間の平均。平均子バグ時間=(合計子バグ時間÷コールカウント)。 |
| 平均子実働時間 | その内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の平均。平均子実働時間=(合計子実働時間÷コールカウント)。 |
| 最小スタンプ | 総実働時間が最小となった時のそのスコープのロガー上でのスタンプ。 |
| 最小総稼働時間 | 総実働時間が最小となった時のそのスコープ自身とその内包するスコープの実行に要した全ての時間。最小総稼働時間=(最小総バグ時間+最小総実働時間)=(最小自稼働時間+最小子稼働時間) |
| 最小総バグ時間 | 総実働時間が最小となった時のそのスコープ自身とその内包するスコープの測定の為に要した全てのオーバーヘッド。最小総バグ時間=(最小自バグ時間+最小子バグ時間)。 |
| 最小総実働時間 | そのスコープ自身とその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の最小値。最小総実働時間=(最小自実働時間+最小子実働時間)。 |
| 最小自稼働時間 | 総実働時間が最小となった時のそのスコープ自身の実行に要した全ての時間(内包するスコープの時間は除く)。最小自稼働時間=(最小自バグ時間+最小自実働時間)。 |
| 最小自バグ時間 | 総実働時間が最小となった時のそのスコープ自身の測定の為に要した全ての時間(内包するスコープの時間は除く)。 |
| 最小自実働時間 | 総実働時間が最小となった時のその内包するスコープの実行に要した全ての時間。最小子稼働時間=(最小子バグ時間+最小子実働時間)。 |
| 最小子稼働時間 | 総実働時間が最小となった時のその内包するスコープの実行に要した全ての時間。最小子稼働時間=(最小子バグ時間+最小子実働時間)。 |
| 最小子バグ時間 | 総実働時間が最小となった時のその内包するスコープの測定の為に要した全ての時間。 |
| 最小子実働時間 | 総実働時間が最小となった時のその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間。 |
| 最大スタンプ | 総実働時間が最大となった時のそのスコープのロガー上でのスタンプ。 |
| 最大総稼働時間 | 総実働時間が最大となった時のそのスコープ自身とその内包するスコープの実行に要した全ての時間。最大総稼働時間=(最大総バグ時間+最大総実働時間)=(最大自稼働時間+最大子稼働時間) |
| 最大総バグ時間 | 総実働時間が最大となった時のそのスコープ自身とその内包するスコープの測定の為に要した全てのオーバーヘッド。最大総バグ時間=(最大自バグ時間+最大子バグ時間)。 |
| 最大総実働時間 | そのスコープ自身とその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間の最大値。最大総実働時間=(最大自実働時間+最大子実働時間)。 |
| 最大自稼働時間 | 総実働時間が最大となった時のそのスコープ自身の実行に要した全ての時間(内包するスコープの時間は除く)。最大自稼働時間=(最大自バグ時間+最大自実働時間)。 |
| 最大自バグ時間 | 総実働時間が最大となった時のそのスコープ自身の測定の為に要した全ての時間(内包するスコープの時間は除く)。 |
| 最大自実働時間 | 総実働時間が最大となった時のその内包するスコープの実行に要した全ての時間。最大子稼働時間=(最大子バグ時間+最大子実働時間)。 |
| 最大子稼働時間 | 総実働時間が最大となった時のその内包するスコープの実行に要した全ての時間。最大子稼働時間=(最大子バグ時間+最大子実働時間)。 |
| 最大子バグ時間 | 総実働時間が最大となった時のその内包するスコープの測定の為に要した全ての時間。 |
| 最大子実働時間 | 総実働時間が最大となった時のその内包するスコープの実行に要した全ての時間から測定の為のオーバーヘッドを差し引いた時間。 |
「総=自+子」及び「稼働=バグ+実働」なんだと理解して頂ければ後はそれの応用です。
2008-02-24 "Coming soon..." などと謳いつつ5年近くほったらかしにしてましたが、ついに正式版のリリースです。 作者が言うのなんですが、このモジュールは非常に強力且つ凶悪です。ご利用いただければあなたの C++ プログラミングにおけるデバッグシーンに劇的な変化をもたらすであろうことお約束します。
2008-02-25 inline指定が抜けてて複数のコンパイル単位から利用するとリンク時にシンボルが衝突する問題を修正。
2008-03-10 以下の点を修正。
2008-04-01 以下の点を修正。
2008-06-05 以下の点を修正。
2008-09-23 以下の点を修正。
2008-11-01 以下の点を修正。
2010-02-14 以下の点を修正。
2011-03-21 ステートメントハックを一度有効化した後、無効化できなくなっていた問題を修正