zoukankan      html  css  js  c++  java
  • 使用Windbg 调试.Net程序

    一直都在使用.netWindows FormsWPF方面的开发,最近正在读 CLR via C#,初识.net核心的一些东东。又由看了熊力blog上用Windbg 调试分析WPF的的一些文章。

    感觉Windbg这个东西还是不太容易上手的,关键是需要配置好一些东西和知道一些常用的指令。

    下面就从安装Windbg开始说起。

    使用windbg,首先要到微软网站上下载最先的windbg程序。网址是:http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

    安装后就可以在开始菜单找到windbg了。

    要先调试.net的程序,需要使用一个扩展的dll,它在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727路径下,文件名是sos.dll。有了它我们才能运行命令(!clrstack),拷贝一份到Windbg.exe所在的目录。

    另一个关键就是调试所需的符号文件Symbol File。参考微软官网:

    具体链接是:http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a

    我们需要连接微软的symbol服务器:在Windbg File菜单下,Symbol File Path中加入这一项,

    srv*c:/symbolcache*http://msdl.microsoft.com/download/symbols;

    另外就是你所编写的程序的符号文件,它应该在debug目录下,扩展名是pdb的文件,把这个路径也加进来。

    这样准备工作就做好了。

    运行你要调试的.net程序,切换到Windbg,F6,出现附加进程对话框。在最下面可以找到你刚启动的程序的进程,OK

    如果是第一次用的话,会需要从微软服务器上下载很多.pdb符号文件,好几十M,需要等待一些时间,尤其是如果网速不好的话。

    这时,在Windbg界面的最下面会出现一个命令输入行,我们首先将sos.dll扩展加进来。

    输入:.load sos.dll

    确保符号文件路径已重新加载:输入:.reload

    这时我们就都准备好,可以开始调试了!

    输入:~,可以查看当前程序的所有线程。回显中最前面的一列是线程的编号,在输入提示符前面的0001>表示当前的线程是1号线程。使用k命令可以显示当前线程的Stack Backtrace

    要切换到其他的线程,输入~2s,表示切换到线程2

    对于.net的托管线程,我们可以使用命令!threads查看,切换到启动的托管线程STA才能使用!clrstack命令查看。一般要切换到线程0,即输入~0s,再输入!clrstack

    本人也是刚刚开始使用windbg,难免会有很多错误,希望和大家多多交流。

  • 相关阅读:
    VIJOS-P1446 最短路上的统计
    洛谷 CF997A Convert to Ones
    USACO Your Ride Is Here
    NOIP 2006 明明的随机数
    NOIP 2008 传球游戏
    数据结构—链表详解
    洛谷 P1160 队列安排
    洛谷 P1167 刷题
    JDOJ 2982: 最大连续子段和问题
    洛谷 P1123 取数游戏
  • 原文地址:https://www.cnblogs.com/oyjj/p/2133006.html
Copyright © 2011-2022 走看看