Silverlight實用竅門系列:45.Silverlight下使用WinDbg調試應用程序和查看異常情況

    在本節中我們將講述如何通過WinDbg工具對Silverlight應用程序進行調試,我們可以判斷其無效過期的引用或者事件,將其釋放掉,以達到及時釋放內存的作用。

        首先我們需要下載WinDbg工具,在http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.402.msi即可下載32位的WinDbg工具。並且安裝好這個工具。

        然後我們準備一個最簡單的Silverlight應用程序,其Xaml代碼如下:

 

 
 
  1. <UserControl x:Class="SLDbg.MainPage" 
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  6. mc:Ignorable="d" 
  7. d:DesignHeight="300" d:DesignWidth="400"
  8.  
  9. <Grid x:Name="LayoutRoot" Background="White"
  10. <Button x:Name="btnClick" Width="70" Height="40" Content="點擊我"></Button> 
  11. </Grid> 
  12. </UserControl> 

        其Xaml.cs文件如下,綁定了一個事件:

 

 
 
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Net; 
  5. using System.Windows; 
  6. using System.Windows.Controls; 
  7. using System.Windows.Documents; 
  8. using System.Windows.Input; 
  9. using System.Windows.Media; 
  10. using System.Windows.Media.Animation; 
  11. using System.Windows.Shapes; 
  12.  
  13. namespace SLDbg 
  14. public partial class MainPage : UserControl 
  15. public MainPage() 
  16. InitializeComponent(); 
  17. this.btnClick.Click += new RoutedEventHandler(btnClick_Click); 
  18.  
  19. void btnClick_Click(object sender, RoutedEventArgs e) 
  20. MessageBox.Show("1111"); 

        第一、對上面名爲SLDbg,然後在web端中右鍵點擊瀏覽,然後打開新安裝好的WinDbg工具。

        第二、在WinDbg工具中,「File」->"Attach to  Process",在打開的頁面中選中需要調試的當前運行iexplorer程序

   

(可以根據這個IE的進程ID判斷,任務管理器的進程可以選中需要查看的進程ID)。

        第三、將需要跟蹤的進程附加到WinDbg中之後,我們首先要引入Sos.dll進行調試,所以在WinDbg的命令輸入: .load C:\Program Files\Microsoft Silverlight\4.0.50826.0\sos.dll

        第四、使用命令:!dumpheap -stat -type SLDbg,開始調試名爲SLDbg的Silverlight應用程序,其界面如下:

        第五、在上圖中我們可以看到XX對象的內存地址是BBBBBB,所以我們輸入以下命令:!dumpheap -MT BBBBBB去查看該對象的使用情況如下圖所示:

        第六、在使用命令:!dumpheap -stat -type SLDbg的時候,如果查看到有異常的話,查看其內存地址爲MMMMMM,則通過命令 !pe MMMMMM,可以查看其具體出錯原因。

        本實例採用VS2010+Silverlight 4.0編寫。


本文轉自程興亮 51CTO博客,原文鏈接:http://blog.51cto.com/chengxingliang/826477