web-dev-qa-db-ja.com

Visual Studioデバッグモードでオブジェクト値をコピーする

Visual Studioデバッグモードでは、変数にカーソルを合わせて値を表示し、右クリックして[コピー]、[式のコピー]、または[値のコピー]を実行できます。

変数が単なる基本型ではなくオブジェクトである場合、オブジェクトを展開および探索するための+記号があります。それをすべてクリップボードにコピーする方法はありますか?

112
Farinha

イミディエイトウィンドウで、次のように入力します

?name_of_variable

これにより、すべてが印刷されます。必要な場所に手動でコピーするか、イミディエイトウィンドウのログ機能を使用して自動的にファイルに書き込むことができます。

[〜#〜] update [〜#〜]:値のネストされた構造をコピー/貼り付けて、テキストで検索するか、横に保存してからオブジェクトの状態を後で比較できるようにします。正しい場合は、作成したVisual Studioの商用拡張機能( OzCode と呼ばれる)を確認することをお勧めします。これにより、「検索」と「比較」でこれらのことをより簡単に実行できます特徴。

UPDATE 2@ppumkinの質問に答えるため、または 新しいEAP には新しいエクスポート機能があり、ユーザーは変数値をJsonにエクスポートできます、XML、Excel、またはC#コード。

完全開示:私はここで説明したツールの共同作成者です。

163
Omer Raviv

イミディエイトウィンドウで以下のコードを実行すると、オブジェクトのシリアル化されたXML表現をxmlファイルにエクスポートします。

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)

ソース: Visual Studioデバッガーからオブジェクトをシリアル化する方法

37
Bat_Programmer

これを便利に行う最近の拡張オブジェクトエクスポータがあります。

http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/

拡張機能: https://visualstudiogallery.msdn.Microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

24
Animesh

まさにあなたが求めているものではありませんが、そのオブジェクトのウォッチを追加し、ウォッチウィンドウで、コピーしたいすべてのものを展開して選択してからコピーすることができます。

18
PMN

属性を使用してクラスとメソッドを装飾する を使用することにより、デバッグ中にオブジェクト表示から特定の値を取得できます DebuggerDisplay属性 .

[DebuggerDisplay("Person - {Name} is {Age} years old")]
public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}
4
Dave Anderson

https://stackoverflow.com/a/23362097/268066 からの最も人気のある回答

運がよければ、すでにappdomainにJson.Netがあります。その場合、これをイミディエイトウィンドウにポップします。

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)
2
Efreeto

私はいつも使用します:

_string myJsonString = JsonConvert.SerializeObject(<some object>);
_

次に、残念ながらバックスラッシュもコピーする文字列値をコピーします。

バックラッシを削除するには、ここに行きます: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

次に、_<p id="demo">Visit Microsoft!</p>_要素内で、テキストをコピーしたテキストに置き換えます。 var res = str.replace("Microsoft", "W3Schools");行を次のように置き換えます

_var res = str.replace(/\\/g, '')
_

これらの新しい変更を実行しますが、右側の「試用」ボタンをクリックすることを忘れないでください。

http://jsonformatter.org のようなjsonフォーマッターにドロップできるjson形式のオブジェクトのすべてのテキストが必要です。または、 http ://json2csharp.com/

1
Helzgate

Googleはこの8年前の質問に私を導き、私は ObjectDumper を使用して、デバッガーデータのコピーと貼り付けに非常に類似した何かを達成することになりました。とても楽しかったです。

debuggerからの情報について特に質問された質問を知っていますが、ObjectDumperは基本的に同じ情報を提供します。この質問をグーグルで検索する人は私のようであり、デバッグ目的でデータが必要なだけで、技術的にデバッガからのものであるかどうかは気にしないと思います。

1

私はパーティーに少し遅れていることを知っていますが、JSON出力を希望する場合は、オブジェクトをシリアル化するためのJSON実装を作成しました。 Newtonsoft.Jsonリファレンスを使用します。

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}
1
Marcus Parsons

リストがあり、特定の変数を検索する場合:イミディエイトウィンドウで、次のように入力します。

 myList.Any(s => s.ID == 5062);

これがtrueを返す場合

var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar
0
emert117

変数を右クリックしてAddWatchを選択しました。これにより、すべての値で構成されるウォッチウィンドウが表示されます。すべてを選択して、テキストエディターでテキストに貼り付けました。

0
agileDev