Skip to content

変数の Dump 方法

SD-TOMITA edited this page Jul 14, 2017 · 13 revisions

Web 上で Dump する

Web上で変数の中身を出力する手順です。

準備

1. cs-sdx を対象アプリケーションの参照に追加します

2.Web.config への追記

対象アプリケーションの Web.config に以下の設定を追加します。

IIS7以降

<system.webServer>
  <modules>
    <add name="DebugHttp" type="Sdx.Web.HttpModule" />
  </modules>
</system.webServer>

IIS6以前

<system.web>
  <httpModules>
    <add name="DebugHttp" type="Sdx.Web.HttpModule" />
  </httpModules>
</system.web>

※既存の要素がある場合はその中に追加します。

3.cookie の追加

sdx_debug_mode = 1 を cookie に追加します。 Debug をよく使う場合は cookie に有効期限を設定しておくといいです。

ブラウザのコンソールを開いて、以下のコードを実行します。

//2020年6月いっぱいを有効期限にしたい場合の例
document.cookie='sdx_debug_mode=1; expires='+new Date(2020, 6).toUTCString();

これで準備は完了です。

変数の中身を出力する

Sdx.Context.Current.Debug.Log() の引数に出力したい変数を渡して実行します。

//出力したい変数
var dic = new Dictionary<string, string>() { { "foo", "bar" } };

//出力させる
Sdx.Context.Current.Debug.Log(dic);

Webページの最下部に以下のような出力が行われます。

[0.00000000/12.33980599 sec] Debug test now.
System.Collections.Generic.Dictionary`2(1)
foo : String(3) bar

Tips

ファイルに Dump する

Webページ上には表示させたくない、という場合にはDumpの内容をファイルに出力することも可能です。

//出力したい変数
var str = "ブラウザに表示されたら困る文字列";

//任意のパスに出力結果のファイルが生成されます
Sdx.Diagnostics.Debug.DumpToFile(str, "/path/to/project/test.txt");

上記のようにパスの指定を行った場合、C:\path\to\project\test.txt に出力されます test.txt の中身はこのようになります。

[2016-06-30 18:49:23] String(16) ブラウザに表示されたら困る文字列

※注意

外部からのアクセスが可能なディレクトリ以外にファイル出力しようとすると例外になるのでご注意ください。 (例えば C:\windows 配下などはOSの制約でファイルの書き換え等ができません。)

Dump する文字列だけを取得する

以下のコードを使うと出力に使われる文字列データだけを取得することができます。

var str = "何の変哲もない文字列";
var dump = Sdx.Diagnostics.Debug.Dump(str);// => String(10) 何の変哲もない文字列

これは以下のような状況で使えます。 例えば、別ページに遷移する処理が組み込まれたページで開発作業を行う場合、Webページ上に出力しても別ページに遷移してしまい、せっかく出力した内容を見ることができません。 その場合、別ページに遷移する前に例外を投げるようにして、例外のメッセージとしてDump出力結果を渡すと、このような状況でもdumpすることが可能です。

var str = "何の変哲もない文字列";
throw new Exception(Sdx.Diagnostics.Debug.Dump(str));//リダイレクト前にページでdump結果を確認できる

前述のファイルに出力する方法でもDump可能ですが、Web上でリダイレクト前に変数の中身を確認してみたい場合はお試しください。

Cookieにsdx_debug_modeを追加するブックマークレット

デバックモードをON・OFFするブックマークレットです。

ブックマークレット

javascript:(function(){var targetCookie="sdx_debug_mode=1";string=document.cookie;booleanCheck=string.indexOf("sdx_debug_mode",0);if(booleanCheck==-1){/*cookie追加*/document.cookie=targetCookie+";";}else{/*cookie削除*/date=new Date();date.setTime(0);document.cookie=targetCookie+";expires="+date.toGMTString();}})();

jsコード

javascript:(function(){
  var targetCookie = "sdx_debug_mode=1;";
  string = document.cookie;
  booleanCheck = string.indexOf("sdx_debug_mode",0);
  if(booleanCheck == -1){
    /*cookie追加*/
    document.cookie= targetCookie;
  }else{
    /*cookie削除*/
    date = new Date();
    date.setTime(0);
    document.cookie = targetCookie + " expires=" + date.toGMTString();
  }
})();

コンソールアプリ実行時にプロンプト上に Dump する

Sdx.Diagnostics.Debug.Console() メソッドを使うと、コンソールアプリの実行時に
プロンプト上に変数の中身などを出力できます。(出力結果は Sdx.Diagnostics.Debug.Dump() と同じです。)

Sdx.Context.Current.Debug.Log() の出力先を切り替える

Sdx.Diagnostics.Debug の Outプロパティに Console.Out を設定するとコンソールに出力し、Sdx.Diagnostics.DebugHtmlWriter を設定すると、WEBページのデバッグディスプレイに出力します。