11

XSLT スタイルシートを編集する必要がありますが、XML 入力が多数のストリームに一時的にしか存在しないため、何も見えません。コードをデバッグすることはできますが、ストリームの内容を表示できるテキストに変換する方法がわかりません (そして、編集中に手動で XSLT を実行します)。

コードは大きな古いレガシー システムの一部です。必要に応じてデバッグ環境で変更できますが、多数の MSMQ に接続された Windows サービスで実行されます。したがって、さまざまな理由から、最初にコードを変更することなく、デバッガーを使用して XML を表示できるようにしたいと考えています。

コードを大幅に簡略化すると、次のようになります (C# - ただし、VS 2003 では .net 1.1 であることを思い出してください)。

これは、XML をストリームとして取得する関数であり、その後、ある種の XSLT 変換オブジェクトに供給されます。ウォッチ ウィンドウとイミディエイト ウィンドウでライター オブジェクトと xmlStream オブジェクトを調べてみましたが、実際の XML を表示する方法がよくわかりません。

private MemoryStream GetXml()
{
    MemoryStream xmlStream;
    xmlStream = new MemoryStream();
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8);
    writer.WriteStartDocument();
    //etc etc...
    writer.WriteEndDocument();
    writer.Flush();
    xmlStream.Position = 0;
    return xmlStream; //Goes off to XSLT transform thingy!
}

すべての助けに感謝します。

4

2 に答える 2

17

MemoryStream の準備ができたら、次の式をウォッチ ウィンドウに追加するだけです。

(new StreamReader(xmlStream)).ReadToEnd();

ウォッチ式は単純な変数値である必要はありません。それらは複雑な式になる可能性がありますが、副作用があります。ご指摘のとおり、ストリームの内容が完全に読み出されるため、これにより実行が中断されます。実行を再開する必要がある場合は、中断後に別の式でストリームを再作成できます。

この状況は、ストリームを使用してコードをデバッグするときに頻繁に発生するため、単純な自己完結型のタスクでは避けています。残念ながら、大規模なシステムの場合、コードをストリーム指向にする必要があるかどうかを事前に判断するのは必ずしも容易ではありません。これは、使用方法に大きく依存するためです。ただし、多くの場合、ストリームの使用は時期尚早の最適化であると考えています。

于 2009-05-29T16:13:12.613 に答える
1

OK、コードを変更せずにデバッガを使用することに成功していません。次のスニペットを追加しました。これにより、ブレークポイントを配置したり、debugview を使用したりできます。

private MemoryStream GetXml()
{
    MemoryStream xmlStream;
    xmlStream = new MemoryStream();
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8);
    writer.WriteStartDocument();
    //etc etc...
    writer.WriteEndDocument();
    writer.Flush();
    xmlStream.Position = 0;

    #if DEBUG
    string temp;
    StreamReader st=new StreamReader(xmlStream);
    temp=st.ReadToEnd();
    Debug.WriteLine(temp);
    #endif

    return xmlStream; //Goes off to XSLT transform thingy!
}

実行の流れが中断されたとしても、デバッガーで xmlstream オブジェクトを何らかの形で単純に確認したいのですが、それまでの間、これは私が管理した中で最高のものです。

于 2009-05-06T17:50:51.947 に答える