Linux 第三周 学习笔记和实验
姬梦馨
原创博客
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
常用调试参数
r(run) 开始运行程序
c(continue) 继续运行一直到断点停止
b(break) 设置程序断点
l(list) 显示当前行后面的源程序
bt (backtrace) 查看堆栈信息
info 查看各类gdb信息以及环境信息,比如:info break可以查看断点信息
p(print) 打印出变量值;如 p var,会把var变量的值输出
s(step) 单步跟踪,会进入函数内部
n(next) 单步跟踪,不进入函数
finish 跳出函数调试,并打印返回时的信息
clear 清除全部已定义的断点
q(quit) 退出gdb
一: 启动Linux 内核
- cd LinuxKernel/
- qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
内核启动完成后进入menu程序,输入help查看三个命令help、version和quit
使用gdb跟踪调试内核
- qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
- # -S freeze CPU at startup (use ’c’ to start execution)
- # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
另开一个shell窗口
- gdb
- (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
- (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
- (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后
实验总结;
1:start_kernel 相当于普通C程序的main()。
mm/ 内存管理代码。
kernel/ 与进程调度有关;Linux内核的核心代码在该目录中。
2.全局变量init_task
其中有一个全局变量init_task,即手工创建的PCB,0号进程即最终的idle进程。
3.trap_init
trap_init涉及到中断,初始化一些中断向量
set_intr_gate:设置中断门
set_system_trap_gate:系统陷阱门SYSCALL VECTOR。
4. mm_init mm_init:内存管理模块初始化
sched_init sched_init:调用进程调度初始化
rest_init :kernel_init:创建1号进程 第一个用户态进程:init_process,1号进程,找默认路径下的程序作为1号进程 kthreadd:内核线程,用来管理系统资源
当系统没有进程需要执行时就调度idle进程,即0号进程,一直存在。
5、qemu相当于打开一个虚拟机。
6.百度的一些GDB 源码查看
- list <linenum> -- 显示程序第 linenum 行的周围的源程序.
- list <function> -- 显示函数名为 function 的函数的源程序.
- list <filename:linenum> -- 哪个文件的哪一行.
- list <filename:function> -- 哪个文件中的哪个函数.
- list <offset> -- 当前行号的正/负 offset 偏移量那那行.
- list -- 显示当前行后面的源程序.
- list - -- 显示当前行前面的源程序.
- list <first>, <last> -- 显示从 first 行到 last 行之间的源代码.若无 first 则显示从当前行到 last 之间的源代码.
- set listsize <count> -- 设置一次显示源代码的行数.
- show listsize -- 查看当前listsize的设置.
Linux 第三周 学习笔记和实验的更多相关文章
- 《Linux内核分析》第三周学习笔记
<Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...
- Linux内核分析第三周学习笔记
linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux第三周学习总结——构造一个简单的Linux系统MenuOS
第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- Linux内核分析——第三周学习笔记20135308
第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20165326 java第三周学习笔记
纸质学习笔记 代码托管
- 20135320赵瀚青LINUX内核分析第三周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...
- Linux内核分析——第三周学习笔记
20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...
- 20179223《Linux内核原理与分析》第三周学习笔记
测试3的实验: 1. 用gcc -g编译vi输入的代码 2. 在main函数中设置一个行断点 3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点 4. 提交调 ...
随机推荐
- 题解 P1378 【油滴扩展】
题面 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴.那么 ...
- VS2017C++单元测试
0.欢迎食用 希望对点进来的你有所帮助. 全文记流水账,内心想法如示例项目名称. 1.建立需测试的项目 新建项目 正常书写.h 和.cpp文件 2.新建单元测试 右击解决方案 -> 添加 -&g ...
- 团队作业——Beta冲刺1
团队作业--Beta冲刺 冲刺任务安排 杨光海天 今日任务:开会讨论下,Beta阶段主要的冲刺内容 明日任务:根据冲刺内容,具体分配个人任务,对于冲刺内容做准备 吴松青 今日任务:跟新组员熟悉下,联络 ...
- js指定范围随机整数
js获取指定范围内随机整数,例如 6-10 (m-n) 计算公式: Math.floor(Math.random()*(n-m))+m // 6-10随机数,用循环得出一组测试随机数 var str ...
- js 毫秒转换为标准时间
function dateForm(time){ var unixTimestamp = new Date( 1477386005*1000 ); commonTime = unixTimestamp ...
- JS中 map, filter, some, every, forEach, for in, for of 用法总结
本文转载自:http://blog.csdn.net/gis_swb/article/details/52297343 1.map 有返回值,返回一个新的数组,每个元素为调用func的结果. let ...
- swift的多态
协议多态: 函数式编程多态:高阶函数的多态性: 泛型多态:泛型的基于约束编程: 共同点:相同的接口,不同的行为:
- 基于duxshop遍历无限级分销用户的纵向递归
/**获取基准数据 * @param $ids 父id 多个逗号分隔 * @return array */ public function saleBase($ids) { $data=$this-& ...
- springbatch入门练习(第一篇)
先搞懂几个概念 Job Respository: 作业仓库,负责Job.Step执行过程中的状态保存 Job launcher: 作业调度器,提供执行Job的入口 Job:作业,由多个step组成,封 ...
- C++之数据类型
C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C++中的数据类型 C++中的数据类型分为两大类:基本数据类型和非基本数据类型,如图1.1所示. 图1.1 C++ ...