++

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

跳转到目录 点这里 

GDB调试:

    1)首先打开一个终端启动  qemu

          这行命令打开一个Qemu 虚拟机,-S表示暂停等待调试程序gdb来连接  tcp后面指定端口, bzImage自己编译好的内核镜像

qemu -gdb tcp::8888 -S /kernel-debug/linux-5.9.8/arch/x86/boot/bzImage 

    2)然后进入源码编译目录通过GDB 来调试

cd /kernel-debug/linux-5.9.8
gdb vmlinux

   3)进入GDB后 在kernel 在GDB 里面输入三个命令调试,每输入一个后回车 

         第一行 表示连接到打开的qemu 

         第二行 表示 在内核起点函数 start_kernel 打上断点

         第三行 表示表示继续 qemu程序,正式启动内核

target remote:8888
hbreak start_kernel
c
 也可以用: target remote localhost:8888

4) 如果你想打多个断点,可以用一个脚本来放gdb命令,默认的,你在执行gdb令的目录放一个名为  .gdbinit的文件,把命令放上去就可以了。 

         但是在Manjaro上 还需要在当前用户的HOME 目录配置一下,如果是 root用户就  /root  目录下新增一个

       vim /root/.gdbinit 文件,内容如下:

set auto-load safe-path /

      vim /kernel-debug/linux-5.9.8/.gdbinit

target remote localhost:8888
hb start_kernel
c
b init/main.c:841
c
step

5)带文件系统的调试

         上面的调试是没有文件系统的,内核初始化完了,进入空转,然后挂载文件系统会报错。

         如果你想调试系统调用,就必须挂载文件系统,然后再执行用户程序。

         那么,只需要加个参数就 -hda 就行了,它就是指定Qemu硬盘文件。

         -append root=/dev/sda 就是 

         这里的   /kernel-debug/initramfs.img 就是根文件系统(这个可以从别地下载,也可以自己制作)

        -nographic 无界面启动,看你的需要(ssh执行时必需无界面才能启动)

qemu -gdb tcp::8888 -S -hda /boot/initramfs-5.8-x86_64.img -kernel /kernel-debug/linux-5.9.8/arch/x86/boot/bzImage -append "root=/dev/sda nokaslr"  -nographic

 

用 eclilpse 调试 ,过程截图点这里

下载: wget https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/R/eclipse-cpp-neon-R-linux-gtk-x86_64.tar.gz

主要步骤如下:

      主要注意要以 code As Makefile Project 方式导入项目,这样会自动生成索引,调时时就可以像调试java一下在界面下断点了。

eclipse 禁用索引 和自动编译

1、Window->Preferences->General->Workspace 中将Build Automatically选项去掉 (自动编译会破坏己生成的东西)。

2、Window->Preferences->C/C++ -> Indexer中,禁用 indexer (indexer 费时很卡)。

导入Makefile项目

File -> Import -> Project -> C/C++ -> C Existing Code As Makefile Project -> Next

-> Existing Code Location => /kernel-debug/linux-5.9.8

-> Project Name linux-5.9.8

-> Languages C/C++ 

-> Toolchain for Indexer Settings ->= Linux GCC

配置Debug选项

Debug configurations -> C/C++ Remote Application

GDB(DSF) Manual Remote Debugging Launcher (用gdbserver调试用户空间程序才选自动,这里选Manual

Main TAB -> -C/C++ Application-> /kernel-debug/linux-5.9.8/vmlinux (选 vmLinux 文件绝对路径)

Main TAB -> -Disable auto build

Debugger TAB -> Stop on startup at 'start_kernel'

Debugger TAB -> Main -> GDB debuger -> = /usr/bin/gdb

Debugger TAB -> Main -> GDB command file-> = /kernel-debug/linux-5.9.8/.gdbinit

Debugger TAB -> Main -> Tracepoint mode-> = Normal

Debugger TAB -> connection -> TYPE -> = TCP

Debugger TAB -> connection -> Host Name or IP Address -> = 127.0.0.1

Debugger TAB -> connection -> Port number = 8888

 

 各种工具版本号

-------gdb 版本--------

[hun@hun-hh ~]$ gdb -v
GNU gdb (GDB) 10.1
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

-------make 版本--------

[hun@hun-hh ~]$ make -v
GNU Make 4.3
为 x86_64-pc-linux-gnu 编译
Copyright (C) 1988-2020 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

-------qemu 版本--------

[hun@hun-hh ~]$ qemu -version
QEMU emulator version 5.1.0
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers

-------Eclipse 版本--------

Eclipse IDE for C/C++ Developers

Version: Neon Release (4.6.0)
Build id: 20160613-1800 

-------java 版本--------

hun@hun-hh ~]$ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

-------MANJARO 的linux内核版本--------

[hun-hh hun]# uname -a
Linux hun-hh 5.8.16-2-MANJARO #1 SMP PREEMPT Mon Oct 19 11:33:03 UTC 2020 x86_64 GNU/Linux

[hun-hh hun]# hostnamectl | grep -i kernel
Kernel: Linux 5.8.16-2-MANJARO

[hun-hh hun]# cat /proc/version
Linux version 5.8.16-2-MANJARO (builduser@development) (gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 SMP PREEMPT Mon Oct 19 11:33:03 UTC 2020

 

posted on 2020-12-02 02:32  自制力缺失症患者  阅读(136)  评论(0编辑  收藏  举报