热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

clion调试php,CLion调试LinuxKernel

1.编译Kernelmenuconfig中按“”是可以搜索的,例如要找“CONFIG_GDB_SCRIPTS”,按“”输入“GDB_SCRIPTS”。q

1. 编译Kernel

menuconfig中按“/”是可以搜索的,例如要找“CONFIG_GDB_SCRIPTS”,按“/”输入“GDB_SCRIPTS”。

qemu启用了virtio的话,记得选上VIRTIO_BLK和VIRTIO_NET。

2. QEMU

2.1 关闭KVM

关闭KVM,关闭KVM,关闭KVM,重要的事情说三次!不然step by step的时候,会无限跳到arch/x86/kernel/apic/apic.c的sysvec_apic_timer_interrupt。要关闭KVM,运行qemu时去掉–enalbe-kvm参数,用libvirt的话,domain的type值置qemu:

Default

...

1

2

3

...

2.2 启用gdbserver

运行QEMU时加上参数-s,或者通过“-gdb tcp::端口号”参数手动指定端口,libvirt xml的设定如下:

Default

...

...

1

2

3

4

5

6

7

...

...

或者:

Default

...

...

1

2

3

4

5

6

7

8

...

...

3. CLion

点击右上角的“Select Run/Debug Configuration”,添加个GDB Remote Debug:

f1d7a0c2f818f073b4f86b624d3d625f.png

‘targer remote’ args填入qemu监听的gdbserver IP和端口,Symbol file选编译出的vmlinux(在源码根目录下)。

5. 调试

断点的设定跟平常无异。

启动qemu,按Debug按钮开始调试:6bcf1942c2b7ed3940467ed77e44413e.png

Debug标签页,pause后可以调用gdb console,如果kernel在运行,点左侧的“| |”即可:

16cc0617c30e85927a0326608c8498fe.png

栈、变量以及源码通过IDE浏览会直观许多:

75284a681b295cde2551b69fc98d0ffa.png

6.

提醒下:通过-O0参数是无法成功编译Kernel的。

gdb console通过disassemble可以反汇编当前函数:

4da2eb22cee55e79cd462a1e39ab1a02.png

优化后的汇编其实不太好跟实际写的C代码联系起来,如果实在不行,就printk吧……



推荐阅读
author-avatar
球球小白痴_693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有