现在位置: 首页 > WinDbg
2014-11-29 18:22 工业·编程 ⁄ 共 1017字 暂无评论
WinDBG的远程调试由服务端和客户端组成,和visualstudio类似。 被调试的机器是服务端(server), 我们做调试的机器是客户端(client)。 两台机器都需要安装WinDBG。 第一步, 建立WinDBG server 端 使用 -server参数可以使WinDBG以服务器方式启动。 WinDBG可以用多种连接协议让客户端连接,比如命名管道(named pipe),安全管道(secure pipe), TCP协议(socket), SSL协议,串口/并口(COM port)等等。 第二步, 用WinDBG c...
阅读全文

一、WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。 二、WinDbg6.12.0002.633下载 x86位版本下载:【微软官方安装版】 x64位版本下载:【微软官方安装版】 三、设置符号表 符号表是WinDbg关键的“数据库”...
阅读全文
    我们身边的很多软件都引入了dump生成和收集机制。但是一般情况下,它们都是生成minidump。因为minidump文件相对来说很小,方面我们收集上来进行分析。但是Minidump保存了很少的信息,在一些场景下,可能不能协助我们准确快速定位问题。     但是,如果我们在测试过程中,发生了必现崩溃,而minidump又不能让我们发现什么,那该怎么办呢?我这儿举一个例子。我们看一下代码 // Dump.cpp : 定...
阅读全文
2014-03-24 06:06 工业·编程 ⁄ 共 362字 暂无评论
通常使用windbg都是用M$的符号,但是如果你去搞别的东西,比如调试firefox,符号何来? 给大家提供一些常见符号服务器的地址 Microsoft – http://msdl.microsoft.com/download/symbols Firefox   – http://symbols.mozilla.org/firefox Chrome    – http://chromium-browser-symsrv.commondatastorage.googleapis.com Citrix    – http://ctxsym.citrix.com/symbols Safa...
阅读全文
CCCCCCCC 微软C++ debugging运行时用该值标记未初始化过的栈内存   CDCDCDCD 微软C++ debugging运行时用该值标记未初始化过的堆内存   FEEEFEEE 微软的HeapFree函数用该值来标记被释放了的堆内存   ABABABAB 为堆分配的内存后, 微软的HeapAlloc函数用该值标记"no man's land"哨兵位. 所谓哨兵位(Guard Byte)就是所分配的内存的起始和终止地址上的内存的值. BAADF00D 微软的LocalAlloc函数用该...
阅读全文
2013-11-14 23:00 工业·编程 ⁄ 共 857字 暂无评论
1. 如何Debug一个进程的子进程? 答: 使用WinDBG attach到父进程, 然后输入命令".childdbg 1"(无引号). 这样子进程在刚刚被加载的时候, WinDBG就Attach上去了. 这两个进程的debug session都在一个WinDBG的窗口里, 如果想要切换当前进程, 可以使用命令"|"来查看所有的进程, 使用"|0s"来切换到ID为0的进程, 以此类推. 2. 如何在进程刚刚加载的时候, 就使用Debugger attach上去? 答: 使用GFlags. 参...
阅读全文
检查dump文件的时候, 我们经常会使用下面的命令来获得所有线程上的调用栈 ~*e !clrstack 输出结果举例如下: OS Thread Id: 0x1b30 (15) Child-SP         RetAddr          Call Site 0000000034a9ed00 000006424e611fc0 System.Threading.WaitHandle.WaitOne(Int64, Boolean) 0000000034a9ed40 00000642782f174b System...
阅读全文
2013-11-14 22:57 工业·编程 ⁄ 共 1538字 暂无评论
当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内容也就相当于对象的状态. d命令最常见的格式就是根据指定的类型信息来显示存储在某地址中的数据. 调试器并不会去猜测这个地址上存储的是什么数据, 因为在大多数情况下猜测都是错误的. 所以需要用户显式地制定按照何种格式来解析数据. 命令格式如下: d [typ...
阅读全文
2013-11-14 22:55 工业·编程 ⁄ 共 377字 暂无评论
命令 ============ dv Display Variable的缩写, 查看局部变量. dv /i 查看局部变量, 并显示符号的类型和参数类型. dv /V 查看局部变量, 并显示变量的存储位置. dv /V VariableName 指定需要查看的变量的名字 dv 02sample!gGlo* dv命令可以带有通配符, 来查看具有某命名模式的变量. 举例: dt Display Type的缩写. 当变量的类型为复合类型, 比如说结构体或者类, 那么dv命令只会显示变量的地址. dt命令可以将一块内存按照某...
阅读全文
2013-11-14 22:54 工业·编程 ⁄ 共 373字 暂无评论
命令 ========== k k命令显示的是一定数量的栈帧, 其中帧的数量是由.kframes命令来控制的, 默认值是256。 kp 5 显示调用栈中前5个函数以及他们的参数. kb 5 显示调用栈中前五个函数以及他们的前三个参数. kf 5 显示在调用栈中五个函数所使用的栈的大小. 每个栈帧所占的空间使用量的计算方法是: 将当前函数的栈基指针与在函数中调用的任何一个函数栈基指针相减. 举例: 手动构造栈的实践- 如何手工构造调用栈 ============ 首先...
阅读全文