概述在某些情况下,我们需要对于内核中的流程进行分析,虽然通过 BPF 的技术可以对于函数传入的参数和返回结果进行展示,但是在流程的调试上还是不如直接 GDB 单步调试来的直接。本文采用的编译方式如下,在一台 16 核 CentOS 7.7 的机器上进行内核源码相关的编译(主要是考虑编译效率),调试则是基于 VirtualBox 的 Ubuntu 20.04 系统中,采用 Qemu + GDB 进行
使用GDB+Qemu调试Linux 内核与驱动 时间:20220510,版本:V0.1作者:robotech_erx 调试内核或者驱动除了双机调试外,还可以使用Qemu来调试。Qemu实现了GDB stub,支持对linux的内核调试。 环境:主机:ubuntu 20.04 LTS 桌面版Qemu:QEMU emulator version 4.2.1 1编
转载
2024-02-10 12:20:09
195阅读
费了很大周折,找到一下两篇文章,按照第一篇,所有的网络都配置完成了就是不通,于是又接着第二篇的做法,成功了。第一篇找不到出处了,抱歉不能注明了。=============================================================================qemu两种上网方式: user mode network : 这种方式实现虚拟机上网很简单,类似vm
转载
2024-03-12 15:32:59
42阅读
http://marss86.org/~marss86/index.php/QEMU_Tips当在gdb下运行QEMU,QEMU的每接收到一个的信号时GDB就停止。 QEMU使用SIGUSR2用于虚拟机超时,我们可以忽略这个信号,并继续我们的调试。要禁用此信号可以在gdb终端输入下面的命令。 (gdb) handle SIGUSR1 SIGUSR2 noprint nostop
翻译
2023-05-04 18:39:08
128阅读
查看run脚本cat run 可以看到,使用的内核为:qemu-system-i386 -nographic -kernel $LINUX/arch/i386/boot/bzImage,使用的硬盘为:-initrd rootfs/rootfs.img.gz如果在启动时加“-s”可以启动调试模式 运行run,进入虚拟机./run
(退出qume虚拟机:reboot -
转载
2024-07-04 10:48:37
593阅读
四月19号,新版本的QEMU 7.0 发布,本版主要包含了对英特尔 AMX 指令集支持 (高级矩阵扩展),该指令集主要用于对英特尔至强服务器的扩展,该指令集提供了新的自定义 TMM“TILE”寄存器和用于操作这些寄存器中数据的指令,例如用于矩阵乘法的 TMUL(Tile matrix MULtiply)。另一个主要的变化是改善了镜像的fleecing备份。当前系统创建快照,然后通过写前
转载
2024-02-24 00:35:46
27阅读
1. VSCode 中进行 C++ 相关的编译和调试
1.1 c_cpp_properties.json - 编译环境相关的设置
1.2 task.json - 编译参数设置
1.3 launch.json - 调试相关的参数
VSCode 中进行 C++ 相关的编译和调试1.1 c_cpp_properties.json - 编译环境相关的设置 该文
在Linux操作系统中,GDB(GNU调试器)是一个非常常用的调试工具,特别是在调试内核和应用程序时。结合QEMU(快速轻便的模拟器)可以帮助我们更好地进行Linux内核的调试。在这篇文章中,我们将讨论如何使用GDB和QEMU进行Linux内核的调试。
首先,我们需要准备一个Linux内核镜像文件和一个虚拟机磁盘镜像文件。我们可以通过编译Linux内核源码生成zImage和initrd文件,然后
原创
2024-04-12 11:17:59
158阅读
目录1生成core文件进行调试1.1 ulimit -c unlimited 配置core文件大小1.2运行程序,产生core文件1.3 gdb调试core文件1.4查看堆栈信息2. 实时调试,不用core文件2.1 进入gdb调试2.2运行程序2.3查看堆栈信息在开发中我们经常会遇到段错误,这个时候首先会想到利用gdb进行调试查找段错误的原因,gdb调试段错误有两种方法,下面分别简单介
前言:在LINUX平台下使用Log+Gdb+Core,一般能应付绝大多数调试程序的场景;GDB: 用户文档查阅:https://sourceware.org/gdb/current/onlinedocs/gdb/ 编译程序时请加上-g选项,关闭优化机制和创建符号表以便调试器调试:gcc/g++ -g你能用GDB对C/C++程序做什么?(1)启动程序;(2)使程序在指定条件下停止
编译选项在使用gdb进行调试之前,必须保证编译的可执行程序和想要调试的动态库编译包含了-g选项。这里还有一个坑,有时候我们虽然指定-g进行了编译,但是编译完成后又使用strip命令去除了调试信息,那么最终的程序和库也是没有调试信息的。此时也是无法进行gdb调试的。gdb调试命令当使用gdb运行时,要执行如下命令:gdb test此命令会运行一个名为test的可执行程序,如果库能够在运行时找到,那么
转载
2024-04-12 14:57:26
240阅读
最近在研究QEMU,读了一些QEMU的源码,因为涉及的东西比较多,找到的资料又都比较破碎,不太完整。所以将最近的成果总结一下。
相比其他的开源软件来说,QEMU源码下面目录比较多,下面就先把这些目录的内容大致整理一下。
docs/ 包含了一些文档,说实话,对初学者来说,读这些文档压根没有头绪
hw/ 包含了所有支持的硬件设备
转载
2024-05-05 16:45:38
106阅读
Qmeu 采用了基于事件驱动的架构,所有的事件都在一个事件循环(event loop)中被处理,系统中默认的事件循环是在main-loop.c 中的主循环(main loop)。我们也可以使用 –object iothread,id=my-iothread自己创建事件循环。Qemu 中的事件架构来源于glib,其实qemu本身就是基于glib的,qemu中有大量的概念来源于glib,所以在学习qe
转载
2024-08-02 11:05:16
49阅读
调试内核模块的方法有很多。最常用的,可能也是上手难度最低的就是使用prinfk打印出相关的调试信息,但是总给人的感觉不够geeek,所以这里描述一种能够使用gdb+qemu来调试内核的方法。启动虚拟机/data/bin/qemu-system-x86_64 -m 6144 -M accel=kvm -cpu host -smp 4 -nographic \
-kernel /root/code/l
转载
2024-05-02 18:27:34
202阅读
首先要保证是在target remote :1234之后设置的断点。然后最好不要使用-enablepoints...
原创
2022-10-14 15:07:33
261阅读
gdb调试方法GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;GDB基本调试命令通过 gcc 的 -g 选项,将调试信息加到可执行文件中gcc -o main main.c -g
gdb mainlist(简写 l): 查看源程序代码,默认显示10行,按回车键继续看余下
l-with-gdb-and-qemu/ This tutorial focuses on the practical aspects of preparing an Ubunt
转载
2022-11-13 00:31:07
268阅读
花点时间来总结一下前阵子的工作。 qemu的底层块设备无疑是我所见过的最复杂的模块了,说得好像我很精通很多模块一样(大雾)。 它的raw镜像格式文件的驱动的核心代码主要都是在raw-posix.c文件下面了看看那里的各种API吧哈哈哈。名字也起的特别的显眼,很容易就让人清楚那个API究竟是干啥用的。 目前阅读代码所能认知到那群维护者所用到的技术有 异步IO(AIO),多线程,协程(cou
转载
2024-08-13 14:38:08
54阅读
Winodws版本编译环境Fedora23下载VSS SDK的setup.exe下载地址提取VSS SDK头文件将下面的代码保存成extract-vsssdk-headers.sh脚本,然后放入setup.exe所在的/home/fedora/Downloads目录,然后执行./extract-vsssdk-headers.sh setup.exe#! /bin/bash
# extract-vs
转载
2024-07-29 10:59:29
64阅读
准备使用qemu的vexpress平台调试学习arm linux。vexpress是cortex-A9四核结构,支持vexpress平台的qemu要1.0后的版本。windows平台较新的qemu版本比较难找,准备自己下载源代码编译。本文记录环境的搭建过程与qemu的编译。1. 安装MinGWwww.mingw.org下载mingw-get-setup.exe
转载
2024-04-03 13:14:29
756阅读