はじめに

MagaDebug32とは？

動作環境

インストール方法

アンインストール方法


MagaDebug32とは？

この度は「MagaDebug32」をダウンロードしていただきありがとうございます．

MagaDebug32のご紹介

　その昔，ＤＯＳアプリケーション作成時，手軽に出来るデバッグ手法としてプログラムのあちこちに printf() を挿入し，その表示でプログラムの動きや変数の値を捕らえることをよくやりましたよね．

「MagaDebug32」は，Ｗｉｎｄｏｗｓプログラミングにてこれと同じことを出来るようにした printf()型のデバッグツールです．

VisualC++などの統合環境でもブレークポイントやウォッチによってこれらのことが可能ですが，「MagaDebug32」を使用すればプログラムの動きを途中で止めずこれらのデバッグが出来るため，

・通信制御など途中でブレークするとタイムアウトしてしまう

・タイマなど刻一刻と変化する状態を捕らえる

・WM_PAINT応答時にデバッグウィンドウと切り替わっては困る

・システムフックなど統合環境でのデバッグでは不安定

・ヤミで動くＤＬＬ

などのデバッグに特に有効利用出来ると思います．

MessageBox() を使用してデバッグされている方にも非常に有効です．

また，ログをファイルに残すことが可能なことから，

・Windows終了時のアプリケーション処理

のデバッグも可能となります．（WM_QUERYENDSESSION のメッセージ処理を記録）

もちろん普通のウィンドウアプリケーションでも統合環境のデカいウィンドウを表示させずにデバッグできますので，いずれをとっても有用なデバッグツールとして使えます．

端的に言えば１６ビットＳＤＫに付属していた「DBWIN」に様々な付加機能を付け加えたデバッグツールとなっております．

　本プログラムは，VisualC++（ＭＦＣ未使用）にて開発しました．


動作環境

以下の構成で作成・テスト（デバッグツールのデバッグ　^^;）を行いました．

Ver1.31以前

・PC-9821Xp + Windows95 + VisualC++4.1

・PC-9821La10 + Windows95 SP1

Ver1.32以降

・自作ＡＴ互換機 + Windows95 OSR2.1 + VisualC++4.1

・自作ＡＴ互換機 + WindowsNT4.0 Workstation SP3

・PC-9821La10 + Windows95 SP1

Ver1.40以降

・自作ＡＴ互換機 + Windows98 + VisualC++4.1

・自作ＡＴ互換機 + WindowsNT4.0 Workstation SP4

・PC-9821La10 + Windows98

Ver1.41以降

・自作ＡＴ互換機 + Windows98 SP1 + VisualC++6.0

・自作ＡＴ互換機 + WindowsNT4.0 Workstation SP5

・PC-9821La10 + Windows98 SP1

特に開発環境ですが，作者の環境の都合上，VisualC++6.0/4.1用とBorlandC++用のライブラリを用意しております．

それ以外のコンパイラ，ならびに統合環境については，お知らせを参照してください．

なお，以下のヘルプは VisualC++ を前提として書かれております．BorlandC++ユーザの方は，適当に読み替えて環境を整えてください．

ターゲットアプリケーションはＭＦＣの使用・未使用（ＳＤＫソース）、ＥＸＥやＤＬＬ等アプリケーションタイプは問いません．なんでもＯＫです．


インストール方法

VisualC++の設定で示すパスに，配布したヘッダーファイル(*.h)とライブラリファイル(*.lib)を置いてください．

（注）ヘッダーファイルは VisualC++, BorlandC++共通，ライブラリファイルは VisualC++6.0/4.1とBorlandC++用に分けてありますので，開発環境に合わせてインストールしてください．

(VC++の場合は，リリース・デバッグ用Ｌｉｂの両方をインストールしてください)

MagaDebug32本体と関連ファイル(上記以外のファイル)は適当なフォルダに格納し，MagaDbg.exe のショートカットを適当なスタートメニューに作成しておいてください．

本体と関連ファイル(特にヘルプファイル)は全て同じフォルダに格納してください．

できれば専用のフォルダを用意した方がいいでしょう．


アンインストール方法

WindowsフォルダにはＩＮＩファイル等の書き込みを行っていませんが，Ver1.35よりプログラム情報をレジストリに書き込んでおりますので，付属のアンインストーラ unreg.exe （レジストリの削除のみ）を実行するか，レジストリエディタより以下のキーを削除してください．（プログラムが書ける人向けのツールですので，レジストリエディタの操作はできると思います．^^;）

\HKEY_CURRENT_USER\Software\MNCT-S\MagaDebug32

実体ファイルのアンインストーラはありませんので，手動で消去してください．


テクニカルノート

VisualC++の設定

プロジェクト単位の設定

インクルードファイル

Ｃ＋＋

Ｃ

マクロ

制限事項


VisualC++の設定

各プロジェクト共通の設定としてユーザライブラリやヘッダーファイルのサーチパスを設定しておくとその名前だけで指定できるようになります．VisualC++で用意されているライブラリやヘッダーファイルと同じ場所にユーザライブラリを置いても問題ないですが，おすすめできません．

ユーザライブラリ専用のフォルダを作成し，それをVisualC++のサーチパスに加えます．

ユーザライブラリの格納フォルダを「B:\USR\MSC\USR\LIB」

ヘッダーファイルの格納フォルダを「B:\USR\MSC\USR\INCLUDE」

としたとき，VisualC++メニューの「ツール」→「オプション」で表示されるダイアログの「ディレクトリ」タグで以下のようにサーチパスを追加します．

