O0的内核

简介: 新手来说, 调试内核c代码经常上下乱跳, 但是O0又无法通过编译, 做了一个实验, 对于所有的c文件, 先尝试O0, 如果错误的话, 用O1来编译, 但是最后有一些符号找不到, 因为O0会多调用一些函数, 在这些问题都解决了之后, 最后居然报出, 某个section太大了, 看来这个问题很复杂 下面是一个简单得方法, 不要一口气把所有的文件都O0, 需要调试哪个, 把具体文件O0就行了

新手来说, 调试内核c代码经常上下乱跳, 但是O0又无法通过编译, 做了一个实验, 对于所有的c文件, 先尝试O0, 如果错误的话, 用O1来编译, 但是最后有一些符号找不到, 因为O0会多调用一些函数, 在这些问题都解决了之后, 最后居然报出, 某个section太大了, 看来这个问题很复杂

下面是一个简单得方法, 不要一口气把所有的文件都O0, 需要调试哪个, 把具体文件O0就行了

make vmlinux KCFLAGS="-g3 -O1 -Wno-maybe-uninitialized" -j100 CFLAGS_page_alloc.o='-O0 -ftree-ter'

-O0 -ftree-ter就是把优化开到最小, 效果好很多, 不再上下乱跳了

那么这个是怎么找到的呢
就是把O1对应的所有flag都加上, 然后一个个去掉, 看能否通过编译, 获得最小集

gcc -O1 -Q --help=optimizers |grep enable |awk '{print $1}'

目录
相关文章
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
55271 0
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
879 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
10月前
|
缓存 运维 Linux
深入探索Linux内核:CPU拓扑结构探测
【10月更文挑战第18天】在现代计算机系统中,CPU的拓扑结构对性能优化和资源管理至关重要。了解CPU的核心、线程、NUMA节点等信息,可以帮助开发者和系统管理员更好地调优应用程序和系统配置。本文将深入探讨如何在Linux内核中探测CPU拓扑结构,介绍相关工具和方法。
175 0
perf_event_open学习 —— 缓冲区管理
perf_event_open学习 —— 缓冲区管理
|
存储 JavaScript 开发者
【Docker】什么是Docker镜像?
【4月更文挑战第20天】【Docker】什么是Docker镜像?
|
Linux 网络安全 数据安全/隐私保护
VsCode SSH远程设置不用重复输入密码
VsCode SSH远程设置不用重复输入密码
|
编译器 存储 网络协议
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
1027 1
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
|
Linux 索引
Linux驱动中常用的一些接口函数(经典)
Linux驱动中常用的一些接口函数(经典)
305 0
|
Ubuntu 虚拟化 数据安全/隐私保护
Ubuntu如何在VMWare里面屏幕自适应
Ubuntu如何在VMWare里面屏幕自适应
528 0
|
Unix Linux Python
Python---多进程与多线程笔记
1.多进程与多线程介绍 / 区别 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。
3465 0