代码改变世界

Cosmos的汇编级调试器(翻译)---- .net/C#开源操作系统学习系列七

2011-09-21 17:52  Hundre  阅读(1881)  评论(1编辑  收藏  举报

英文原文地址:http://www.codeproject.com/KB/cs/CosmosAsmDebuggerPreview.aspx

 

前言

一些用户写信给我,问我要一些关于新Cosmsos X86 汇编级调试的信息。因为在这方面比较有兴趣,我写了这篇简短的文章。Cosmos已经有了一个集成在Visual
Studio
中用于调试C#VB.NET代码的调试器。尽管如此,为了调试X86汇编,用户需要依靠GDBCosmos也包括了部分GDB前端,但是在ILC#之间的链接阶段这些会丢失并且需要大量的mental parsing(不知道啥意思).
最后,我们希望扩展我们新的汇编调试器,这样以后将很少用到或者GDB只有在一些很深入的调试如debug
stub
才会使用。这个X86调试器允许你在C#中设置断点,然后查看IL代码和X86汇编以及寄存器。

Cosmos是什么?

…………………此处省略文字若干,这部分内容已在其他系列文章中列出,这里就不写了)

使用汇编调试器

1.      打开一个Cosmos工具窗口

 

目前(翻译这篇文章的时候最新更新包为83843),只有汇编和寄存器窗口能工作。栈和帧(frame)窗口将在接下来几天完成。我们也将添加其他的直接内存注入窗口,最后将实现汇编级的单步调试。

 

现在,在C#代码里面设置一个断点,然后运行你的“操作系统”。如果你是使用默认的设置,VMWare将和你的系统一起出来,同时Visual
Studio
将会停在你的断点处。

 

你将会注意到“local watch window(本地窗口?)是可以工作的。这是 Cosmos Visual Studio调试器的一部分。在右边出现的两个汇编调试窗口也是新的调试窗口。汇编窗口显示出这一行对应的ILX86的汇编代码。如果有更多的断点,将会使用单步调试(stepping)并且汇编调试器窗口每次都会更新。注意:在截图中有个小BUG,在汇编窗口中只显示出一个IL操作符。它应该是这样子的

System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000001:       
call DebugStub_TracerEntry        
; [Cosmos.IL2CPU.X86.IL.Ldc_I4]        
push dword 0x0        
; Stack contains 1 items: (4

System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000002:        
; [Cosmos.IL2CPU.X86.IL.Stloc]        
; EBPOffset = 4        
pop dword EAX        
mov dword [EBP + -4], EAX        
; Stack contains 0 items: ()

在刚开始的寄存器窗口显示了X86
寄存器。最近更新的值将会用红色标识出来。在监控改变上这很有用。

为什么需要一个汇编级的调试器。

既然COSMOS使用C#来写的,为什么我们需要一个如此底层的调试?我们觉得很多用户可能只需要用到C#调试器。尽管如此,汇编级调试器对工作在编译器上的用户或者在直接和硬件交互的调试中的用户来说是一个很大的帮助。