例ではインクルードパスのみですが，同様の方法でライブラリパスも指定します．

BorlandC++ の場合は，メニューの「オプション」→「プロジェクト」から同様の設定が可能です．


プロジェクト単位の設定

MagaDbgライブラリをスタティックリンクするよう指示します．

ＳＤＫタイプのプロジェクトなどは，すでにたくさんのシステムライブラリが網羅されています．その末尾に追加してください．

Ver1.40より前のバージョンでは，ターゲットプログラムのコード生成に「デバッグバージョンのどれか」を強制するようになっていましたが，Ver1.40以降は，リリースモードのコード生成用にもＬｉｂファイルを用意しています．つまり，リリースビルドにおいても MagaDebug32 へのメッセージ送信が可能となりました．

上記で指定するＬｉｂファイルは，

リリースモード ： MagaDbgR.lib

デバッグモード： MagaDbg.lib

を指定してください．

ビルド中，リンクのところで「LIBCは他のライブラリの使用と競合しています．; /NODEFAULT TLIB:libraryを使用してください」と出る場合は，恐らく上記の設定が間違っています．確認してください．

または，以下のように無視するライブラリを指定しておきます．


インクルードファイル

MagaDebug32 を使用するには，ソース単位にインクルードファイルを読み込む必要があります．既にVisualC++の設定にてパスを設定しているはずなので以下のように記述します．

#ifdef _DEBUG

#include "MagaDbg.h"

#endif

必ず，#ifdef _DEBUG と #endif で囲ってください．

また，Ver1.22以降でサポートされたマクロを使用する場合は

#include "MagaDbgMac.h"

を追加する必要があります．これは _DEBUG フラグが設定されていないときにも「マクロ無効化」という仕事がありますので，#ifdef _DEBUG と #endif で囲まないでください．

MagaDbgMac.h 内では MagaDbg.h がインクルードされているかどうかチェックしていますので，新しくコーディングするときは，条件コンパイルの必要ない MagaDbgMac.h だけでもＯＫです．

Ver1.40 以降でサポートされたリリースモードでの指定方法ですが，以下のような例を参考にしてください．

#define RELEASEDEBUG    // この名前は固定ではありません．お好きな名前をどうぞ

// ほんとは以下の３行のようにすると簡単ですが，

// 他の場所で影響がでるので...

//#ifdef RELEASEDEBUG

//#define _DEBUG

//#endif

...

...

#if defined(_DEBUG) || defined(RELEASEDEBUG)

CMagaDbg	dbg;

#endif

...

こうすることで， #define RELEASEDEBUG をコメント化するだけで最終リリースできるでしょう．

プロジェクト単位の設定で指定したリリースモード用のＬｉｂファイルは，はずす必要はありません．プログラム内で使用しなければリンクされません．


Ｃ＋＋

コンストラクタ

メンバ関数

例題


コンストラクタ

基本クラスのコンストラクタには以下の種類があります．

・CMagaDbg(void);

・CMagaDbg(char* lpszHead,

BOOL fSep = FALSE,

dbgColor eColor = DBG_BLACK,

DWORD dwInterval = 0);

・CMagaDbg(char* lpszHead, dbgColor eColor);

・CMagaDbg(char* lpszHead, BOOL fSep);

・CMagaDbg(BOOL fSep);

・CMagaDbg(dbgColor eColor);

派生クラスのコンストラクタには以下の種類があります．

・CMagaDbgFile(

char* lpszFilename,

BOOL fOverwrite = TRUE,

BOOL fDisplay = TRUE,

char* lpszHead = NULL,

BOOL fSep = FALSE,

dbgColor eColor = DBG_BLACK,

DWORD dwInterval = 0

);

・CMagaDbgFile(MAGADBGOPT* lpMagaDbgOpt);

引数

lpszHead

　MagaDebug32のウィンドウへログを表示させるとき，常にこの文字列を付け加える．

'\n' 以降の文字列は，オブジェクト生成時のスタートメッセージとして表示されます．

fSep

　オブジェクトが破棄されるとき，MagaDebug32で設定されたセパレータ（区切り文字）を

挿入(TRUE)するかしない(FALSE)か

eColor

　MagaDebug32のウィンドウへログを表示させるときの色．enum型で，DBG_BLACK, DBG_BLUE, DBG_GREEN, DBG_CYAN, DBG_RED, DBG_MAGENTA, DBG_YELLO, DBG_WHITE が指定できる

dwInterval

　メッセージ表示時にスリープする時間[ms]

lpszFilename

　出力するログのファイル名

fOverwrite

　上書(TRUE)するか，追加(FALSE)するか

fDisplay

　表示も行う(TRUE)か，ファイル出力のみ(FALSE)か

lpMagaDbgOpt

　CMagaDbgFileの引数をまとめた構造体

解説

引数なしのコンストラクタは，主に広域オブジェクト（すなわち外部変数）として宣言．

引数ありのコンストラクタは，各関数単位にオブジェクトを生成すると便利なように作られています．

派生クラス(CMagaDbgFile)は，ログのファイル出力を同時に行う準備を行います．つまりこれに属するメンバ関数を使用すると（CMagaDbgFileオブジェクト経由だと）ファイルへの出力も同時に行えます．

例

#ifdef _DEBUG	// デバッグモードなら

#include "MagaDbg.h"	// インクルード（必須）

CMagaDbg g_dbg;	// 広域オブジェクトの生成

#endif

int CMainFrame::OnCreate(....)

{

#ifdef _DEBUG

CMagaDbg dbg("OnCreate", TRUE, DBG_YELLOW);	// 関数単位のオブジェクト

#endif

...

}

