WinDBG常用调试命令

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 .    查询符号
 
kd> x nt!KeServiceDescriptorTable*
8046e100 nt!KeServiceDescriptorTableShadow = <no type information>
8046e0c0 nt!KeServiceDescriptorTable = <no type information>
 
kd> ln 8046e100
(8046e100)   nt!KeServiceDescriptorTableShadow   | (8046e140)   nt!MmSectionExtendResource
Exact matches:
nt!KeServiceDescriptorTableShadow = <no type information>
 
2. 下载系统文件的符号
 
symchk c:/winnt/system32/ntoskrnl.exe /s srv*c:/symbols*http://msdl.microsoft.com/download/symbols
 
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
 
3. 查看 event 对象的信号状态
 
!object /BaseNamedObjects
dt -b nt!_KEVENT xxxxxxxx
 
4. 查看 LastError 值
 
!gle
 
5. 指定进制形式, 0x/0n/0t/0y 分别表示 16/10/8/2 进制
 
? 0x12345678+0n10
Evaluate expression: 305419906 = 12345682
 
6. 过滤命令窗口输出信息
 
.prompt_allow -reg +dis -ea -src -sym
 
7. .formats 命令
 
以多种格式显示表达式的值
0:000> .formats @eax
Evaluate expression:
 Hex:     00181eb4
 Decimal: 1580724
 Octal:   00006017264
 Binary: 00000000 00011000 00011110 10110100
 Chars:   ....
 Time:    Mon Jan 19 15:05:24 1970
 Float:   low 2.21507e-039 high 0
 Double: 7.80981e-318
 
8. 异常处理相关
 
有 sx, sxd, sxe, sxi, sxn, sxr 几条命令可用来设置异常和事件的处理方式。比如:
0:000> sxe ld
可以在加载 dll 时中断下来。
 
9. 内核调试时切换进程
 
lkd> !process 0 0
lkd> .process xxxxxxxx
 
10. 可在桌面上建立一个 WinDbg.exe 的快捷方式,然后在该快捷方式的属性力设置如下命令行
 
C:/WinDBG/windbg.exe -c ".prompt_allow +dis -reg -ea -src -sym; .enable_unicode 1; .enable_long_status 1; .logopen /t c:/dbglog/dbglog.txt"
 
11. 本机内核调试
 
通过 File/Kernel Debug… 菜单可以打开内核调试选择窗口,选择最后一个 Local 选项页,确定后可以以内核方式调试本地机器。这时所有会挂起系统的命令都用不了了,但可以读写系统内存。另外,有一个方便的用途是用来查看系统结构,比如: dt nt!_EPROCESS 。

12. 其他命令
windbg中常用的命令
~ - list threads in current process context
~* - list detail information of threads in current process context
lm - list all loaded modules
!sym noice/quiet - symbol prompts on/off
.srcpath - set source code path
k - display current stack
~*kb - display current stack for all threads
dv - display current local variable (ctrl + alt + v to switch mode)
.Frame - call stack
dt xxx - display data structure for xxx such as PEB
!gle/!error - display last error for current thread.
!teb - diplay current thread execution block
!peb - diplay current process execution block
r [@register] - display value of all register
ln [Address] - display the object type in Address
x [] - search address for global variable or global function, such as "x kernel32!*"
!locks - display dead lock
!handle - get current handle usage
!htrace [enable] - display and trace handles.
u - disassemble
bp [Kernel!SetLastError] [value] - set break pointer
bl - display break pointer information.
for example:
bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "
when MyVar is exceed 0x20, g command will be invoked. NOTE: "j" is to set conditional break pointer.
ba - data break pointer
ba w4 0x4000000 "kb;g" - list all modify 0x40000's call stack.

p,pa,t,ta - control command
WinDbg 内核调试常用命令 1. vertarget 命令可以显示目标系统的基本信息,如系统版本,计算机名,内核基质等 kd> vertarget Windows 7 Kernel Version 7601 (Service Pack 1) MP (1 procs) Free x86 compatible Built by: 7601.18113.x86fre.win7sp1_gdr.130318-1533 Machine 阅读详情

相关推荐

【C++软件实战问题排查经验分享系列 ④】pdb符号文件 | dump文件分类与生成方法 | Windbg分析dump文件 | Windbg动态调试 | Windbg常用命令 总结

在开发调试C++软件的过程中,时常会使用Windbg分析排查软件运行过程中遇到的各种异常问题。本文对使用Windbg涉及到的pdb符号文件、dump文件分类与生成方法、Windbg分析dump文件、Windbg动态调试目标进程、Windbg常用命令等诸多相关内容进行详细的总结,并给出相关的实战分析实例,供大家借鉴或参考。

dvlinker的技术专栏 3万+

Windows对象 (Object) 结构

