1.虚拟化基础-10.qemu的调试-《计算机知识》

admin 2025-11-02 22:29:50 系统网络 来源:ZONE.CI 全球网 0 阅读模式
  • 学习目标
  • qemu-mointor
    • 如何使用mointor模式
  • 利用gdb调试qemu
  • qemu的打印
  • qemu的trace
    • 编译
    • 使用

    学习目标

    问题:

    • 在用qemu + libvirtd中,是如何调试的?如何获取日志信息?如何将qemu的消息打印出来?
    • 在qemu系统中,如何去调试?在libvirt中,又如何去调试追踪?

    顺便贴下编译qemu的方法

    1. sudo apt-get install -y libpixman-1-dev # 需要依赖 pixman
    2. sudo apt-get install -y build-essential libepoxy-dev libdrm-dev libgbm-dev libx11-dev libvirglrenderer-dev libpulse-dev libsdl2-dev
    3. sudo apt-get install -y libgusb-dev # libusb需要
    4. # spice 安装 https://blog.csdn.net/clydezhou/article/details/7418782
    5. # opengl mesa 安装
    6. # 自己用的调试版本
    7. git clone git://git.qemu.org/qemu.git
    8. git checkout -b v4.0.0 v4.0.0
    9. make clean
    10. ./configure --prefix= \
    11. --enable-kvm \
    12. --enable-trace-backends=log \
    13. --disable-strip \
    14. --enable-debug \
    15. --enable-debug-info \
    16. --enable-libusb \
    17. --enable-usb-redir \
    18. --enable-curl \
    19. --enable-sdl \
    20. --enable-opengl \
    21. --enable-virglrenderer \
    22. --enable-system \
    23. --enable-modules \
    24. --audio-drv-list=pa \
    25. --enable-vhost-net \
    26. --enable-vnc \
    27. --target-list=x86_64-softmmu
    28. root@inno-MS-7B89:qemu# /usr/local/bin/qemu-system-x86_64 --version
    29. QEMU emulator version 4.0.0 (v4.0.0-dirty)

    注:在编译qemu时最好把所有debug信息都打开

    1. --enable-trace-backends=log \
    2. --disable-strip \
    3. --enable-debug \
    4. --enable-debug-info \

    qemu-mointor

    相关参考:

    • qemu monitor protocol简介 和 QMP wiki
    • QEMU Monitor 命令官方 和 QEMU monitor控制台使用详解

    如何使用mointor模式

    使用qemu-system-xxx命令创建的虚拟机,可通过以下方式进入到mointor模式

    1. ctrl+alt+1 虚拟机模式
    2. ctrl+alt+2 qemu调试模式, 可通过 info xxx查看虚拟机状态

    在libvirtd如何使用mointor

    1. virsh qemu-monitor-command --hmp domain_name help # 查看支持命令
    2. # 比如 domain_name=ubuntu18.04
    3. # virsh qemu-monitor-command --hmp ubuntu18.04 info # 进入到mointor的info命令

    注:

    • qemu monitor protocol 简称qmp,是以json为格式的一种协议
    • qmp和hmp的区别是qmp命令使用的是json格式,hmp直接使用命令
    • qmp本质是一个本地的unix socket。qemu是server端,libvirt是client端

    利用gdb调试qemu

    注:这里不是使用gdb调试 qemu中的系统,而是用gdb来调试qemu

    1. gdb --tui --args qemu-system-......
    2. gdb --tui --args /opt/x86_64/qemu-x86-bin/bin/qemu-system-x86_64 -smp 2 -cpu host -enable-kvm -m 512M -kernel linux/arch/x86/boot/bzImage \
    3. -hda ./x86_64.img -hdb ./Freeze.img -nographic \
    4. -append "root=/dev/sda rw rootfstype=ext4 console=ttyS0 init=linuxrc loglevel=8"

    qemu的打印

    qemu的trace

    相关参考

    • 官方:tracing.txt
    • Qemu Trace系统使用
    • qemu trace debug

      编译

      qemu需要带trace功能,则configure中需要使能trace 后端系统
      1. --enable-trace-backends=log # 参考可选为 log / simple(默认值)

    使用

    1. # 添加你想要trace的event
    2. $ cat /tmp/events
    3. virtio_blk_req_complete
    4. virtio_blk_handle_write
    5. # 启动虚拟机带入trace参数
    6. -trace events=/tmp/events,file=trace.bin
    7. /tmp/events就是要跟踪的event,而trace.bin就是trace产生的文件,不能直接读,而要通过工具来读。
    8. # 通过专业工具去解析 https://github.com/qemu/qemu/tree/master/scripts/tracetool
    9. python3 simpletrace.py trace-events trace.bin
    01-shell脚本介绍-《shell脚本》 系统网络

    01-shell脚本介绍-《shell脚本》

    一、shell脚本是什么二、为什么要学shell,而不是其他计算机语言三、学习这门课程的优势四、学了能干什么五、学习什么内容六、学习的技巧七、成长路径八、学习环
    评论:0   参与:  12