void CMainFrame::OnTimer(....)

{

#ifdef _DEBUG

CMagaDbgFile dbg("\\tmp\\timer.log", FALSE, FALSE);

// Timerログはファイル出力へ，かつ，

// 追加モードでないと．．．^^;

// 表示はいっぱいになるからヤメ

// ただ，呼ばれる度に OPEN-CLOSE を繰り返すので遅い．．

// この場合は，こいつを広域オブジェクト（外部変数）にするのがベストですね．

#endif

...

}


メンバ関数

基本クラスのメンバ関数には以下の関数があります．

・void printf(char* szbuf, ...);

　通常のprintf()同様，書式文字列とそれに対応した変数を記述できます．

但しエスケープ文字(\nなど)は指定しても正しく表示されません．

MagaDebug32のログウィンドウ上では必ず改行されます．

（これを記述しすぎて本物のprintf()を使うとき，よく'\n'を忘れます．^^;）

・void print(char* szbuf, const BOOL fCR = CR);

　主に固定文字列を表示させる時に使います．第２引数に「CRNO」(FALSE)を指定すると改行されずにログが表示されます．

（上記のprintf()が内部的にも呼び出しています．）

・void printStruct (LPRECT lpRect);

・void printStruct (LPSIZE lpSize);

・void printStruct (LPPOINT lpPoint);

　よく使われるであろう構造体(RECT, SIZE, POINT)それぞれのメンバ変数を表示します．ＭＦＣの独自構造体(CRect, CSize, CPoint)でもＯＫです．SIZE や POINT 構造体はメンバ変数が２つなのでそれほど恩恵はありませんが，RECT 構造体は４つのメンバ変数をいちいち記述しなくてもよくなります．

Ver1.3x以前の旧バージョンから関数名が変更されていますが，旧関数名もマクロとして宣言されています．

・BOOL scanf(char* szbuf, char* szTitle = NULL);

　ダイアログを表示し，値の入力が可能になります．szbuf には入力した値を格納する１２８バイト以上確保したポインタを指定します．szTitle には識別するラベル文字列のポインタを指定します（省略可）．入力ダイアログでＯＫボタンが押されると「0」を返します．ＣＡＮＣＥＬボタンやその他のエラーの時は「-1」を返します．数値で取得したいときは，戻り値確認後，各プログラムにて変換してください．

尚，この関数を呼び出すと，入力ダイアログ表示中はターゲットプログラム側の動作は全て停止します（タイマイベントも起こりませんしウィンドウ操作もできません）．

・void dump(void* lpStart, unsigned int byte, DWORD dmpflg = 0);

　lpStart から byte 分をダンプ表示します．ダンプ表示の種類を dmpflg に指定します．

dmpflg には以下の種類があります．必要なフラグを OR演算子で指示してください．

・DBG_NOHEADERDUMP

　　ダンプ表示のヘッダーを表示しません．

・DBG_OCTDUMP

　　８バイトづつで折り返します．（デフォルトは１６）

・DBG_NOADDRESSDUMP

　　左側にアドレスを表示しません．

・DBG_NOCHRDUMP

　　右側に 0x20 から 0x7e までのキャラクタを表示しません．

・void SetInterval(DWORD dwInterval);

　オブジェクト初期化時のインターバル設定を変更します．

派生クラス(CMagaDbgFile)のメンバ関数は基本クラスのメンバ関数を継承しています．ただ，ファイルに出力されるのと，コンストラクタ（初期化時）のオプションによってMagaDebug32のウィンドウに表示されなかったりします．


例題

以下のようなテストプログラムを作成してみました．参考にしてください．（プロジェクトタイプは「コンソール（ＤＯＳ窓実行用）」です．）

/*

MagaDbg Test

*/

#include <windows.h>

#include <stdio.h>

#include "MagaDbg.h"

CMagaDbg	g_dbg;	// グローバルオブジェクト

void sub(int i) {

CMagaDbg	dbg(DBG_RED);	// ローカルオブジェクト

dbg.printf("%d", i);

}

void main(void) {

static	char	msg[] = {

"MagaDbgTest(Console)"

};

g_dbg.printf("%s=%d", msg, lstrlen(msg));

g_dbg.print("test");

g_dbg.printf("%d", 100);

g_dbg.print("0x%X", GetDesktopWindow());

for (int i=0; i<5; i++) {

g_dbg.print("sub() call start");

sub(i);

}

}

　このプログラム実行でMagaDebug32に表示されるログは以下の通りです．

（サンプル画面は古いバージョンのものです．^^;）


Ｃ

Ｃ言語サポート関数


Ｃ言語サポート関数

Ｃ言語から呼び出せるデバッグ関数には以下の関数があります．

・void Dbg_printf(char *szbuf, ...);

　通常のprintf()同様，書式文字列とそれに対応した変数を記述できます．但しエスケープ文字(\nなど)は指定しても正しく表示されません．

MagaDebug32のログウィンドウ上では必ず改行されます．

・void Dbg_sep(void);

