① 电脑的CPU内核怎么调试
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。下面,就让我们一起来看看如何对虚拟内存进行设置吧。
虚拟内存的设置
对于虚拟内存主要设置两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的操作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。
找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,弹出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。
调整分页位置
Windows 9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386.swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386.swp调到别的分区中,方法是在记事本中打开System.ini(C:\Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin386.swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386.swp”,如没有上述语句可以直接键入即可。
而对于使用Windows 2000和Windows XP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。
或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。
如果你的硬盘空间够大,你也可以自己设置虚拟内存,具体步骤如下:右键单击“我的电脑”→属性→高级→性能 设置→高级→虚拟内存 更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。一般来说,虚拟内存为物理内存的1.5倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。
44》虚拟内存使用技巧
对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:
(1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是"无",则将页面文件大小设置为2MB左右,如果采用"核心内存存储"和"完全内存存储",则将页面文件值设置得大一些,跟物理内存差不多就可以了。
小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件 (Memory.dmp),从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。
(2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的
页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
(3)其它硬盘分区不设置任何页面文件。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。
小提示:
允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB
.
② 如何调试linux内核
kgdb 调试
在内核配置选项里有 Kernel hacking---->
这一项,打开 再选择你需要的功能。
③ xweb内核如何调试
虚拟化环境搭建,二进制库文件,操作系统的启动初始化文件。虚拟化的环境搭建,选择的是qemu这款堪称虚拟化的鼻祖软件,虽然因为连芯片也一起虚拟导致运行速度变慢,但它也结合了真实芯片辅助加速的KVM,支持其他芯片架构的功能简直就是交叉编译的神器。
④ 怎么激活和关闭Windows内核调试器
修复此问题 禁用内核调试,在 Visual Studio 中调试。- 或 -使用内核调试器而不是 Visual Studio 进行调试。- 或 -在内核调试器中禁用用户模式异常。在当前会话中禁用内核调试 在命令提示处,键入: 复制代码 Kdbgctrl.exe -d对所有会话禁用内核调试 (Windows Vista) 在命令提示处,键入: 复制代码 bcdedit /debug off 重新启动计算机。对所有会话禁用内核调试(其他 Windows 操作系统) 在系统驱动器(通常为 C:\)上查找 boot.ini。boot.ini 文件可能是隐藏文件并且是只读的。因此,必须使用下面的命令才能看到它: 复制代码 dir /ASH用记事本打开 boot.ini 并移除下列选项: 复制代码 /debug /debugport /baudrate重新启动计算机。使用内核调试器进行调试 如果内核调试器已挂钩,将显示一条消息,询问是否要继续调试。单击按钮继续。您也许会收到 User break exception(Int 3)。如果出现此情况,请键入下面的内核调试器命令以继续调试:gn
⑤ 电脑如何调整播放内核
调整内核:
当我们想要调试操作系统时,可以修改操作系统启动参数,方法有二,一是在系统启动时F8下,选择调试模式,二是,在启动后,修改启动配置参数。Windows xp /2003 使用 boot.ini 存储启动参数,Windows Vista / 7使用BCD存储启动参数。
对于Windows xp /2003 我们可以直接修改boot.ini 添加调试参数,也可以使用bootcfg /debug 命令添加。
对于调试远程内核,我们可能要使用串口,在boot.ini中指定操作系统条目后,添加调试参数 /debug /port=com1 /baudrate=115200。在调试器WinDbg中也要指定相同的波特率参数,否者无法正常通信。
使用虚拟机调试,我们一般没有串口,尤其是笔记本电脑,这时候怎么操作呢:
1、使用虚拟串口添加工具 vpsd 6.9(在前几篇日志中有对此软件的介绍)在电脑中添加一对调试串口。如com1,com2。
在虚拟机欲调试操作系统的硬件配置中指定调试串口com1.,注意取消“等待调制解调器打开串口”,否者串口无法正常打开。
在调试器Windbg中指定使用串口com2,其他参数保持与启动配置参数相同。
⑥ 如何调试0.11版的linux内核
编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译,会出现下面的错误
In file included from /usr/include/features.h:378,
from /usr/include/assert.h:37,
from ../../../include/tinyxml/tinystr.h:42,
from ../../../src/tinyxml/tinystr.cpp:32:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录
这时候需要安装 gcc所有支持文件 sudo apt-get install gcc-multilib
将会安装下列额外的包:
cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1
⑦ 如何对win7 进行系统内核调试
windbg的设置与XP一样
在WIN7或者Vista里的设置为:
在以管理员身份运行的 cmd 下键入并执行命令:(每行一条命令)
1
2
3
bcdedit /bootdebug ON
bcdedit /debug ON
bcdedit /dbgsettings serial baudrate:115200 debugport:1bcdedit / {current} /d DebugEntrybcdedit /displayorder {current} {d3d5f290-f64b-11de-a86d-aba3805c5629}bcdedit /debug {d3d5f290-f64b-11de-a86d-aba3805c5629} ON
⑧ 有没什么工具可以调试Linux内核的
qemu模拟器,内带gdbserver,可以很方便的源码调试。
kdb,kgdb之类的也是调试器,最简单的就是printk看看
⑨ 怎么用gdb和bochs调试内核
1. 安装 Bochs
编译 Bochs 要加入 --enable-gdb-stub 选项:
$ ./configure --enable-gdb-stub
$ make
$ sudo make install
2. 生成内核
修改 Makefile
将 CFLAGS 加入 -g 选项,以便加入调试符号
CFLAGS = -I include/ -I include/sys/ -c -g -fno-builtin -Wall
由于加了调试符号之后 kernel.bin 太大,所以将其 strip 之后在拷贝入磁盘映像
将
sudo cp -fv kernel.bin /mnt/floppy
改为:
strip kernel.bin -o kernel.bin.stripped
sudo cp -fv kernel.bin.stripped /mnt/floppy/kernel.bin
如此一来,在 bochs 虚拟机里面执行的 kernel.bin 是 strip 之后的,过会儿用来交给 gdb 的 kernel.bin 是带调试符号的。
编译内核
$ make image
3. 启动 Orange'S
修改 bochsrc
加入这么一行:
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
运行
$ bochs -q -f bochsrc.gdb # 注意必须用加入了 --enable-gdb-stub 编译选项的 bochs
4. 用 gdb 调试
打开另一控制台,运行 gdb
$ gdb
在 gdb 中调试
(gdb) file kernel.bin ← 注意这里的 kernel.bin 必须是加入了 -g 编译选项的带调试符号的内核
Reading symbols from /home/forrest/local/src/osfs/oranges/phases/chapter11/a/kernel.bin...done.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x0000fff0 in ?? ()
(gdb) b start.c:26
Breakpoint 1 at 0x14a6: file kernel/start.c, line 26.
(gdb) c
Continuing.
Breakpoint 1, cstart () at kernel/start.c:26
26 disp_str("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n-----\"cstart\" begins-----\n");
(gdb) n
29 memcpy( &gdt, /* New GDT */
(gdb)
.gdbinit
由于每次都需要执行 file kernel.bin 和 target remote localhost:1234 两个命令,所以可以建立一个 .gdbinit 文件,比如:
$ vi .gdbinit
file kernel.bin
target remote localhost:1234
set disassembly-flavor intel
b start.c:26
b kernel/main.c:183
这样下次直接执行 gdb 这个文件里的命令即可自动执行。
.gdbinit 可以做许多事,比如上例中就加了俩断点。
在 .gdbinit 中自定义函数
在 .gdbinit 中可添加自定义函数,比如:
define lsproc
set $count = 16
set $idx = 0
printf "The first %d TASKS/PROCS:\n",$count
while($idx < $count)
if(proc_table[$idx].p_flags != 0x20)
if($idx < 5)
printf "[%2d] TASK: %8s",$idx,proc_table[$idx].name
printf "\t p_flags: %8Xh\n",proc_table[$idx].p_flags
else
printf "[%2d] PROC: %8s",$idx,proc_table[$idx].name
printf "\t p_flags: %8Xh\n",proc_table[$idx].p_flags
end
end
set $idx++
end
end
这样在 gdb 中执行一个 lsproc,便可打印出所有进程的信息,巨方便:
(gdb) lsproc
The first 16 TASKS/PROCS:
[ 0] TASK: TTY p_flags: 4h
[ 1] TASK: SYS p_flags: 4h
[ 2] TASK: HD p_flags: 4h
[ 3] TASK: FS p_flags: 4h
[ 4] TASK: MM p_flags: 4h
[ 5] PROC: INIT p_flags: Ch
[ 6] PROC: TestA p_flags: 0h
[ 7] PROC: TestB p_flags: 0h
[ 8] PROC: TestC p_flags: 0h
[ 9] PROC: INIT_9 p_flags: 4h
[10] PROC: INIT_10 p_flags: 4h
⑩ 如何调试操作系统内核及引导程序
Linux内核调试方法
kdb:只能在汇编代码级进行调试;
优点是不需要两台机器进行调试。
gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核函数。
kgdb:能很方便的在源码级对内核进行调试,缺点是kgdb只能进行远程调试,它需要一根串口线及两台机器来调试内核(也可以是在同一台主机上用vmware软件运行两个操作系统来调试)
printk() 是调试内核代码时最常用的一种技术。在内核代码中的特定位置加入printk() 调试调用,可以直接把所关心的信息打打印到屏幕上,从而可以观察程序的执行路径和所关心的变量、指针等信息。 Linux 内核调试器(Linux kernel debugger,kdb)是 Linux 内核的补丁,它提供了一种在系统能运行时对内核内存和数据结构进行检查的办法。Oops、KDB在文章掌握 Linux 调试技术有详细介绍,大家可以参考。 Kprobes 提供了一个强行进入任何内核例程,并从中断处理器无干扰地收集信息的接口。使用 Kprobes 可以轻松地收集处理器寄存器和全局数据结构等调试信息,而无需对Linux内核频繁编译和启动,具体使用方法,请参考使用 Kprobes 调试内核。
/proc文件系统
在 /proc 文件系统中,对虚拟文件的读写操作是一种与内核通信的手段,要查看内核回环缓冲区中的消息,可以使用 dmesg 工具(或者通过 /proc 本身使用 cat /proc/kmsg 命令)。清单 6 给出了 dmesg 显示的最后几条消息。
清单 6. 查看来自 LKM 的内核输出
[root@plato]# dmesg | tail -5
cs: IO port probe 0xa00-0xaff: clean.
eth0: Link is down
eth0: Link is up, running at 100Mbit half-plex
my_mole_init called. Mole is now loaded.
my_mole_cleanup called. Mole is now unloaded.
可以在内核输出中看到这个模块的消息。现在让我们暂时离开这个简单的例子,来看几个可以用来开发有用 LKM 的内核 API。
调试工具
使用调试器来一步步地跟踪代码,查看变量和计算机寄存器的值。在内核中使用交互式调试器是一个很复杂的问题。内核在它自己的地址空间中运行。许多用户空间下的调试器所提供的常用功能很难用于内核之中,比如断点和单步调试等。