簡體   English   中英

如何在Visual Studio 2003中檢查調試器中的XML流

[英]How to inspect XML streams from the debugger in Visual Studio 2003

我必須編輯一個XSLT樣式表,但我是盲目的,因為XML輸入僅在一堆流中短暫存在。 我可以調試代碼,但無法弄清楚如何將流的內容輸出到我可以看到的文本中(並在我編輯它們時手動運行XSLT)。

代碼是一個很大的遺留系統的一部分,我可以在調試環境中修改它,如果絕對必要,但它運行在一個連接到一堆MSMQ的Windows服務中。 因此,出於各種原因,我寧願能夠使用調試器來查看XML,而無需先更改代碼。

代碼大大簡化了,就像這樣:( C# - 但在VS 2003中記住它是.net 1.1。)

這是將XML作為流獲取的函數,然后將其提供給某種XSLT轉換對象。 我已經嘗試在監視窗口和即時窗口中查看writer和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!
}

所有人都非常感謝。

您可以在MemoryStream准備就緒后將此表達式添加到監視窗口:

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

監視表達式不需要是簡單的變量值。 它們可以是復雜的表達,但它們會產生副作用。 正如您所指出的,這將中斷執行,因為流內容將被完全讀出。 如果需要重新開始執行,可以在中斷后使用另一個表達式重新創建流。

當使用流來調試代碼時,這種情況經常出現,因此我將它們用於簡單,自包含的任務。 不幸的是,對於大型系統而言,事先並不容易知道是否應該使代碼流面向,因為它在很大程度上取決於它的使用方式。 但是,我認為在許多情況下使用流是不成熟的優化。

好的,我沒有成功使用調試器而沒有修改代碼。 我在下面的代碼片段中添加了一個代碼片段,它允許我放入斷點或使用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對象,即使它破壞了執行流程,但在此期間這是我管理的最好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM