夕暮ログ

C#やJavascript、最近はAndroidなんかも好きなtinqのブログ。「夕暮れログ」

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

列挙体をデバッグするためのビジュアライザ

結構前から作っていたのですが、やっと公開できそうなクォリティになったような気がするので公開します。もちろん無料です。

こちらからダウンロードできます。


これを使うと以下のようなことができます。


デバッグで停止したときに、列挙体にマウスをあわせます。その虫眼鏡マークをクリック。または、ドロップダウンを開いて、EnumDebuggerを選択。
Enumビジュアライザ

ウィンドウが開きます。元の値が選択されているはずです。各種の値の10進、16進、2進表示などもあります。
変更したければ好きな値を選択してOK。
Enumビジュアライザウィンドウ

ちゃんと書き換わります。
Enumビジュアライザ書き換え

FlagsAttrbitute属性が付いている場合、フラグモードになります。チェックボックスが各値に付き、複数に同時指定ができます。
ちなみに、値を共有している列挙体では別の値まで書き換わってしまうことがあります。一応注意してください。また、0の値にはチェックをつけたりしても無意味ですので、気にしないことをオススメします。
Enumビジュアライザのフラグ


こんな感じです。ソースも付いているので、自分好みに追加したり、改造したりしていただいてかまいませんので。
スポンサーサイト

画像をいろいろできるデバッガビジュアライザ

BitmapやImageはフォームプログラミングで結構な頻度で使われます。ですが、デバッグ中にはその画像を見ることができません。特に画像処理プログラムなどを作る場合、致命的です。
ですが、そんな問題もデバッガビジュアライザを作ることで解決します。

私が作ったものは、
・画像プレビュー(拡大、縮小、原寸大、任意のサイズ、背景色切り替え)
・画像コピー
・画像保存
・クリップボードの画像に置き換え
・ファイルの画像に置き換え
・ペイントソフトで編集
これで確認して、テスト用の画像に置き換えたりできます。

続きを読む »

【ビジュアライザ】プロクシクラスから置き換える

前回の記事の続きです。
ビジュアライザでシリアライズできないクラスもプロクシクラスを通すことでビジュアライザに渡せると説明しました。
今回は、ビジュアライザで編集した結果をVisualStudioのほうに戻します。
通常、ReplaceObjectを使って戻します。しかし、プロクシクラスを通す場合、そのままではできません。
プロクシクラスはあくまでプロクシクラスで、元の型に自動で変換してくれるわけではないからです。
オブジェクトソースの側で処理を行い、もとの型を取り出して返す必要があります。

続きを読む »

【ビジュアライザ】シリアライズできないクラスをプロクシクラスを通してデバッグ

前回の記事もあわせてご覧ください

はじめに

前回シリアライズできないクラスはプロクシクラスを使う、と説明しました。 具体的に、やってみます。ここでは、System.Windows.Forms.Messageを使えるようにしてみます。
Messageは、.NETより低レベルにあるWin32APIで使われるウィンドウメッセージです。
基本的にはWM_PAINTはPaintイベントに、WM_LBUTTONDOWNはMouseDownイベントへなどとラップされているため出番は多くありません。
しかし、まだ低い処理を行う場合に必要になってきます。たとえば、WndProcなどの引数になっています。

この構造体はシリアライズ属性がついていないためシリアライズできません。
これは、情報がソフトを起動したりするたびに変わるため、保存しても意味は無く、シリアライズを行う必要がないと判断されたのでしょう。

それでも試してみると、以下のような例外が発生します。

これをデバッガビジュアライザでデバッグします。

続きを読む »

シリアライズできないクラスをデバッガビジュアライザでデバッグする

デバッガビジュアライザでデバッグするクラス、構造体はシリアライズ可能である必要があります。
シリアライズが可能とは、基本的に「SerializableAttribute」が指定されているクラスのことです。

ちなみに、C#などでは属性のAttributeは省略できるので、[Serializable()]だけで大丈夫です。
具体的には、以下のようにな指定になります。(MSDNより引用)

[Serializable()]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}


ただし、含むフィールドやプロパティはすべてシリアライズ可能である必要があります。
標準ライブラリのデータなどを扱うクラスや構造体は、だいたいシリアライズ可能です。
なので、特殊な型や、コントロールを持たない場合、そのまま属性をつけるだけでよいでしょう。

自分でライブラリなどを作るときも、シリアライズされることを考えて、必ずシリアライズ属性をつけておきましょう。

ちなみに、標準のクラス・構造体がシリアライズできるかどうかは、MSDNで確認できます。
確認したいクラスや構造体のページを開き、「構文」の部分を見ます。
その中に[SerializableAttribute]があればシリアライズ可能です。
(見たことはありませんが、[[Serializable]や[Serializable()] などがあった場合も可能です)





ですが、やはりシリアライズ属性の無いクラスは存在します。
Serializable属性がついていないクラスにSerializableをつけるわけにはいきません。
その場合はどうするのでしょうか。

そういう場合には、シリアライズ可能な「プロキシクラス」を使って必要なデータをシリアライズします。
そして、その情報を元にデシリアライズします。




しかし、基本的にシリアライズができなクラスで、標準に含まれているものはシリアライズ処理が難しいもの、不可能なものが多いので注意してください。
次回、具体的に例を出して説明します。

ホーム  次のページ »

プロフィール

tinq tinq(もしくはTinqWill)

Sky  For   Every 改装予定

プログラミングお勉強中の高校生。月一くらいは更新したい

最新記事

カテゴリ

月別アーカイブ

検索フォーム

最新コメント

リンク

最新トラックバック

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。