.abandon(用于强制终止调试会话并关闭调试器)

基本语法::.abandon [ /h | /n ]

示例:

命令:.abandon
输出:
echo: ‘.abandon’
0809163703E#5670:[ufzt]bad condition on thread 5673, suspend_cnt=1, state 0x6
.abandon
Abandoned

integer:10
float:3.14
char:A
string:Hello!
Person name:John,Age30,Height1.85
Pointer value:42
NDB quits, bye.
使用** .abandon** 命令会导致调试器立即退出,并丢弃当前的调试会话状态,包括任何设置、断点、堆栈信息、变量值等。它相当于非正常终止调试会话,因此请谨慎使用

.allow_image_mapping(用于启用或禁用允许执行特定调试器命令的功能)

基本用法::.allow_image_mapping

使用.allow_image_mapping命令时,可以传入以下参数之一:
0:禁用加载不可信任图像的功能。此参数会限制调试器仅加载认证为可信任的图像文件。
1:启用加载不可信任图像的功能。此参数会允许调试器加载来自不可信任源的图像文件。

示例:

命令:.allow_image_mapping 0
输出:
echo: ‘.allow_image_mapping 0’

.attach(用于将调试器附加到一个正在运行的进程上)

以便进行远程调试或监视进程的执行状态

基本用法:.attach [ProcessID | ProcessName [KernelObject]]

.attach 1234:将调试器附加到进程ID为1234的进程。
.attach notepad.exe:将调试器附加到名为notepad.exe的进程。
.attach calc.exe KernelObject:将调试器附加到名为calc.exe的进程,并附加到内核对象

示例:

命令:.attach 6489
输出:
echo: ‘.attach 6489’
0809164824E#6495:readv in 6498, @0x0 L8, got 0
0809164824E#6495:readv in 6498, @0x8 L8, got 0
0809164824E#6495:failed to open stat file of pid=25737
0809164824E#6495:badbad, failed to read image name for pid=25737
0809164824E#6495:failed to open /proc/25737/task for 2 in udgp
0809164824E#6495:failed to open proc file /proc/25737/maps for 2
.attach 6489
Attach will occur on next resume

.bpcmds(用于显示或管理与断点相关的命令列表)

使用.bpcmds命令可以了解已定义的断点命令,并且可以使用其他命令(如.bc、.bpmd等)来创建、修改或删除断点命令。断点命令可以用来在触发断点时执行自定义的脚本或命令,以帮助调试人员自动化调试过程,收集信息或执行其他操作

基本用法:.bpcmds [/c] [/v] [/a] [BreakpointID]

/c:清除所有断点命令。
/v:显示详细的断点命令信息。
/a:显示与所有断点关联的命令。
BreakpointID:**显示与指定断点关联的命令

示例:

.bpcmds:显示当前已定义的所有断点的命令列表。
.bpcmds /v:显示详细信息,包括命令的位置、触发条件等。
.bpcmds /a:显示与所有断点关联的命令。
.bpcmds 1:显示与断点ID为1的断点关联的命令

命令:.bpcmds /v

输出:
echo: ‘.bpcmds /v’
.bpcmds /v
bp0 0x00000055`773207d4 ;

命令:.bpcmds /a

输出:
echo: ‘.bpcmds /a’
.bpcmds /a
bp0 0x00000055`773207d4 ;

命令:.bpcmds /c

输出:
echo: ‘.bpcmds /c’
.bpcmds /c
bp0 0x00000055`773207d4 ;

命令:.bpcmds 1

输出:
echo: ‘.bpcmds 1’
.bpcmds 1
bp0 0x00000055`773207d4 ;

.bpsync(确保调试器中的断点状态与目标进程中的实际断点状态保持同步)

当线程到达断点时,.bpsync 命令将冻结所有其他线程,直到应用断点的线程单步通过断点。

基本用法:.bpsync

相关参数
.bpsync 1
.bpsync 0
.bpsync

命令:.bpsync

输出:
echo: ‘.bpsync’
.bpsync
ambush synchronization disabled

命令:.bpsync 1

输出:
echo: ‘.bpsync 1’
.bpsync 1
ambush synchronization enabled

命令:.bpsync 0

输出:
echo: ‘.bpsync 0’
.bpsync 0
ambush synchronization disabled
需要注意的是,.bpsync命令可能需要一些时间来完成,特别是当目标进程包含大量断点时。在执行.bpsync之后,你可以使用.bl命令来查看断点列表,以确保断点已经正确同步

.breakin(用于中断正在运行的目标进程的执行)

它的作用类似于按下Ctrl+C来中断目标进程,但可以在NDB的命令窗口中执行

示例:

命令:.breakin
输出:
echo: ‘.breakin’
.breakin
meta::read_physical is unsupported.
read iram failed with 8000ffff

.chain(用于显示已加载的调试引擎和调试扩展的链表)

使用.chain命令可以显示已加载的调试引擎和调试扩展的链表。它将列出每个组件的名称、版本、路径和描述等信息。处理异常情况

示例:

命令:.chain
输出:
echo: ‘.cache reset’
/ndb/0:000> .cache clear
echo: ‘.cache clear’
/ndb/0:000> .chain
echo: ‘.chain’
.chain
Default extensions are not loaded yet
Extension chain:
/usr/share/nanocode/ndb: (Not loaded)

.childdbg(用于设置或显示子进程的调试器状态)

基本用法:.childdbg [选项]

.childdbg命令的选项包括:
Automatic:表示子进程将自动附加到调试器中进行调试。这是默认选项。
Manual:表示子进程不会自动附加到调试器中。你可以手动使用.attach命令将需要调试的子进程附加到调试器中。
No:表示取消子进程调试器的设置,子进程不会被自动附加到调试器中进行调试。

示例:

命令:.childdbg

输出:
echo: ‘.childdbg’
.childdbg
Child processes will be debugged

命令:.childdbg Automatic

输出:
echo: ‘.childdbg Automatic’
.childdbg Automatic
Child processes will not be debugged

命令:.childdbg Manual

输出:
echo: ‘.childdbg Manual’
.childdbg Manual
Child processes will not be debugged

命令:.childdbg No

输出:
echo: ‘.childdbg No’
.childdbg No
Child processes will not be debugged

.dump(用于生成程序的内存转储(memory dump)的命令)

内存转储是将程序的内存内容保存到磁盘文件中的过程,可以在调试过程中分析和还原程序的状态。

基本用法:.dump [选项] <文件路径>

其中,选项是可选的,用于指定内存转储的类型和细节。常用的选项包括:

/ma:生成完整内存转储,包括程序的代码、数据、堆栈等全部内存内容。
/md:生成小型内存转储,只包括程序的代码段和已加载的模块。
/mm:生成映射内存转储,只包括程序的映射视图。
/mf:生成内存转储到指定文件路径

示例:

命令:.dump a.dmp

输出:
echo: ‘.dump a.dmp’
.dump a.dmp

.echo(用于在命令行界面上显示文本的命令)

它在很多操作系统和脚本语言中都有使用。

基本用法:.echo

命令:.echo”Hello geduer”
输出:
echo: ‘.echo”Hello geduer”‘
.echo”Hello geduer”
Hello geduer

.effmach(用于在调试会话中更改目标机器的体系结构)

基本用法:.effmach < machine >

其中,< machine >是目标机器体系结构的名称或枚举值。常见的一些枚举值包括:
下面是.effmach命令的基本用法:
i386: Intel x86 32位体系结构
amd64: AMD64 / x64 64位体系结构
arm: ARM体系结构
arm64: ARM64体系结构
命令:.effmach arm
输出:
echo: ‘.effmach arm’
.effmach arm
Effective machine: ARM 32-bit (arm)

.enable_long_status(用于启用长格式的状态显示)

基本用法:

命令:.enable_long_status
输出:
echo: ‘enable_long_statu’
0809160824E#5670:readv in 5673, @0x0 L1, got 0

.enable_unicode(用于启用Unicode字符编码支持)

基本用法:

命令:.enable_unicode
输出:
echo: ‘enable_unicode’
0809160841E#5670:readv in 5673, @0x0 L1, got 0

.frame(切换当前堆栈的活动帧)

命令:.frame 1

示例:

输出:
echo: ‘.frame 1’
0807164603E#8969:readv in 8972, @0x83c823ab10 L8, got 0
0807164603E#8969:readv in 8972, @0x82c823ab18 L8, got 0
.frame 1
Cannot find frame 0x1, previous scope unchanged
说明:Cannot find frame 0x1, previous scope unchanged表明调试器无法找到编号为1的栈帧。这是因为:
当前函数是程序的入口点,栈上根本没有第1帧

.lastevent(显示最近的事件信息)

命令:.lastevent

示例:

这个命令可能用于查看最近一次系统或应用程序中发生的重要事件,比如错误、警告或用户操作。这对于故障排查和审计跟踪非常有用
输出:
echo: ‘.lastevent’
.lastevent
Last event: 230c.230c: Access violation - code c0000005 (first chance)

.help(获取关于调试器命令的帮助信息)

命令:.help

输出:(节选)
echo: ‘.help’
.help
. commands:
.abandon - abandon current process
.asm [] - set disassembly options
.asm- [] - clear disassembly options
.attach - attach to specified process at next execution
.bpsync [0|1] - special breakpoint behavior for multithreaded debuggees
说明:对于理解如何使用ndb提供的命令而不必查找外部的手册或文档来说是非常有用的。

.sympath(设置或更改符号路径。 符号路径指定调试器查找符号文件的位置)

命令:.sympath

基本用法: .sympath[+] [Path [; …]

参数:
+
指定新位置将追加到 (而不是替换) 以前的符号搜索路径。

Path
完全限定路径或完全限定路径的列表。 多个路径由分号分隔。 如果省略 Path ,则显示当前符号路径。
输出:
echo: ‘.sympath’
.sympath
Symbol search path is: tgt/usr/share/nanocode/SYM

作者:涂滨晶  创建时间:2024-08-09 17:31
最后编辑:涂滨晶  更新时间:2024-08-09 17:44