gpt4 book ai didi

debugging - WinDBG的命令类别?

转载 作者:行者123 更新时间:2023-12-02 11:26:43 25 4
gpt4 key购买 nike

我看到一些关于WinDBG命令的引用和教程。其中一些喜欢这个 lm、这个 .echo、这个 !running 和这个 nt!_PDB

这些类别之间有什么区别

  • xxx
  • .xxx
  • !xxx
  • xxx!yyy

他们看起来很困惑。

最佳答案

有内置命令、元命令(dot命令)和扩展命令(bang命令)。

我个人的观点是,与元命令相比,您不必太关心内置命令的差异,因为有足够多的例子表明这些定义不正确匹配。知道它们始终存在并且不需要加载扩展就足够了。

内置命令的好例子,主要是关于控制和从调试目标获取信息:

g - go
k - call stack
~ - list threads

恕我直言,这个定义并不真正匹配的示例:

version    - show version of the debugger
vercommand - show command line that was used to start the debugger
n - set number base

元命令的好例子,它们被认为只影响调试器而不影响目标:

.cls        - clear screen
.chain - display loaded extensions
.effmach - change behavior of the debugger regarding the architecture
.prefer_dml - change output format

恕我直言,这个定义并不真正匹配的示例:

.lastevent  - show last exception or event that occurred (in the target)
.ttime - display thread times (of the target)
.call - call a function (in the target)
.dvalloc - allocate memory (in the target)

但是,最好理解扩展命令是不同的,特别是因为相同的命令可能会导致不同的输出,具体取决于加载的扩展或首先出现在扩展列表中的扩展以及您可以影响顺序(例如,通过.load.unload.setdll)。除了简单的 !command 形式之外,请注意,还有 !extension.command 语法来显式指定扩展名。我将在下面的示例中使用它。 (甚至还有 !c:\path\to\extension.command)

扩展命令冲突的示例是在内核调试 session 中给出的,其中一个 !heap 不提供任何输出,而另一个显然需要一个参数才能工作。

0: kd> !ext.heap
0: kd> !exts.heap
Invalid type information

您的问题中提到的最后一个格式 (xxx!yyy) 不是命令,而是方法或类型信息,其中 xxx 表示模块 (DLL),yyy 表示方法或类型名称。通常,方法内部位置的额外字节偏移量也会出现这种情况 (xxx!yyy+0xhhh)

关于debugging - WinDBG的命令类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com