2013-11-12 22:42
⁄ 工业·编程
⁄ 共 112字
命令很简单:
~0s 切换到0号线程
~3s 切换到3号线程
一些其他命令:
~*e !clrstack 遍历每个线程, 依次输出它们的托管调用栈.
!threads 查看所有的托管线程
WinDbg, 软件调试阅读全文
2013-11-12 22:41
⁄ 工业·编程
⁄ 共 231字
在WinDBG的Command窗口中, 默认情况下, 你输入的命令很容易和该命令以及附近命令的输出混杂在一起. 在寻找之前命令的结果的时候, 眼睛看起来会很累.
WinDBG提供了一个选项, 通过这个选项, 你可以把命令输入与输出的颜色进行设置.
选项名:
Prompt level command window text
Prompt level command windows text background
点击菜单View->Options...
配置后的结果如下:
好了, 你的眼睛可以舒服一点了.
WinDbg, 软件调试阅读全文
2013-11-11 22:40
⁄ 工业·编程
⁄ 共 332字
从本质上说, 这个功能是WinDBG的日志功能的一个应用而已. WinDBG的log功能可以记录你在WinDBG中使用的每一个命令以及其对应的输出.
那么如何开启WinDBG的日志功能呢?
首先, 可以选择从命令行中启动WinDBG. 举例, 使用下面的带有-logo参数的命令:
windbg.exe -logo c:\logfile.txt
其次, 如果你已经在一个debug session里了, 你可以使用.logopen命令来开始记录.
回答本文标题中的问题, 步骤如下:
第一步, 开启日志记录:
...
WinDbg, 软件调试阅读全文
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-07 22:36
⁄ 工业·编程
⁄ 共 598字
Symbol能够包含以下的一些信息:
全局变量
局部变量
函数名称, 参数
结构体
源代码行号
有三种类型的Symbol
export symbols 是dll本身的一部分. 比如ntdll.dll和kernel32.dll暴露出很大一部分他们的函数, 以便于他们能够像API一样地调用, 但是大多数的dll会有很少的exported symbols. 大致上, export symbol不包含函数的参数信息, 并且因为暴露的函数实在太少, 所以当你只有export symbol的时候不能确定栈信息的正确...
符号文件, 软件调试阅读全文
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, 软件调试阅读全文