最近需要给libvirt增加一个新feature,该feature基于qemu的最新代码。

我需要关心的: http://wiki.qemu.org/Features/Migration

需要自己编译qemu,登录qemu的 官网,做一下总结。

clone qemu 代码: [org_ref]:  http://wiki.qemu.org/Download

配置编译过程如下:  [org_ref]:  http://wiki.qemu.org/Hosts/Linux

1. qemu linux用户态,模拟测试

[org_ref]:  http://wiki.qemu.org/Testing  介绍测试的步骤,还提供了各种平台的镜像。

[guest img]:  http://wiki.qemu.org/download/linux-0.2.img.bz2   这个事x86的一个镜像,8M。

$ wget  http://wiki.qemu.org/download/linux-0.2.img.bz2  -o ~/linux-0.2.img.bz2

$ cd ~;  bzip2 -d ~/linux-0.2.img.bz2

2. 调试qemu本身

[org_ref]:  http://wiki.qemu.org/Features/Tracing   Stefan 维护的。跟大家一年入职IBM的,现在已经expert了。

[org_ref]:  http://wiki.qemu.org/Debugging_with_Valgrind

ubuntu 11.10 安装systemtap

使用gdb:

$ vi  command.gdb

set breakpoint pending on
file x86_64-softmmu/qemu-system-x86_64

#file bin/debug/native/x86_64-softmmu/qemu-system-x86_64
handle SIGUSR2 noprint nostop
handle SIGUSR1 noprint nostop
break type_init
break main_loop
break vl.c:2842
run ~/linux-0.2.img -vnc 0.0.0.0:1

$ gdb  -x command.gdb

gdb 自定义command

3. qemu + GDB 调试 guest 内核。

[org_ref]:    http://wiki.qemu.org/Documentation/Debugging

官网 英文没有 具体步骤。 介绍了方法。

具体步骤, 网上中文的文章很多。

[ref]:  http://bbs.chinaunix.net/thread-1973646-1-1.html

http://blog.chinaunix.net/uid-20778443-id-94577.html

http://blog.csdn.net/iamljj/article/details/5655169  步骤详细。

大概的步骤如下:

1. 安装QEMU,安装个LINUX虚拟机。被调试的是虚拟机。
2. 重新编译虚拟机里LINUX KERNEL,打开DEBUG相关设置,具体设置可以看LDD3的第四章
3. 用QEMU 启动被调试的虚拟机的时候,加上 -S 参数。注意是大写S,表示虚拟机一启动起来就先暂停(SUSPEND).
4. 选中QEMU那个虚拟机,按 CTL+ALT+2切换到控制窗口,然后输入
gdbserver 1234. 意思是启动GDBSERVER,同时端口为1234。然后这时可以按c, 让QEMU继续运行。然后按CTRL+ALT+1 切换回虚拟机本身的>显示。
5. 在HOST(主机)上面启动一个GDB。如果要看LINUX KERNEL SYMBOL的话,最好在和虚拟机里编译LINUX KERNEL同样的路径上放上KERNEL>的源码。
在启动GDB 的时候,用 gdb vmlinux 来启动。其中的vmlinux 是没压缩过,并且带符号表的格式,大小应该为30M 以上。
6. 在GDB 里,输入 target remote localhost:1234。 这里的1234是和QEMU里的设置相对应。
7. 回车,这时虚拟机应该被停了下来,同时在GDB里会显示一些随机的源码,显示GDB停在了什么地方。
8. 这时,在GDB里,可以用b xxx设置断点,然后按c继续运行。
9. 如果虚拟机已经运行了一半,这时想停下来加断点,可以在GDB里按CTRL+C.

刘军卫 建议 使用: insight 调试。 这哥们移动研究院的, 很活跃,写了很多qemu分析的文章

[insight 调试]: http://blog.163.com/jianlizhao%40126/blog/static/173251163201222193227915/

开发者关心的:

[org_ref]:  http://wiki.qemu.org/Contribute/StartHere

