WinDbg怎么用?

作者&投稿:啜昆 (若有异议请与网页底部的电邮联系)
windbg.exe安装后怎么用~

方法/步骤

1
请自行百度搜索下载windbg软件
建议去微软网站上下载
运行windbg

打开windbg程序

按F6或者是 file——>Attach to a Proces

然后就能看到本机所有的进程信息

选择一个进程
这里选择chrome浏览器的进程

弹出提示框选择yes

然后出现中断
chrome浏览器不能使用
在输入框里面输入G 然后按回车开始

开始调试输出

我们切换过去吧Chrome浏览器关闭掉

然后windbg调试也退出
接着我们只要保存数据即可

方法/步骤


1
请自行百度搜索下载windbg软件
建议去微软网站上下载
运行windbg

打开windbg程序

按F6或者是 file——>Attach to a Proces

然后就能看到本机所有的进程信息

选择一个进程
这里选择chrome浏览器的进程

弹出提示框选择yes

然后出现中断
chrome浏览器不能使用
在输入框里面输入G 然后按回车开始


开始调试输出

我们切换过去吧Chrome浏览器关闭掉


然后windbg调试也退出
接着我们只要保存数据即可

dmp文件需要用Windbg软件分析。

需要为Windbg软件设置符号表路径,作为蓝屏原因分析数据库,否则软件将没有作用。单击File--选择Symbol File Path,在弹出的对话框Symbol Path文本框中输入SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols,单击OK。

设置完毕后单击File--选择Open Crash Dump来打开蓝屏文件,在弹出的对话框中点选到C:\Windows\Minidump文件夹,单击我们要分析的蓝屏文件,单击打开。

