2013-11-10 22:38
⁄ 工业·编程
⁄ 共 7303字
在如下的情况下需要使用这样的技巧:
1. 生产环境上出问题, 我们需要抓取dump文件, 在线下去debug.
2. 正在运行一大堆测试, 当其中一个崩溃的时候, 不希望在运行时干扰整个测试动作, 仅需要收集一些测试信息.
3. 问题在连接到debugger后无法重现.
简单来说, 就是你希望在对环境影响最小的前提下, 抓取尽可能多的信息.
为了满足这种需求, 最好的方式是配置 just-in-time (JIT) debugger , 让它在进程崩溃的任何时候能够: 启动, 抓...
WinDbg, 软件调试阅读全文
2013-11-08 22:37
⁄ 工业·编程
⁄ 共 1366字
什么是内存转储文件, 即dump?
======================
内存转储文件时一个进程或系统在某一给定的时间的快照. dump文件的种类有很多, 不同种类的dump文件包含不成程度的数据.
用户态内存转储文件 VS 内核态内存转储文件
======================
如果你抓一个进程的dump文件, 那么你抓取的是用户态的dump文件.
如果你抓取整个系统的内存dump文件, 那么你抓取的是内核态的dump文件.
一般来说, hung, crash, memory leak, exceptio...
WinDbg, 软件调试阅读全文
2013-11-06 22:31
⁄ 工业·编程
⁄ 共 1875字
扩展命令(Extension Command)用于实现针对特定调试目标的调试功能. 与标准命令和元命令是内建在WinDBG程序文件中不同, 扩展命令式实现在动态加载的扩展模块(DLL)中的.
利用WinDBG的SDK, 用户可以自己编写扩展模块和扩展命令. WinDBG程序包中包含了常用的扩展命令模块. 存放在以下几个子目录中.
NT4CHK: 调试目标为Windows NT 4.0 checked版本时的扩展命令模块.
NT4FRE: 调试目标为Windows NT 4.0 free 版本时的扩展命令模块.
W...
WinDbg, 软件调试阅读全文
2013-11-04 22:29
⁄ 工业·编程
⁄ 共 1787字
元命令(Meta-Command)用来提供标准命令没有提供的常用调试功能, 与标准命令一样, 元命令也是内建在调试器引擎或者WinDBG程序文件中的. 所有元命令都已一个点(.)开始, 所以元命令也被称为点命令(Dot Command).
按照功能, 可以把元命令分成如下几类.
显示和设置调试会话和调试器选项.
用于符号选项的.symopt- Set Symbol Options
用于符号路径的.sympath- Set Symbol Path, 和.symfix- Set Symbol Store Path.
用于程序源文件...
WinDbg, 软件调试阅读全文
2013-11-03 22:50
⁄ 工业·编程
⁄ 共 390字
.reload /f 命令会强制debugger立即解析所有module相关联的符号文件.
于是我就想, 有没有什么命令可以立即去掉所有module相关联的符号文件呢? 找了半天也没找到, 最后发现.reload /f的反命令就是.reload
其他形式
===========
.reload <module>
抛弃模块<module>的符号信息. 任何解析符号的动作都将从硬盘上重新加载符号文件.
.reload /f <module>
强制调试器立刻加载并且解析与模块module相关的符号文件....
WinDbg, 软件调试阅读全文
2013-11-02 22:27
⁄ 工业·编程
⁄ 共 1907字
WinDBG的大多数功能是以命令方式工作的, 本系列将介绍WinDBG的三类命令, 标准命令, 元命令和扩展命令.
标准命令
===============
标准命令用来提供适用于所有调试目标的基本调试功能.
所有基本命令都是实现在WinDBG内部的, 执行这些命令时不需要加载任何扩展模块. 大多数标准命令是一两个字符或者符号, 只有version等少数命令除外. 标准命令的第一个字符是不分大小写的, 第二个字符可能区分大小写. 迄今为止, WinDBG调试器共实...
WinDbg, 软件调试阅读全文
2013-11-01 22:26
⁄ 工业·编程
⁄ 共 864字
Crash都是发生在某一函数中, 而95%的crash都是由下面两种情况中的一种导致的:
发生crash的函数获得了错误的参数.
发生crash的函数使用了损坏了的内部数据.
代码的执行过程是对数据进行变化的过程. 对同一段代码, 在相同环境下, 如果使用的数据都相同, 那么执行的结果肯定是唯一的. 如果函数发生崩溃, 那么肯定是使用到的数据跟理想情况有差别. 函数使用的数据来源: 一是函数传入的参数, 二是函数体引用到的成员变量或全局变...
WinDbg, 软件调试阅读全文
2013-10-31 22:22
⁄ 工业·编程
⁄ 共 804字
如果有出错程序的dump, 哪怕dump不是在合适的时机获取的, 也可以分析出有用的信息.
通过vertarget查看系统版本和系统运行了多长时间.
通过!peb查看环境变量的情况. 由于很多第三方软件都习惯把自身路径添加到环境变量中, 所以这里很多时候可以看出一些已经安装的软件.
同时还能看到当前进程所加载的DLL和对应路径.
检查DLL和对应路径时, 可以重点检查如下的一些项目:
有没有防毒程序的DLL加载.
有没有类似...
WinDbg, 软件调试阅读全文
2013-10-30 22:13
⁄ 工业·编程
⁄ 共 7975字
1、 !address eax查看对应内存页的属性
2、 vertarget 显示当前进程的大致信息
3、!peb 显示process Environment Block
4、 lmvm 可以查看任意一个dll的详细信息
例如:0:026 lmvm msvcrt (deferred)表示察看msvcrt.dll的信息,但是没有加载
symbol可以通过.reload命令来加载
5、.reload /!sym 加载符号文件
6、 lmf 列出当前进程中加载的所有dll文件和对应的路径
0:018> lmf
7、 r 命令显示和修改寄存器上的值
r命令显示和...
WinDbg, 软件调试阅读全文
2013-10-10 21:51
⁄ 工业·编程
⁄ 共 1443字
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
1. WinDbg介绍: Debugging Tools and Symbols: Getting Started http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx A word for WinDbg http://mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2004/08/03/4656.aspx
2. WinDbg下载...
WinDbg阅读全文