linux 0.11 在 bochs中的调试问题 - 解决缺页中断(page_fault)问题
来源:互联网 发布:java初学者项目案例 编辑:程序博客网 时间:2024/05/22 00:26
linux 0.11 调试时学习linux 0.11一个非常好的方式,但是若没有设置好bochs,会出现page_fault缺页中断,导致不能正常调试。
参考 下面的文章对bochs2.2 进行修改编译后发现并不能解决问题。
{
这个问题困扰了好长时间,bxrc配置文件不使能stub的情况下,可以正常运行,但是一进入到gdb中,就总是出现page_fault,查了好久终于发出原因,是bochs在检测到int14 对应的信号量SIGSEGV时会向gdb发送信号量,而gdb接收到此信号默认的处理就是停止,打印,于是在进入到init函数后的执行过程中,如果执行的文件如sh总是出现页面不在物理页面的情况下,就会报错,而此时应该是正常现象。解决方案如下:
重新安装bochs,修改gdbstub.cc中的
476 if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT ||
477 last_stop_reason == GDBSTUB_TRACE)
478 {
479 write_signal(&buf[1], SIGTRAP);
480 }
481 else
482 {
483 write_signal(&buf[1], 0);
484 }
为
476 if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT ||
477 last_stop_reason == GDBSTUB_TRACE)
478 {
479 write_signal(&buf[1], SIGTRAP);
480 }
481 else if (last_stop_reason == GDBSTUB_STOP_NO_REASON)
482 {
483 write_signal(&buf[1], SIGSEGV);
484 }
485 else
486 {
487 write_signal(&buf[1], 0);
488 }
同时在进入gdb时键入:
handle SIGSEGV nostop noprint ignore
这样gdb接收到此信号时将不停止且不打印处理,使得程序得以继续运行。
}
于是改用bochs 2.6,应用上文介绍的方法进行修改编译后发现时可以忽略掉该信号的;
另外又出现新的问题,在bochs中使用break main命令,发现虚拟机并不会停在main函数,这是个奇怪的问题,于是只能先改用break mem_init了,这是进入main函数后第一个函数,发现可以正常停止,还有就是好像必须在编译目录中启动调试虚拟机才行,要是调试虚拟机不在编译目录启动,就会出问题,不知道什么原因。
gdb也必须在编译目录启动 : gdb -q tools/system,这个必须在编译目录启动!
参考文献:http://www.oldlinux.org/oldlinux/viewthread.php?tid=10761&highlight=
http://oss.lzu.edu.cn/old/modules/newbb/viewpost.php?viewmode=compact&order=DESC&forum=51
https://cms.hit.edu.cn/mod/wiki/view.php?pageid=13
http://www.oldlinux.org/oldlinux/viewthread.php?tid=10837
- linux 0.11 在 bochs中的调试问题 - 解决缺页中断(page_fault)问题
- 解决Bochs调试时软盘无法加载的问题
- 安装bochs问题的解决
- bochs调试linux 0.11内核
- bochs调试linux 0.11内核
- 用bochs调试mbr--安装问题
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- 利用bochs调试linux 0.11内核
- ubuntu 8.04 bochs 调试linux 0.11内核
- ubuntu 8.04 bochs 调试linux 0.11内核 .
- 利用bochs调试linux 0.11内核
- linux 下使用bochs遇到的问题
- linux 下bochs安装和问题
- Linux下使用bochs虚拟机问题(cannot connect to X server)解决
- 解决在飞思卡尔中断向量问题
- hdu 1050 Moving Tables
- 舵机打表生成器
- 如何正确遍历删除List中的元素,你会吗?
- python中的字典
- 初探Tomcat源码 (1) —— Http请求和响应
- linux 0.11 在 bochs中的调试问题 - 解决缺页中断(page_fault)问题
- 用普通类接受表单数据
- Python源码剖析读书笔记
- 初探Tomcat源码 (2) —— Socket
- c c++ register
- 我的Java开发学习之旅------>Java资源的国际化详解
- 框架中的控制器到底是什么玩意
- 在jsp中直接给bean赋值
- python绑定c++程序 --boost python方法