在弹出的对话框Save Information for workspace?(是否保存信息到工作区)中单击Yes。(如果下次不想再被提示,可以勾选Don't ask again in the WinDbg session)。

接下来就是对文件进行分析,这需要一定的经验和知识。这里我们着重可以看一下System Uptime(开机时间)和Probably Caused By(可能引起故障的原因是)。

需要进一步分析,可以单击!analyze -v,此时我们可以从中提取到蓝屏错误代码和引起蓝屏的程序名称,再通过网络搜索这些程序名和代码等方式弄清原因。



什么是WinDBG? WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由于大部分程序员不需要做Kernel模式调试, 我在这篇文章中不会介绍Kernel模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读Inside Windows 2000和Windbg所带的帮助文件。这篇文章得主要目的是介绍WINDBG的主要功能以及相关的命令。关于这些命令的详细语法,请参阅帮助文件。对文章中提到的许多命令,WINDBG有相应的菜单选项。如何得到帮助在命令(Command)窗口中输入.hh 命会调出帮助文件令。.hh keyword会显示关于keyword的详细命令。启动DebuggerWindbg可以用于如下三种调试:远程调试:你可以从机器A上调试在机器B上执行的程序。具体步骤如下:
? 在机器B上启动一个调试窗口(Debug Session)。你可以直接在Windbg下运行一个程序或者将Windbg附加(Attach)到一个进程。? 在机器B的Windbg命令窗口上启动一个远程调试接口(remote):.server npipe:pipe=PIPE_NAMEPIPE_NAME是该接口的名字。? 在机器A上运行:windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAMESERVER_NAME是机器B的名字。Dump文件调试:如果在你的客户的机器上出现问题,你可能不能使用远程调试来解决问题。你可以要求你的用户将Windbg附加到出现问题的进程上,然后在命令窗口中输入:
.dump /ma File Name创建一个Dump文件。在得到Dump文件后,使用如下的命令来打开它:windbg –z DUMP_FILE_NAME本地进程调试:你可以在Windbg下直接运行一个程序:
Windbg “path to executable” arguments 也可以将Windbg附加到一个正在运行的程序: Windbg –p “process id” Windbg –pn “process name” 注意有一种非侵入(Noninvasive)模式可以用来检查一个进程的状态并不进程的执行。当然在这种模式下无法控制被调试程序的执行。这种模式也可以用于查看一个已经在Debugger控制下运行的进程。具体命令如下: Windbg –pv –p “process id” Windbg –pv –pn “process name” 调试多个进程和线程如果你想控制一个进程以及它的子进程的执行,在Windbg的命令行上加上-o选项。Windbg中还有一个新的命令.childdbg 可以用来控制子进程的调试。如果你同时调试几个进程,可以使用 | 命令来显示并切换到不同的进程。在同一个进程中可能有多个线程。~命令可以用来显示和切换线程。调试前的必备工作在开始调试前首先要做的工作是设置好符号(Symbols)路径。没有符号,你看到的调用堆栈基本上毫无意义。Microsoft的操作系统符号文件(PDB)是对外公开的。另外请注意在编译你自己的程序选择生成PDB文件的选项。如果设置好符号路径后,调用堆栈看起来还是不对。可以使用lm, !sym noisy, !reload 等命令来验证符号路径是否正确。Windbg也支持源码级的调试。在开始源码调试前,你需要用.srcpath设置源代码路径。如果你是在生成所执行代码的机器上进行调试,符号文件中的源码路径会指向正确的位置,所以不需要设置源代码路径。如果所执行代码是在另一台机器上生成的,你可以将所用的源码拷贝(保持原有的目录结构)的一个可以访问的文件夹(可以是网络路径)并将源代码路径设为该文件夹的路径。注意如果是远程调试,你需要使用.lsrcpath来设置源码路径。静态命令:显示调用堆栈:在连接到一个调试窗口后,首先要知道的就是程序当前的执行情况k* 命令显示当前线程的堆栈。~*kb会显示所有线程的调用堆栈。如果堆栈太长,Windbg只会显示堆栈的一部分。.kframes可以用来设置缺省显示框架数。显示局部变量:接下来要做通常是用dv显示局部变量的信息。CTRL+ALT+V可以切换到更详细的显示模式。关于dv要注意的是在优化过的代码中dv的输出极有可能是不准确的。这时后你能做的就是阅读汇编代码来发现你感兴趣的值是否存储在寄存器中或堆栈上。有时后当前的框架(Frame)上可能找不到你想知道的数据。如果该数据是作为参数传到当前的方法中的,可以读一读上一个或几个框架的汇编代码,有可能该数据还在堆栈的某个地址上。静态变量是储存在固定地址中的,所以找出静态变量的值较为容易。.Frame(或者在调用堆栈窗口中双击)可以用来切换当前的框架。注意dv命令显示的是当前框架的内容。你也可在watch窗口中观察局部变量的值。显示类和链表: dt可以显示数据结构。比如dt PEB 会显示操作系统进程结构。在后面跟上一个进程结构的地址会显示该结构的详细信息:dt PEB 7ffdf000。Dl命令可以显示一些特定的链表结构。显示当前线程的错误值:!gle会显示当前线程的上一个错误值和状态值。!error命令可以解码HRESULT。搜索或修改内存:使用s 命令来搜索字节,字或双字,QWORD或字符串。使用e命令来修改内存。计算表达式:?命令可以用来进行计算。关于表达式的格式请参照帮助文档。使用n命令来切换输入数字的进制。显示当前线程,进程和模块信息:!teb显示当前线程的环境信息。最常见的用途是查看当前线程堆栈的起始地址,然后在堆栈中搜索值。!peb显示当前进程的环境信息,比如执行文件的路径等等。lm显示进程中加载的模块信息。显示寄存器的值:r命令可以显示和修改寄存器的值。如果要在表达式中使用寄存器的值,在寄存器名前加@符号(比如@eax)。显示最相近的符号:ln Address。如果你有一个C++对象的指针,可以用来ln来查看该对象类型。 查找符号:x命令可以用来查找全局变量的地址或过程的地址。x命令支持匹配符号。x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。查看lock:!locks显示各线程的锁资源使用情况。对调试死锁很有用。查看handle:!handle显示句柄信息。如果一段代码导致句柄泄漏,你只需要在代码执行前后使用!handle命令并比较两次输出的区别。有一个命令!htrace对调试与句柄有关的Bug非常有用。在开始调试前输入:!htrace –enable 然后在调试过程中使用!htrace handle_value 来显示所有与该句柄有关的调用堆栈。显示汇编代码:u。程序执行控制命令:设置代码断点:bp/bu/bm 可以用来设置代码断点。你可以指定断点被跳过的次数。假设一段代码KERNEL32!SetLastError在运行很多次后会出错,你可以设置如下断点: bp KERNEL32!SetLastError 0x100.在出错后使用bl 来显示断点信息(注意粗体显示的值):0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError重新启动调试(.restart命令)并设置如下的断点:bp Kernel32!SetLastError 0x100-0x4fDebugger会停在出错前最后一次调用该过程的地方。你可以指定断点被激活时Debugger应当执行的命令串。在该命令串中使用J命令可以用来设置条件断点:bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "上面的断点只在MyVar的值大于32时被激活(g命令条件断点的用途极为广泛。你可以指定一个断点只在特殊的情况下被激活,比如传入的参数满足一定的条件,调用者是某个特殊的过程,某个全局变量被设为特殊的值等等。设置内存断点:ba可以用来设置内存断点。调试过程中一个常见的问题是跟踪某些数据的变化。如下的断点:ba w4 0x40000000 "kb; g"可以打印出所有修改0x40000000的调用堆栈。控制程序执行:p, pa,t, ta等命令可以用来控制程序的执行。控制异常和事件处理:Debugger的缺省设置是跳过首次异常(first chance expcetion),在二次异常(second chance exception)时中断程序的执行。sx命令显示Debugger的设置。sxe和sxd可以改变Debugger的设置。 sxe clr可以控制Debugger在托管异常发生时中断程序的执行。常用的Debugger事件有: av 访问异常 eh C++异常 clr 托管异常 ld 模块加载-c 选项可以用来指定在事件发生时执行的调试命令。


OllyDbg 是谁发明的,它有什么主要的作用
作者:Oley Yuschuk 主页:home.t-online.de\/home\/Ollydbg 作者原话:Updated help, bugfix for right click, command-line plugin cam modify registers and memory.This is the last beta. If I receive no crash notifications, in a week it will be declared final.原说明:OllyDbg 1.10 is...

OD 条件记录断点如何指定记录的长度
以下命令适用于 OllyDbg 的快捷命令栏插件(显示于程序的状态栏上方)CALC 判断表达式 WATCH 添加监视表达式 AT \/ FOLLOW Disassemble at address 在地址进行反汇编 ORIG Disassemble at EIP 反汇编于 EIP DUMP Dump at address 在地址转存 DA Dump as disassembly 转存为反汇编代码 DB Dump in hex ...

gdb加载动态库成功,但是不能显示动态库中的源码(gdb+gdbserver)_百度知 ...
因为具体的给的不够详细,不清楚你遇到的情况。如果仅从断点上看,应该就是CApartment.cpp:55 但是,如果你的程序编译的时候,不是-O0,那个可能回不到源码,只能看汇编。1、有时候(很少)就是编译器的错误。2、还有可能就是你调试的程序和你的源码不匹配 3、你的程序已经崩溃了,破坏了堆栈或者...

S3C2440裸板遭遇*** Error: Unable to halt ARM core问题,求解
1.检查复位电路工作是否正常,上电时用示波器检查复位信号是否正常(低到高,大概几百毫秒)2.2440工作电压是否正常(3.3v和1.25v)3.检查OM0:OM1是不是悬空了,应该连接到固定电平的(NAND或者NOR启动)

OllyDBG的常识
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware\/Demo"等 (我们希望把它跳过,不让它出现)xxxxxxxxxxxx 正确路线所在 2.修改为nop je(jne,jz,jnz) =>nop相应的机器码90 (正确...

总结一下得到内核模块地址的方法,参考N多大牛
DbgPrint("方法四遍历模块名称:%wZ,地址:%8X\\n",&(SectionBase->FullDllName),SectionBase->DllBase);num++;}Entry=Entry->Flink;}while(Entry!=(LIST_ENTRY*)Addr);\/\/直到遍历回来DbgPrint("方法四得到模块总数:%d\\n",num);}NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING p...

