您可以从命令行使用 gdb 程序(Free Software Foundation 的调试器)来找出错误 , 也可以从诸如 Data Display Debugger(DDD)这样的几个图形工具之一使用 gdb 程序来找出错误 。您可以使用 gdb 来调试用户空间程序或 Linux 内核 。这一部分只讨论从命令行运行 gdb 的情况 。
使用 gdb program name 命令启动 gdb 。gdb 将载入可执行程序符号并显示输入提示符 , 让您可以开始使用调试器 。您可以通过三种方式用 gdb 查看进程:
使用 attach 命令开始查看一个已经运行的进程;attach 将停止进程 。
使用 run 命令执行程序并从头开始调试程序 。
查看已有的核心文件来确定进程终止时的状态 。要查看核心文件 , 请用下面的命令启动 gdb 。
CODE:gdb programname corefilename
要用核心文件进行调试 , 您不仅需要程序的可执行文件和源文件 , 还需要核心文件本身 。要用核心文件启动 gdb , 请使用 -c 选项:
CODE:gdb -c core programname
gdb 显示哪行代码导致程序发生核心转储 。
在运行程序或连接到已经运行的程序之前 , 请列出您觉得有错误的源代码 , 设置断点 , 然后开始调试程序 。您可以使用 help 命令查看全面的 gdb 在线帮助和详细的教程 。
kgdb
kgdb 程序(使用 gdb 的远程主机 Linux 内核调试器)提供了一种使用 gdb 调试 Linux 内核的机制 。kgdb 程序是内核的扩展 , 它让您能够在远程主机上运行 gdb 时连接到运行用 kgdb 扩展的内核机器 。您可以接着深入到内核中、设置断点、检查数据并进行其它操作(类似于您在应用程序上使用 gdb 的方式) 。这个补丁的主要特点之一就是运行 gdb 的主机在引导过程中连接到目标机器(运行要被调试的内核) 。这让您能够尽早开始调试 。请注意 , 补丁为 Linux 内核添加了功能 , 所以 gdb 可以用来调试 Linux 内核 。
使用 kgdb 需要两台机器:一台是开发机器 , 另一台是测试机器 。一条串行线(空调制解调器电缆)将通过机器的串口连接它们 。您希望调试的内核在测试机器上运行;gdb 在开发机器上运行 。gdb 使用串行线与您要调试的内核通信 。
请遵循下面的步骤来设置 kgdb 调试环境:下载您的 Linux 内核版本适用的补丁 。
将组件构建到内核 , 因为这是使用 kgdb 最简单的方法 。(请注意 , 有两种方法可以构建多数内核组件 , 比如作为模块或直接构建到内核中 。举例来说 , 日志纪录文件系统(Journaled File System , JFS)可以作为模块构建 , 或直接构建到内核中 。通过使用 gdb 补丁 , 我们就可以将 JFS 直接构建到内核中 。)应用内核补丁并重新构建内核 。
创建一个名为 .gdbinit 的文件 , 并将其保存在内核源文件子目录中(换句话说就是 /usr/src/linux) 。文件 .gdbinit 中有下面四行代码:
CODE:set remotebaud 115200
symbol-file vmlinux
target remote /dev/ttyS0
set output-radix 16
将 append=gdb 这一行添加到 lilo , lilo 是用来在引导内核时选择使用哪个内核的引导载入程序 。
CODE:image=/boot/bzImage-2.4.17
label=gdb2417
read-only
root=/dev/sda8
append="gdb gdbttyS=1 gdb-baud=115200 nmi_watchdog=0"
清单 7 是一个脚本示例 , 它将您在开发机器上构建的内核和模块引入测试机器 。您需要修改下面几项:
CODE:best@sfb:用户标识和机器名 。
/usr/src/linux-2.4.17:内核源代码树的目录 。
bzImage-2.4.17:测试机器上将引导的内核名 。
rcp 和 rsync:必须允许它在构建内核的机器上运行 。
CODE:set -x
rcp best@sfb: /usr/src/linux-2.4.17/arch/i386/boot/bzImage /boot/bzImage-2.4.17
rcp best@sfb:/usr/src/linux-2.4.17/System.map /boot/System.map-2.4.17
推荐阅读
- 华为p30中批量卸载应用软件具体操作步骤
- Linux操作系统内核的时钟中断机制
- win10系统添加删除程序具体操作步骤
- Linux操作系统内核抢占补丁的基本原理
- PPT中设置文字显示图片原色具体操作步骤
- 如何远程实现为Linux服务器添加新分区
- Win10系统中adobe premiere打不开具体操作步骤
- Linux操作系统内核和设备文件对话
- IPhoneXS中更改应用图标具体操作步骤
- 在Linux系统下清除操作信息的记录