有一篇介绍 《Windows对象 (Object) 结构》的文章 因为有太多的转载信息 不知道真实的出处了。 原文作者看到的话给了连接 我直接链接过去。 Windows系统的各种资源以对象(Object)的形式来组织,例如File Object, Driver Object, Device Object等等,但实际上这些所谓的“对象”在系统的对象管理器(Object Manager

sqqsongqiqi的专栏 2507

C++(Qt)软件调试---WinDbg常用命令(32)

本文主要列出常用WinDbg命令,用于速查。 WinDbg(Windows Debugger)是微软官方提供的强大调试工具,主要用于调试 Windows 平台上的应用程序、驱动程序和操作系统内核。它支持本地和远程调试,适用于 x86、x64 和 ARM 架构。 熟练使用WinDbg能让你写出更健壮的代码,解决更复杂的问题。 学习WinDbg不仅能提高日常开发效率,更是成为一名专业C/C++开发者必须掌握的核心技能。

mahuifa的博客 1202

WinDbg学习笔记十一 - 内核调试常用命令5 - 对象相关

在系统中存在着各种各样的对象,所有资源都是以对象的形式存在的,比如文件对象,进程对象,线程对象。而大多数内核函数都会和对象管理器打交道。 句柄是对象的上层的抽象,不同的句柄可以表示同一个对象,不同的进程可以有值相同的句柄。由句柄可以得到对象,由对象也可以生成一个句柄出来。跟对象相关的命令主要有handle, object!handle: 主要用于显示句柄的信息,比如类型,名称等。可

imJaron的博客 542

WinDbg内核调试常用命令

查看所有驱动和设备名 lm !object \ 查看根目录 !object \device 查看所有设备名 dt _DEVICE_OBJECT XXXX 查看设备对象内容 !devobj XXXX 查看设备对象内容 !object \Driver 查看所有驱动名 dt _DRIVER_OBJECT XXXX 查看驱动对象内容 !drvobj XXXX 查看设备对象内容 !devnode ...

weixin_34221036的博客 672

windbg指令-!drvobj

!drvobj!devobj!podev!devstack"!drvobj Driver Name | PDRIVER_OBJECT pointer" 列出这个驱动创建的所有设备。kd> !drvobj /Driver/i8042prtDriver object (82158040) is for: /Driver/i8042prtDriver Extension List: (id ,

若水的专栏 4480

Windbg常用的几个基本命令

Windbg常用的几个基本命令 1. Symbol 文件设置:SRV*F:/MicrosoftSymbols*http://msdl.microsoft.com/download/symbols;F:/TestApplicationSymbol 2. !Analyze -v    直接分析当前的dump,能够自动找出第一现场的异常 3. ~0s    切换分析

青牛的专栏 1734

WinDbg设置和常用调试命令

1. 安装好后先设置环境变量 _NT_SYMBOL_PATH  SRV* 本地目录 store*http://msdl.microsoft.com/download/symbols 本地目录主要要来存放 symbols   或者   .reload:删除所有符号信息并重新加载需要的符号,一般用法“.reoad /f”,“.reload /i xxxx”当模块与pd

ybhjx的专栏 2143

gdb和windbg常用调试命令对照

由于工作的需要,本人常常需要在gdb和windbg调试器上来回切换, 经常会弄混淆这两者的命令,现做个对照表,方便随时查阅。起始本人页经常用到ollydbg,但由于od界面很友好,不太需要用到命令,所以就不列出来了。 命令 windbg gdb 附加 attach attach 脱离附加 detach detach 运行 g/F5 run

Changju博客 3897

windbg 常用调试命令总结

1.显示所有线程 ~ // 显示所有线程 ~* 2.显示堆栈 kb // 显示当前堆栈 ~0 k // 显示第0个线程的堆栈,主线程

就是那个党伟 3442

Windbg内核调试之二: 常用命令

<br />运用Windbg进行内核调试, 熟练的运用命令行是必不可少的技能. 但是面对众多繁琐的命令, 实在是不可能全部的了解和掌握. 而了解Kernel正是需要这些命令的指引, 不断深入理解其基本的内容. 下面, 将介绍最常用的一些指令, 使初学Kernel调试的朋友们能有一个大致的了解. 至于如何熟练的运用它们, 还需要实际的操作过程中进行反复的琢磨.<br /><br />Windbg能够方便的进行远程调试和本地进程调试(只限于User模式), 远程调试又分User mode和Kernel mode

Iqian1314的专栏 907

Windbg 内核调试 常用命令

Windbg 内核 驱动 调试 命令

张昆 1761

WinDBG 常用调试命令总结

Windbg(Windows Debugger)是一款由Microsoft开发的用于Windows操作系统的强大调试工具。它主要用于分析和调试Windows应用程序、驱动程序以及操作系统本身的问题。Windbg提供了许多功能和命令,可用于诊断和解决各种软件和硬件问题,包括崩溃、死锁、性能问题等。

微软技术分享 1万+

Windbg 调试 managed code 常用命令

本文主要记录一些我们在debug 托管代码dumpfile的时候常用命令。1. lm 命令windbg打开dumpfile之后,我们可以利用lm命令去列出当前加载的dll,如果想详细查看某个dll的信息,比如aaa.dll,那么可以利用命令lmv maaa去显示aaa的详细信息,包括版本信息等等。2. k(b)命令可以利用该命令列出当前线程的callstack,想列出所有线程的call stac...

SpringDou的博客 435

Redis单线程为何性能依旧高?核心原理与工程实践解析

在高并发系统设计中,IO多路复用是实现高效网络服务的关键技术,而内存操作的速度远高于磁盘IO。Redis凭借单线程模型与IO多路复用机制,在内存数据存储中实现了极高吞吐量。本文将深入分析Redis为何采用单线程却依然性能卓越,包括其基于内存的快速访问、epoll事件驱动机制、避免上下文切换与锁竞争的设计,以及底层数据结构的编码优化。同时探讨Redis 6.0多线程IO的演进,帮助开发者在实际场景中合理利用Redis特性,规避大key与慢命令风险。

weixin_33881140的博客 327

WinDbg常用调试命令

如何用WinDbg调试就不说了,满大街就是。此文只记录些常用命令,不断补充,以备不时之需。只记录简单用法或命令名,具体用法查WinDbg的Debugging Help。   .reload:删除所有符号信息并重新加载需要的符号,一般用法“.reoad /f”。   !analyze:自动分析出异常信息,一般用法“!analyze -v”。   lm:列出加载的所有模块和每个

BeanJoy的专栏 4691
上一篇: 使用WinDbg调试程序
下一篇: #pragma directive
CharlesPrince
博客等级 码龄20年 61粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值