C语言编程中最小公倍数怎么求
从大数m开始依次向后递增直到找到第一个能同时被两数整除的数为止,所以循环变量i的初值为寻找第一个能同时被两整数整除的自然数,并将其输出。需要注意的是,在找到第一个满足条件的i值后,循环没必要继续下去,所以用break来结束循环。

怎么用C++对进程进行遍历,并结束确定的进程?
IN PDRIVER_OBJECT DriverObject ){ } VOID GetAllProcess(ULONG Address){ \/\/得到对应的EPROCESS结构 Address -= 0x88;\/\/EPROCESS偏移0x174为ImageFileName(进程名)DbgPrint("ProcessName %s \\n",(char*)Address+0x174);\/\/EPROCESS偏移0x18为页目录物理地址 DbgPrint("Process Context %d \\n"...

VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
如何比较内存状态?结论如何启用内存泄漏检测机制? VC++ IDE 的默认状态是没有启用内存泄漏检测机制的,也就是说即使某段代码有内存泄漏,调试会话的 Output 窗口的 Debug 页不会输出有关内存泄漏信息。你必须设定两个最基本的机关来启用内存泄漏检测机制。一是使用调试堆函数:#define _CRTDBG_MAP_ALLOC #include #...

求MAME32_Plus0.88中文版 键设置问题
src\/mamedbg.c: src\/mamedbg.h: - Attempting to start a trace with non-existant registers will now raise a warning in the MAME debugger - Implemented mame_debug_trace_write() call, an API to allow injecting text into the trace files of the MAME debugger. src\/cpu\/i386\/i386ops.c: sr...

公主岭市15798717862: 怎样使用windbg来调试c++程序 -
当涂鲁安的: 在命令(Command)窗口中输入.hh 命会调出帮助文件令. .hh keyword会显示关于keyword的详细命令.启动DEBUGGERWindbg可以用于如下三种调试:远程调试:你可以从机器A上调试在机器B上执行的程序.具体步骤如下:? 在机器B...

公主岭市15798717862: 如何使用Windbg分析Windows蓝屏文件 -
当涂鲁安的: 右击“计算机”-“属性”-“高级系统设置”-“高级”-“启动和故障恢复”设置 2.提取蓝屏文件"C:\WINDOWS\Minidump\"dump文件及"C:\WINDOWS\"MEMERY.DUMP 3.下载安装windbg 4.启动"windbg"-点击"File"-"...

公主岭市15798717862: windbg.exe安装后怎么用 -
当涂鲁安的: 方法/步骤1 请自行百度搜索下载windbg软件 建议去微软网站上下载 运行windbg 打开windbg程序 按F6或者是 file——>Attach to a Proces 然后就能看到本机所有的进程信息 选择一个进程 这里选择chrome浏览器的进程 弹出提示框选择yes 然后出现中断 chrome浏览器不能使用 在输入框里面输入G 然后按回车开始 开始调试输出 我们切换过去吧Chrome浏览器关闭掉 然后windbg调试也退出 接着我们只要保存数据即可

公主岭市15798717862: 如何用WinDBG远程调试程序 -
当涂鲁安的: 远程调试:你可以从机器A上调试在机器B上执行的程序.具体步骤如下:?在机器B上启动一个调试窗口(DebugSession).你可以直接在Windbg下运行一个程序或者将Windbg附加(Attach)到一个进程.?在机器B的Windbg命令窗口上启...

公主岭市15798717862: 如何使用WinDbg调试进程信息 -
当涂鲁安的: 百度搜索下载windbg软件(建议去微软网站上下载) 运行windbg 打开windbg程序 按F6或者是 file——>Attach to a Proces 然后就能看到本机所有的进程信息 选择一个进程 这里选择chrome浏览器的进程 弹出提示框选择yes 然后出现中断 chrome浏览器不能使用 在输入框里面输入G 然后按回车开始 开始调试输出 切换过去吧Chrome浏览器关闭掉 然后windbg调试也退出 接着我们只要保存数据即可 望采纳~

公主岭市15798717862: 如果使用WINDBG来调试C语言程序. -
当涂鲁安的: 在dev里生成dll和调用程序的pdb符号文件,然后把符号文件拷贝到windbg的符号文件目录里 设置好源文件的路径,然后用windbg运行调用程序 然后就可以设断点,跟踪了 具体看windbg的帮助文件,网上也有很多例子

公主岭市15798717862: 如何使用WinDbg分析VC++应用程序的故障转储 -
当涂鲁安的: 第一步是将转储文件加载到WinDbg实例中.接下来,你需要确定你有一个符号设置.最后,你可以运行命令 analyze -v 来获得对它执行的基本分析.! 你需要有可用的符号信息才能使转储文件有价值.

公主岭市15798717862: 如何用windbg查看Dump
当涂鲁安的: 所以现在大家都开始分析dump了,上次微软的大牛们过来给表演了一下windbg, 1 安装windbg (从微软网站上下载,free), 运行windbg, 设置symbol path, File- Symbol File Path, 输入SRV*C:\websymbols*http://msdl.microsoft.com/download/...

公主岭市15798717862: 如何使用WinDBG跟踪调试ASL/ACPI -
当涂鲁安的: 在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理. 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger).下面就介...

公主岭市15798717862: 如何利用 WinDbg 进行双机调试 -
当涂鲁安的: 勾选 Pipe 使用命名管道连接 勾选 Reconnect 确保在读/写错误发生时,WinDbg 自动断开并重连管道 在 Port 字段填入命名管道名称(本例中笔者使用 \\.\pipe\eric,具体用法在本文最后解释) 激活被调机虚拟机窗口(以 Windows Virtual PC 为例),点击 工具 – 设置…, 在左栏选择 COM1(与被调机系统中设置的调试口一致),在右栏选择 命名管道 并在该字段填入与 WinDbg 里面一致的管道名称(本例是 \\.\pipe\eric),然后 确定.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网