[org_ref]:  http://wiki.qemu.org/Documentation/GettingStartedDevelopers

调试qemu的更多相关文章

  1. GDB调试qemu源码纪录

    今天介绍下如何利用gdb调试qemu 1.首先获取qemu源码 获取地址:https://www.qemu.org/ 2.编译安装qemu 进入qemu目录 ./configure --enable- ...

  2. linux内核调试+qemu+eclipse【转】

    本文转载自:https://blog.csdn.net/WANG__RONGWEI/article/details/54922727 一.调试环境: 在ubuntu16.04下,在虚拟机里边运行的ub ...

  3. qemu 源码调试

    1:下载最新的QEMU源码 git clone https://github.com/qemu/qemu.git 2:对qemu进行编译 ./configure --prefix=/usr --lib ...

  4. 用 gdb 和 qemu 调试 grub

    因为qemu内置了gdbserver,所以我们可以用gdb调试qemu虚拟机上执行的代码,而且不受客户机系统限制. 以下内容是我调试 grub 0.97 时的一份笔记. 准备 qemu, gdb,以及 ...

  5. QEMU+GDB调试方法

    两年前调试usb/ip开源项目时,就曾用虚拟机远程调试过Windows和Linux系统内核,当时在VMware Workstation上创建两个虚拟机进行调试,也没有记录下如何配置调试,只是大体的还记 ...

  6. 理解 QEMU/KVM 和 Ceph(2):QEMU 的 RBD 块驱动(block driver)

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  7. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  8. 20135220谈愈敏Blog8_进程的切换和系统的一般执行过程

    进程的切换和系统的一般执行过程 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-100002 ...

  9. 20135220谈愈敏Blog7_可执行程序的装载

    可执行程序的装载 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. ...

随机推荐

  1. lua学习笔记(2)-常用调用

    assert(loadstring("math.max(7,8,9)"))dofile("scripts/xxx.lua")math.floor()math.r ...

  2. 转发:使用sql命令查询视图中所有引用的基础表

    转自:使用sql命令查询视图中所有引用的基础表 使用sql命令查询视图中所有引用的基础表 之前有写过如何利用sql查询视图中所有引用的表发现这个方法并不能查出视图中所有的基础表,如果视图中有嵌套视图就 ...

  3. 如何编写Dll(用命令行编译加深理解)

    DLL的优点 简单的说,dll有以下几个优点: 1)      节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内 ...

  4. delphi 发送Windwos消息控制按钮(控制计算器里的某一个按钮)

    procedure TfrmMain.btnSendClick(Sender: TObject); var hCalc, h1: Cardinal; begin WinExec('calc', SW_ ...

  5. httpClient download file(爬虫)

    package com.opensource.httpclient.bfs; import java.io.DataOutputStream; import java.io.File; import ...

  6. 云服务和虚拟机的预留 IP 地址

    大家好! 我很高兴地向大家宣布,云服务和虚拟机的预留 IP 地址将自 2014年 5月 12日起正式发布.在这篇博客中,我们将演示如何管理预留 IP.将预留 IP 与云服务和虚拟机关联.定价模型和一些 ...

  7. VC维度

    ​由vc bound可以知道: $P(\exists h\in H~s.t~|E_{in}(h)-E_{out}(h)|>\epsilon)\\ \leq 4M_H(2N)exp(-\frac{ ...

  8. 在JavaScript的数组中进行数组元素查找和替换(JS的indexOf等)

    <html> <head> <title> Extend JavaScript Array Method </title> <script lan ...

  9. [置顶] java web 动态服务器

    写了一个java web 动态服务器,主要通过内部类来实现,动态类使用了外部类,采用了 classforname 实例化,动态类的构造方法不能带参数, 效果都出来了,分享给有需要的 朋友.判断做的不够 ...

  10. sdut 3-5 学生成绩统计

    3-5 学生成绩统计 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目练习能够掌握对象数组的使用方法,主要是对象数组中数据的输入输出操作. 设计 ...