　MagaDebug32で設定されたセパレータ(区切り文字）を挿入します．

・BOOL Dbg_scanf(char *szbuf, char *szTitle);

　ダイアログを表示し，値の入力が可能になります．szbuf には入力した値を格納する１２８バイト以上確保したポインタを指定します．szTitle には識別するラベル文字列のポインタを指定します．入力ダイアログでＯＫボタンが押されると「0」を返します．ＣＡＮＣＥＬボタンやその他のエラーの時は「-1」を返します．数値で取得したいときは，戻り値確認後，各プログラムにて変換してください．

尚，この関数を呼び出すと，入力ダイアログ表示中はターゲットプログラム側の動作は全て停止します（タイマイベントも起こりませんしウィンドウ操作もできません）．

・void Dbg_dump(void* lpStart, unsigned int byte, DWORD dmpflg);

　lpStart から byte 分をダンプ表示します．ダンプ表示の種類を dmpflg に指定します．

dmpflg には以下の種類があります．必要なフラグを OR演算子で指示してください．

・DBG_NOHEADERDUMP

　　ダンプ表示のヘッダーを表示しません

・DBG_OCTDUMP

　　８バイトづつで折り返します（デフォルトは１６）

・DBG_NOADDRESSDUMP

　　右側にアドレスを表示しません

・DBG_NOCHRDUMP

　　左側に 0x20 から 0x7e までのキャラクタを表示しません

Ｃ言語用に用意したデバッグ関数ですが，よほどの理由がない限りＣ＋＋バージョンのデバッグクラスの方を利用することを強くお奨めします．

ＳＤＫソースでもＣ＋＋の機能を使わなくても，ソースファイルの拡張子をCPPとすることでＣ＋＋モードのコンパイルがなされます．

ただし，オブジェクト生成の必要ないＣ言語関数ですからちょっとしたデバッグに使用するには便利かも知れません．一応 Ver1.23 よりＣ＋＋からも呼び出せるようになっています．


マクロ

Ｃ／Ｃ＋＋共通マクロ


Ｃ／Ｃ＋＋共通マクロ

サポートされている関数により様々なトラップを仕掛けることができますが，いかんせんコーディングの度に

#ifdef _DEBUG

dbg.printf("hogehoge=%s", hoge);

#endif

と少なくとも３行毎回記述する必要があり，非常に面倒です．

Ver1.22より以下のマクロを作成しました．

本マクロヘッダー(MagaDbgMac.h)でサポートされるマクロは，条件コンパイルを必要としません．単体コーディングで，デバッグ環境のみコンパイルされるよう記述されています．

・DBGASSERT(expr, str);

解説

　式exprが偽(FALSE or NULL)のとき，strを表示する．表示はマクロヘッダーファイルに記述されているとおり，赤色で "DBGASSERT:"文字列とファイル名・行番号とともに表示される．

VisualC++でサポートされている本物のASSERTマクロのようにプログラムを停止させません．

例

DBGASSERT(hwnd, "WindowHandle NULL!");	// hwnd が NULL のときメッセージ表示

DBGASSERT(0, "hogehoge OK!");	// 常に表示

・DBGBOOL(OBJ, str, expr)

解説

　式exprの値を，str = "TRUE"か"FALSE" で表示する．「０」とか「１」では直感的に解りづらいときに便利．

C++のときは，生成したオブジェクト名が必要です．

C言語のときは，引数OBJは必要ありません．

・DBGPARAM(OBJ, param)

解説

　値paramを，HIWORD と LOWORD に分けて表示する．

C++のときは，生成したオブジェクト名が必要です．

C言語のときは，引数OBJは必要ありません．


制限事項

ログの表示制限


ログの表示制限

・ログの蓄積最大行数は１０００行です．越えると１行目から上書きされます．

・１行の最大文字数はＮＵＬＬ含む１２８バイトです．越えると無視されます．


ウィンドウ操作

メニューコマンド

キー操作


メニューコマンド

ファイル

編集

表示

挿入

オプション


ファイル
ファイルメニュー

・ログの出力(S) Ctrl+S

　現在蓄積されているログをファイルに出力します．

・選択ログ出力(A) Ctrl+A

　マウスで選択したログだけをファイルに出力します．

ログを出力するデフォルトのディレクトリを指定する場合は，MagaDbg.EXE を実行するショートカットで以下のように作業フォルダを指定すればそれがデフォルトのログ出力フォルダとなります．（ほとんどのWindowsアプリケーションと同じです）

・印刷(P) Ctrl+P

　表示ログを印刷します．印刷前に，下のページ設定でマージンやフォントなどを設定しておきましょう．

・ページ設定(U)

　マージン・ヘッダー・フッダー・フォントなどを設定するダイアログが表示されます．状況依存ヘルプが使用できます．


編集
編集メニュー

・コピー(C) Ctrl+C

　現在蓄積されているログをクリップボードに転送します．

・選択ログコピー(X) Ctrl+X

　マウスで選択したログだけをクリップボードに転送します．

・全選択(M) Ctrl+M

　蓄積ログ全体を選択状態にします．

・選択解除(D) Ctrl+D

　選択状態のログを全て解除します．

・ログのクリア(C) Shift+DEL

　蓄積ログを全消去します．

・検索(F) Ctrl+F

　ログの検索を行います．

検索でヒットした文字列を含む行がウィンドウの最上段に位置づけされます．


表示
表示メニュー

・ツールバー(T)

　ツールバーを表示するかしないかを指定します．ツールバーは残念ながらフローティングではありません．

・行番号(L)

　左端に行番号を表示するかしないかを指定します．ビューウィンドウ上で左ダブルクリックでも切替が可能です．

・フィルタ(S) Ctrl+L

　表示されているメッセージにフィルタをかけます。フィルタは色で識別されます．

・フィルタ解除(R) Ctrl+R

　フィルタ表示を解除します．

・フォント(F) Ctrl+O

　表示ログのフォントが変更できます．０(ゼロ)とＯ(オー)の区別がつくフォントが望ましいでしょう．サイズも変更できます．

・オートスクロール(A) Ctrl+U

　ログ受信時に自動的にスクロールします。チェックしておきましょう．

・メッセージ受信時

　メッセージログ受信時にウィンドウをどうするかを指定します．

　1)何もしない(N)

