当前位置:   article > 正文

Windows开发入门:工具-WinDbg的安装和使用教程

windbg

序言

参考文档:
WinDbg的安装
WinDbg 入门教程
Windbg教程
Windbg调试命令详解
Getting Started with Windows Debugging

安装

1)下载

点我跳转下载链接
直接点击页面里的 Download WinDbg Preview from the Microsoft Store就会自动打开windows应用商城下载。
在这里插入图片描述
安装完成后,可以从c盘搜索WinDbg找到安装目录,默认的是在C:\Users\你的用户名\AppData\Local\Microsoft\WindowsApps

2)配置环境变量

安装好之后就需要配环境变量,打开环境变量配置界面 我的电脑->右键属性->高级系统设置->环境变量设置->在系统变量里找到path,把你的WinDbg安装目录添加上去
然后再在系统变量中创建一个名为 _NT_SYMBOL_PATH,值为:

SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols
  • 1

的环境变量。

3)重启并测试

1.将电脑重启
2.重启后打开WinDbg,然后点击->文件->Attach to Process->选择一个进程附加,
在这里插入图片描述
附加完成之后c盘根目录下出现名为mysymbol的文件夹,并且WinDbg里出现
在这里插入图片描述
则表示安装成功。

调试场景

1)远程调试

使用WinDbg进行远程调试是很容易的,而且有很多种可行的方法。在下文中,’调试服务器’指的是运行在你所要调试的远程机器上的调试器。’调试客户端’指的是控制当前会话的调试器。

使用调试器:你需要CDB, NTSD或者WinDbg已经安装在远程机器上。WinDbg客户端可以连接到CDB, NTSD或者WinDbg中的任何一个作为服务器,反之亦然。在客户端和服务器直接可以选择TCP或者命名管道作为通讯协议。

1.在服务器端的启动过程:

  • WinDbg –server npipe:pipe=pipename(注:可以允许多个客户端连)
  • 从WinDbg内部: .server npipe:pipe=pipename(注,连接单个客户端)

你可以用多种协议开启不同的服务会话。并且可用密码来保护一个会话。

2.从客户端连接:

  • WinDbg -remote npipe:server=Server, pipe=PipeName[,password=Password]
  • 从WinDbg内部: File->Connect to Remote Session: for connection string, enter npipe:server=Server, pipe=PipeName [,password=Password]

使用Remote.exe:Remote.exe使用命名管道作为通讯的方式。如果你使用的是一个命令行接口的程序,比如KD,CDB或者NTSD。你可以使用remote.exe来远程调试。注意:使用@q(不是q)来退出客户端,不用关掉服务端。

3.要启动一个服务端:

Remote.exe /s “cdp –p <pid>” test1
  • 1

4.从客户端连接:

Remote.exe /c <machinename> test1
  • 1

上面的test1是我们所选择的命名管道的名字。

服务端会显示那个客户端从那个服务器连接以及执行过的命令。你可以使用‘qq’命令来退出服务端;或者使用File->Exit来退出客户端。另外,如果要进行远程调试,你必须属于远程机器的”Debugger User”组并且服务器必须允许远程连接。

2)即时调试

在WinDbg的文档的”Enabling Postmorten Debugging”部分对此有很详细的讨论。简而言之,你可以把WinDbg设置成默认的即时调试器,命令就是:Windbg –I。这个命令实际上是把注册表中 HKLM/Software/Microsoft/Windows NT/CurrentVersion/AeDebug的键值设置成WinDbg。如果要把WinDbg设置成为默认的托管调试器,你需要显示设置如下的注册表键值:

  • HKLM/Software/Microsoft/.NETFramework/DbgJITDebugLaunchSetting 设置成 2
  • HKLM/Software/Microsoft/.NETFramework/DbgManagedDebugger 设置成Windbg.(注意其中的启动参数设置)

通过JIT的设置,当一个应用程序在不是调试的状态下抛出了未处理的异常之时,WinDbg就会被启动。

3)64位调试

所有这些调试器均支持在AMD64和IA64上的64位调试环境。

4)托管应用程序的调试

5)调试Windows服务

使用WinDbg,你可以像调试其它应用程序那样调试Windows服务程序。即可以通过附加进程的方法启动Windows服务,也可以把WinDbg当作一个即时调试器,并且在代码中调用DbgBreakPoint 或者 DebugBreak,或者在x86机器上加入一条int 3汇编指令。

6)调试异常

一个调试器会得到两次的异常通知-第一次在应用程序有机会处理异常之前(‘first chance exception’);如果应用程序没有处理这个异常,这时候调试器就会有机会来处理异常(‘second-chance exception’)。如果调试器没有处理二次机会的异常,应用程序就会退出。

.lastevent或者,!analyze –v命令会给你显示异常的记录以及异常抛出所在函数的堆栈跟踪信息。

你也可以使用 .exr, .cxr以及 .ecxr命令来显示异常和上下文记录。同时需要注意的是,你也可以改变first-chance的处理选项。对应的命令就是: sxe, sxd, sxn和sxi。

能否请教一个问题:
我的Windbg不能设置断点,重新加载Symbols文件的时候也总是有几个加载失败,Symbols file path的设置是:
SRVc:/symbolshttp://msdl.microsoft.com/download/symbols。
类似的环境变量也设置了,可是怎么弄都不行,又没有什么好的建议?

用 ; 将Symbols file path分开,例如:
d:/dev/src;SRVc:/symbolshttp://msdl.microsoft.com/download/symbols

使用

简单命令行示例
详细命令教程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/168409?site
推荐阅读
相关标签
  

闽ICP备14008679号