![](/img/trans.png)
[英]how to inspect a c# (unsafe) pointer variable in visual studio debugger?
[英]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.