　　ﾒｯｾｰｼﾞを受け取っても何もしません．つまり，ウィンドウが隠れていてもそのままです．

　　（ﾒｯｾｰｼﾞを受け取らない/表示しないという意味ではありません．

　　 例えば最小化状態で受信させるなど現在のｳｨﾝﾄﾞｳ状態を保つことを指します．）

　2)アクティブ(A)

　　ﾒｯｾｰｼﾞ受信時，常にアクティブにしてウィンドウを開きます．

　　連続ﾒｯｾｰｼﾞを把握したいときなどにどうぞ．

　　（最大化表示でこれにすると，エライ目にあいます。^^;)

　3)オープン(O)

　　ﾒｯｾｰｼﾞ受信時，ウィンドウが最小化の時だけウィンドウを開きます．

　通常は「オープン」でいいでしょう．

・常に手前に表示

　ｳｨﾝﾄﾞｳ最大化状態ではしないほうがいいでしょう

・背景色(F)

　背景色の変更が可能です

・行番号ﾃｷｽﾄ色(C)

　行番号のﾃｷｽﾄ色の変更が可能です．

　背景色を黒などにしたとき，これで変更してください．


挿入
挿入メニュー

・セパレータ(Z) Ctrl+Z

　オプションの区切り文字（セパレータ）を挿入します．

・文字列挿入(I) Ctrl+I

　任意文字列を挿入するためのモードレスダイアログがあらわれます．

　そのダイアログ上で左右の文字列を設定すると，常にそれを追加して文字列を挿入できます．状況依存ヘルプが使用できます．

・強制ﾒｯｾｰｼﾞ送信(S)

　列挙されたウィンドウから対象ウィンドウを選択し(複数可)，指定されたメッセージ，wParam，lParam をポスト送信します．


オプション
オプションメニュー

・環境設定(S)

　MagaDebug32 の環境を設定します．状況依存ヘルプが使用できます．

（１）起動終了

　1)起動時常に最小化(M)

　　チェックすると常に最小化します．（ショートカットでも出来ますね）

　2)前回終了時のウィンドウサイズと位置で起動(S)

　　ぜひチェックしておきましょう．

　3)起動時フィルタ表示を有効(F)

　　ある程度詰めのデバッグ時にチェックを入れておくと便利です．

　4)ﾓｰﾄﾞﾚｽﾀﾞｲｱﾛｸﾞの位置を保存(I)

　　MagaDebug32 で使用するﾓｰﾄﾞﾚｽﾀﾞｲｱﾛｸﾞ（検索と手動文字列挿入）の位置を保存します．

（２）フィルタ

　1)ログ出力のときも有効にする(F)

　2)印刷のときも有効にする(P)

　3)コピーのときも有効にする(C)

　フィルタ機能をそれぞれの出力機能にも割り当てます．

（３）ﾏﾆｭｱﾙｾﾊﾟﾚｰﾀ

　1)ﾏﾆｭｱﾙｾﾊﾟﾚｰﾀ文字列

　　手動で挿入する区切り文字（セパレータ）を指定します．

　　「////////////」とかがいいかも

　2)１回の操作で

　　何回セパレータを挿入するか指定します．

　　２～３回がいいかも

　3)セパレータの色

　　おまかせです．

（４）ｵﾌﾞｼﾞｪｸﾄｾﾊﾟﾚｰﾀ（C++ﾗｲﾌﾞﾗﾘを使用したときのみ有効）

　1)手動とｵﾌﾞｼﾞｪｸﾄ消滅のｾﾊﾟﾚｰﾀ設定を分ける

　　ｵﾌﾞｼﾞｪｸﾄ消滅時の設定と手動で挿入するｾﾊﾟﾚｰﾀの設定を分けます．

　2)ｵﾌﾞｼﾞｪｸﾄ消滅ｾﾊﾟﾚｰﾀ文字列

　　1)のチェックが入っていないと設定できません．

　3)１回の操作で

　　同上

　4)ｵﾌﾞｼﾞｪｸﾄ設定とは違う色を使う

　　ｵﾌﾞｼﾞｪｸﾄ消滅ｾﾊﾟﾚｰﾀをｵﾌﾞｼﾞｪｸﾄ生成の時に設定した色とは違う色で表示させたいときに使用する

　5)ｵﾌﾞｼﾞｪｸﾄｾﾊﾟﾚｰﾀの色

　　おまかせ


キー操作

ショートカットキー


ショートカットキー

メニュー機能とは別のショートカットキーを紹介します．

・Ｆ１キー

　ヘルプ目次を表示します

・上下方向キー

　ログの１行単位上下スクロール

・左右方向キー

　ログの１文字単位左右スクロール

・ページアップダウンキー

　ログの１画面単位スクロール

・ＨＯＭＥキー

　行の先頭に位置づけされます

・ＥＮＤ（ＨＥＬＰ）キー

　行の最後に位置づけられます

・Ｃｔｒｌ＋ＨＯＭＥキー

　ログの先頭に位置づけされます

・Ｃｔｒｌ＋ＥＮＤキー

　蓄積ログの末尾行に位置づけられます


効率のよいデバッグ

セパレータ

手動文字列挿入

フィルタ表示


セパレータ
セパレータや色を使おう

Ver1.11 からCMagaDbgクラスオブジェクト単位に色を指定できるようになり，またそのオブジェクトが破棄されたとき区切り文字（セパレータ）を挿入できるようになりました．

これは特にＭＦＣのメッセージ処理関数でその関数単位にデバッグオブジェクトを生成するときに便利に使えます．

つまり，メッセージ処理関数単位のログに色を付けてよりわかりやすく，また、区切り文字でメッセージ処理関数の終わりをより明確に把握することが可能となりました．

さらに，手動で区切り文字を数回埋め込むことにより，今行ったテスト動作が既に蓄積されているログのどこから開始されているのかも捕らえることが出来るようになりました．

便利な機能を応用し，効率よいデバッグを行ってみてください．


手動文字列挿入

Ver1.20以降，手動文字列挿入が可能となりました．セパレータではなくコメントを挿入したい時などに使えます．


フィルタ表示

Ver1.32以降，受信したメッセージの色によって表示・非表示を選択できるフィルタ表示機能が追加されました．

「デバッグが済んだ関数はもうメッセージを表示しなくても良いが，#ifdef ～ #endif を取るのは面倒」

というときなどに，その関数に設定した色を非表示にすることで，他の関数からのメッセージだけに集中することが可能となります．少し違うかもしれませんが色指定を「デバッグレベル」と考えてもいいかもしれません．

今まで各関数で適当に決めていた色は，これから少し考えて設定してやるとフィルタ機能がより一層便利になるでしょう．


著作権その他

著作権その他について

変更履歴

お知らせ


著作権その他について

・著作権

　本プログラムはフリーウェアとして提供いたしますが，著作権は放棄いたしておりません．眞柄賢一が保有しています．

・再配布

　再配布に関して，次の条件を守ってください．

　・基本的に再配布可能ですが，

　・取得したアーカイバのまま配布

　・事後でも連絡

　が条件です．

・免責

　本プログラム及びライブラリを使用した結果，どのようなことになろうとも作者は責任を負わないものとします．但し，良心的に対処するつもりです．

その他のことは，一般に出回るフリーウェアと同様です．

・連絡先

　サポート・バグレポートなど全てインターネット上で行います．以下のメールアドレスに連絡をお願いします．

e-mail: magara@maizuru-ct.ac.jp

HomePage: http://s-gikan2.maizuru-ct.ac.jp/


変更履歴
MagaDｅbｕg32変更履歴

Ver 1.42      99/10/26

　　・行番号ﾃｷｽﾄ色の変更オプション追加

　　・Ver1.41「内部ｸﾗｽとﾒﾓﾘ関係の処理を大幅変更」に伴う多数のバグ修正

Ver 1.41      99/10/06

　　・開発環境を VC++6.0 に変更

　　・上記に伴い VC++6.0/4.1,BC++ の３種類のライブラリを用意

　　・さらにリリース用ライブラリも用意(VC++系のみ)

　　・強制ﾒｯｾｰｼﾞ送信ダイアログをモードレス化

　　・強制ﾒｯｾｰｼﾞ送信機能の設定値を保持，他若干の修正

　　・背景色の変更オプション追加

　　・内部クラスとメモリ関係の処理を大幅変更

　　・その他バグ（報告されていないバグも含む）修正

Ver 1.40      99/07/16

　　・強制ﾒｯｾｰｼﾞ送信機能

　　・ﾒｯｾｰｼﾞ送信の高速化

　　・ｵﾌﾞｼﾞｪｸﾄ生成(ｺﾝｽﾄﾗｸﾀ起動)時にｽﾀｰﾄﾒｯｾｰｼﾞ

　　・Ver1.3x での数々の（報告されていないものも含めた）バグをフィックス

　　　（Ver1.4x特有のバグが潜んだかも　^^;）

Ver 1.36      99/01/25

　　・印刷まわり若干の修正

　　・その他バグ（報告されていないバグも含む）修正

Ver 1.35      98/12/04

　　・BorlandC++用ライブラリの用意

　　・設定情報のレジストリ化

　　・その他バグ修正

Ver 1.34      98/09/01

　　・Windows終了時にｳｨﾝﾄﾞｳの位置等が保存されなかったバグ修正

　　・よく使う構造体(RECT, SIZE, POINT)のメンバを表示する関数を追加

Ver 1.33      98/08/11

　　・メニュー構成を少し変更

　　・フィルタ機能をログ出力／印刷／コピーにも適用するかどうかのオプション追加

　　・「常に手前に表示」機能を追加

　　・INIファイルがないときはある程度のデフォルトオプションが設定されるようにした

　　・その他バグ修正

Ver 1.32      98/08/07

　　・フィルタ表示のサポート

　　・右クリックポップアップメニューのサポート

　　・メニュー構成を少し変更

　　・CMagaDbgクラスのコンストラクタを少し追加

　　・メッセージ表示の遅延を指定するメンバ SetInterval() を追加

　　・色の指定が BLACK, BLUE... 等一般的な名前なので DBG_ のプレフィックスを付けた

　　・その他バグ修正

Ver 1.31      98/03/05

　　・印刷機能強化（ﾍｯﾀﾞｰ/ﾌｯﾀﾞｰに個別のﾌｫﾝﾄを指定できるようにした）

　　・ライブラリソースのチューニング

　　・上記に関連し、CMagaDbgクラスのprint()メンバ関数を一部削除した

　　・その他バグ修正

Ver 1.30      98/02/05

　　・ログの印刷をサポート

　　・表示ログフォントの変更をサポート

　　・状況依存ヘルプを一部のダイアログでサポート

　　・行番号表示

　　・スクロールバーをWindows95流儀に変更

　　・Ver1.2x での数々の（報告されていないものも含めた）バグをフィックス

　　（Ver1.3x特有のバグが潜んだかも　^^;）

Ver 1.24      97/10/31

　　・検索ダイアログの使い方を変更

　　・ログが１周したときに見にくかったので次の行は消去するようにした

　　・HOMEとENDキーの使い方を少し変更(Windows流儀に従う)

　　・CMagaDbgFileクラス新設

　　・Ｃ言語用関数 Dbg_dump 追加

　　・CMagaDbgExクラスは削除した(dumpメンバ関数は基本クラスへ)

Ver 1.23      97/10/22

　　・セパレータ設定をマニュアルと(C++)オブジェクト消滅独立して

　　　設定できるようにした

　　・ダイアログにて（ほんの少し）ユーザインタフェース向上

　　・Ｃ言語用の関数はＣ＋＋からでも呼べるようにした

　　・手動文字列挿入にて色や左右の追加文字列を設定できるように変更

　　　また、それらを記憶できるようにした

　　・DBGASSERTマクロの出力仕様を若干変更

　　・マクロヘッダーに１つ追加

　　・その他バグ修正

Ver 1.22      97/09/12

　　・値の動的取得ができるようになった。

　　　（いわゆる scanf() の代わり）

　　・マクロヘッダーを追加

Ver 1.21      97/05/23

　　・ﾓｰﾄﾞﾚｽﾀﾞｲｱﾛｸﾞの位置を保存できるようにした。

　　　（前バージョンでのサボリです。^^;）

　　・ようやくデバッグツールらしくダンプ表示のサポート

　　・その他、前バージョンのバグフィックス

Ver 1.20      97/05/07

　　・ようやく LIBC.LIB/LIBCMT.LIB/MSVCRT.LIB を無視する警告を回避

　　・上記に伴い、コード生成にデバッグモードのどれかを強制

　　　（_DEBUG フラグが定義されていることが条件）

　　・手動メモ（文字列）挿入機能

　　・ログ出力ですでにファイルが存在するとき、上書/追加が選択できるようになった

　　・その他、前バージョンのバグフィックス

Ver 1.11      97/04/09

　　・区切りマーカを表示できる機能を追加

　　　　1)MagaDbg32のウィンドウ上で手動挿入

　　　　2)オブジェクト消滅時に自動挿入

　　・ログの色を（オブジェクト単位に）指定できる機能を追加

　　・Ｃ／Ｃ＋＋用に分けていたヘッダーファイルを統合

　　　（前バージョンでのチョンボです。^^;）

　　・ようやくＨＬＰファイル作成

Ver 1.10      97/03/13

　　・ツールバー追加

　　・横スクロールバー追加

　　・設定ダイアログのラジオボタン、

　　　　使い方がおかしかったので少し変更

　　・検索ロジックを変更

　　・Ｃ言語用のインタフェース作成

　　・マルチスレッド用ライブラリ廃止（１つのライブラリに統合）

Ver 1.02      97/02/24

　　・起動・終了・表示に関する設定ダイアログを追加

　　・クラスライブラリの若干の修正

Ver 1.01      97/01/22

　　・ログの検索機能追加

　　・クラスライブラリのメンバ関数に printf() を追加

　　・ログを選択し、選択領域のみセーブ・コピーが出来るようになった。

Ver 1.00      97/01/13

　　・ログのファイル出力機能追加

　　・バグフィックス

Ver 1.00β１  97/01/08（非公開）

　　・クリップボードへの転送機能追加

　　・簡略版ＡＰＩドキュメントを追加

　　・アイコンを変更　^^;

　　・バグフィックス

Ver 1.00α    97/01/06（非公開）

　　・初期リリースα版


お知らせ

・MagaDebug32クラスライブラリのソース公開について

　今現在 VisualC++ と BorlandC++(Ver1.35 以降) で使用できるクラスライブラリを作成し，その２つの統合開発環境用のデバッグツールとして公開していますが，Delphi・VB，その他の統合開発環境においても一定のルールに従えば MagaDebug32 のウィンドウにメッセージを送信（表示）させることが可能です．

　ライブラリソースを作者のホームページからダウンロードできますので参考にしてください．

また，他の統合環境でのライブラリやパッケージ化に成功したあかつきには，ぜひ連絡ください．ホームページ上で紹介したいと思います．

・マクロ募集

　Ver1.22 より用意したマクロの他に色々なアイデアマクロを募集します．

いずれもここのメール宛までご連絡ください．


状況依存：送信ﾎﾞﾀﾝ
送信先ｳｨﾝﾄﾞｳで指定した(複数の)ｳｨﾝﾄﾞｳに対し，指定したﾒｯｾｰｼﾞ値/wParam/lParamをﾎﾟｽﾄ送信します．


状況依存：送信先ｳｨﾝﾄﾞｳ再描画
送信先のｳｨﾝﾄﾞｳﾀｲﾄﾙを再描画します．このﾀﾞｲｱﾛｸﾞ表示後に起動されたﾌﾟﾛｸﾞﾗﾑを拾うときに使用します．


状況依存：送信ﾒｯｾｰｼﾞ
一覧から選択してください．「WM_XXX=0xXXXX」と入力すると新規登録もできます．


状況依存：送信ﾒｯｾｰｼﾞ値
実際に送るﾒｯｾｰｼﾞ値です．確認用です．


状況依存：送信wParam,lParam
実際に送る wParam/lParam値です．省略時はｾﾞﾛ扱いです．


状況依存：送信ﾒｯｾｰｼﾞ確認
実際にﾒｯｾｰｼﾞをﾎﾟｽﾄする前に確認のﾀﾞｲｱﾛｸﾞを表示します．


状況依存：送信先ｳｨﾝﾄﾞｳ
送信先ｳｨﾝﾄﾞｳを指定してください(複数可)．ここに載るｳｨﾝﾄﾞｳは，

・ﾃﾞｽｸﾄｯﾌﾟ直下の親ｳｨﾝﾄﾞｳ

・ﾀｲﾄﾙを持つもの

に限られます．


状況依存：起動時常に最小化
強制的に最小化して起動されます


状況依存：前回終了時のｻｲｽﾞと位置
前回終了したサイズと位置で常に起動します

最大化状態も保持します


状況依存：起動時ﾌｨﾙﾀ有効
起動時からﾌｨﾙﾀ機能を有効にします

ﾌｨﾙﾀﾘﾝｸﾞされる色は前回の値を採用します


状況依存：ﾓｰﾄﾞﾚｽ位置
・手動文字列挿入

・検索

・フィルタ表示設定

の各ダイアログが対象です


状況依存：ﾛｸﾞ出力のときも有効
ﾌｨﾙﾀ機能をﾛｸﾞ出力時にも適用したいときにﾁｪｯｸします


状況依存：印刷のときも有効
ﾌｨﾙﾀ機能を印刷時にも適用したいときにﾁｪｯｸします


状況依存：コピーのときも有効
ﾌｨﾙﾀ機能をｸﾘｯﾌﾟﾎﾞｰﾄﾞｺﾋﾟｰ時にも適用したいときにﾁｪｯｸします


状況依存：ｾﾊﾟﾚｰﾀ
区切り文字を入力します．「/////」などを推奨します．


状況依存：色
バージョンが上がると，デバッグレベルとしての意味を持たせる予定です．

現在はフィルタ機能にて使用できます．


状況依存：ｵﾌﾞｼﾞｪｸﾄ設定
このチェックがONの場合，手動で挿入したｾﾊﾟﾚｰﾀと，ﾀｰｹﾞｯﾄﾌﾟﾛｸﾞﾗﾑでのﾃﾞﾊﾞｯｸﾞｵﾌﾞｼﾞｪｸﾄ消滅によるｾﾊﾟﾚｰﾀとを区別することができます．OFFの場合，ｵﾌﾞｼﾞｪｸﾄ消滅は「ﾏﾆｭｱﾙｾﾊﾟﾚｰﾀ」の文字列が使用されます．


状況依存：ｵﾌﾞｼﾞｪｸﾄ色
このチェックがOFFの場合，ﾀｰｹﾞｯﾄﾌﾟﾛｸﾞﾗﾑでﾃﾞﾊﾞｯｸﾞｵﾌﾞｼﾞｪｸﾄを生成したときの色がｵﾌﾞｼﾞｪｸﾄｾﾊﾟﾚｰﾀに使用されます，


状況依存：手動挿入文字列
ﾒｯｾｰｼﾞｳｨﾝﾄﾞｳに表示する文字(ｺﾒﾝﾄ)を入力します


状況依存：手動挿入追加文字列
左に「<<< 」，右に「 >>>」のようにしておくと，ﾒｯｾｰｼﾞｳｨﾝﾄﾞｳには「<<< ｺﾒﾝﾄ >>>」と常に統一のとれた文字列を表示させることが可能です．


状況依存：挿入ボタン
ﾒｯｾｰｼﾞｳｨﾝﾄﾞｳに指定した文字列を表示(転送)します


状況依存：記憶ボタン
一連のｵﾌﾟｼｮﾝを記憶します．ｳｨﾝﾄﾞｳを閉じても，記憶したｵﾌﾟｼｮﾝはＩＮＩﾌｧｲﾙ(Ver1.35以降はﾚｼﾞｽﾄﾘ)に保存されており，次にｳｨﾝﾄﾞｳを開くときにそれを表示します．


状況依存：印刷ﾏｰｼﾞﾝ
各所のﾏｰｼﾞﾝを[mm]単位で指定します．物理的な用紙の端からの指定方法なため，あらかじめ印刷不可能領域が最小ﾏｰｼﾞﾝになっています．


状況依存：印刷行番号
行番号を印刷するかどうか指定します．行番号はMagaDebug32に表示されている行番号が使われます．印刷開始行からの連番ではありません．


状況依存：印刷ﾌｫﾝﾄ
各所のﾌｫﾝﾄを指定します．各所独立です．


状況依存：印刷ﾌﾟﾘﾝﾀ名
プリンタ属性の「通常使うプリンタ」が表示されます．残念ながら印刷ダイアログでのプリンタ変更はここには反映されません（印刷はちゃんとできますよ^^;）．


状況依存：印刷ＨＦ追加
ﾍｯﾀﾞｰ・ﾌｯﾀﾞｰ文字を印刷するかどうか指定します


状況依存：印刷ＨＦ位置
ﾍｯﾀﾞｰ・ﾌｯﾀﾞｰ文字列の位置を指定します．左・中央・右の３種類から選択してください．


状況依存：印刷ＨＦ文字列
ﾍｯﾀﾞｰ・ﾌｯﾀﾞｰ文字列を入力します．残念ながらマクロ指示子(%Fなど)には対応していません．


状況依存：印刷ページ
ﾍｯﾀﾞｰ・ﾌｯﾀﾞｰにページ番号を追加するかどうかを指定します．残念ながらフォーマットは選択できません．「Page:」に統一しています．


状況依存：印刷ページ位置
ﾍｯﾀﾞｰ・ﾌｯﾀﾞｰに追加するページ番号の位置を指定します．左・中央・右の３種類から選択してください．