摘要:时间同步算法的应用非常广泛。譬如在Unix系统里面,Make命令,只是用来编译新修改过的代码文件。Make命令使用运行的客户端的时钟来决定哪个文件是被修改过的。但是,如果把代码放到文件服务器上面,而运行make命令的主机与文件服务器的时间不同的时候,make命令就有可能工作不正常。譬如玩dota的时候,几个客户端需要一个同步过的时钟来使每个人的画面保持一致。、再譬如PC电脑同步服务器上面的时间可以...
阅读全文
摘要:首先在SSCLI2.0源代码的\clr\src\vm\comutilnative.cpp文件中的GCInterface类的CollectGeneration方法上下个断点,该宏方法主要实现了一个调用转换: /*==============================CollectGeneration===============================**Action: Collect...
阅读全文
摘要:key words:DPWS,嵌入式设备,WebService,Http,嗅探,Micro Framework。。 为了实现一个嵌入式设备和一个host在IIS server上面的WebService交互,使用了MF3.0里面的DPWS方法。不过这个东西实在是Hard to use。今天就记录下使用的过程中的第一步,首先分析一个Client和一个Webservice是如何交互的,发送的数据流的格式...
阅读全文
摘要:在3.0的Micro Framework中,咱可以使用SPI(Serial Peripheral Interface)来和外围设备进行通信了。SPI是一种串口总线系统,和I2C,CAN,USB一样。 使用SPI来进行串口通信中,从设备的通讯模式如下: 两个数据口,一个进一个出,另外两个控制口。在标准SPI通信模式中,设备分为master设备和slave设备。Master设备决定clock信号和线...
阅读全文
摘要:以前build过几次sscli2都成功了,这次换了个新的环境,没想到出了一大堆的问题。折腾了半天,最终搞定,把解决问题的过程和方法都记录下来。首先说说build的过程中参考过的链接和资源。1. 首先就是sscli自带的文档:Building the Shared Source CLI 2.0 and C# 2.0 Source Tree(\sscli20\docs\buildtools\build...
阅读全文
摘要:本文介绍两种使用Windbg在Managed App中设置断点的方法。一种是在live Debug的时候,attach到了Process之后。另外一种是动态调试的时候,如何给几个模块的特定方法下一个断点。 使用Windbg在Native Code里面下断点是比较方便的,bp加上一个内存地址就可以做到。但是在托管的时候给一个方法下一个断点稍微有点麻烦。因为Windbg是一个native Debug...
阅读全文
摘要:下午,msn上面一个朋友发了一个dump文件过来,说是Web服务器的CPU使用率在100%,找不到问题在什么地方,让帮忙看看,遂让把dump文件传过来,找找问题出在哪儿。 Framework2.0,Windows 2k的OS。 加载了Dump文件之后,接着加载2.0版本的SOS扩展调试模块: .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\S...
阅读全文
摘要:一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构。在这篇文章里,我不去介绍windows下PE文件的具体格式,也不去介绍一个托管或者是非托管PE文件的加载运行方式,更加不去介绍一个PE文件里面的各个头部以及整体结构的各个部分的含义。而是侧重于介绍,基于托管环境下,DotNet对基本的PE/Co...
阅读全文
摘要:上次提出了一个问题:一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?这个问题的答案,想必很多人也知道,几个cpu就几个GC Thread。不过接下来的内容,主要侧重于,变换几种不同的方式来解决这个问题:方法一:在WinDBG中,加载SOS模块...
阅读全文
摘要:近日研究CLR和GC,在msdn blog上面看到MS CLR测试小组的一个女技术员提出了十几个问题,感觉问题都挺有趣,也有一定的难度,遂加以修改,删除了几个又添加了几个,广泛征集回答 ^_^1. 一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断...
阅读全文
摘要:只有深究最本质的东西,才能把握最本质的东西。有很多朋友都分析过System.Object作为Dotnet Framework里面的一个基类,她的特性、方法特点及其相关的概念,这篇博文里面,我就从System.Object这个基类的定义以及底层实现的角度,探索这个基类对象在内存里面的布局模型,探索这个基类最本质的面目。首先,从一个Type的实例在内存里面的布局模型、以及一个实例的各个部分在一个托管进...
阅读全文
摘要:Last time ,when I was asked what is the diff between Readonly and Const,I was really ashamed that I said don’t know on explaining the exact difference between this two simple key word…过后,特意研究了下这两个关键字究...
阅读全文
摘要:在上一篇“CLR探索系列之应用程序域世界”的上篇中,探讨了一些关于应用程序域在托管代码执行过程中的特性和运行机制,以及一些相关的概念。在接下来的中篇里,就从如何实现的角度,换一个角度来探讨程序集和应用程序域是如何加载,执行。以及一些有趣的问题。首先,有一个有趣的“鸡和蛋”的问题。我们知道,一个应用程序集里面的代码在执行的时候,首先被load,然后经过验证,接着对IL代码JIT成为本地代码才能执行。...
阅读全文
摘要:在CLR的世界中,有一系列的令人Amazing的技术和架构。其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究。编程人员在开发的过程中,如果把程序集的加载(Assemblies Load),反射(Reflection),寄宿(Hosting),应用程序域(AppDomain),这四种技术结合起来使用的话,不仅能更好的使用C...
阅读全文
摘要:在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心。譬如查看一个托管堆或者计算堆栈的时候,VS就不能胜任了。这个时候,Windbg+SOS扩展调试模块就为我们提供了一个很好的解决方案。我们看一段代码:class Program { static void Main(string[] args) { Program b = new Program(); b.test(); Syste...
阅读全文
摘要:C#中,我们一般情况下认为"+"操作符有两种功能,一种是做算术加,一种是做字符串的连接。今天看到一份文档说,深入解析C#中两个PLUS操作符执行的不同操作,想了想,也的确应该是这样,IL代码实例也表面这个观点是正确的:我们先写一小段测试代码:namespace MSILTest{ class Program { static void Main(string[] args) { string a ...
阅读全文
摘要:在上一篇的博文中,我以一个具有代表性的IL base instruction, ldc 指令,来介绍了IL语言中最基本的一类指令及其参数的使用方法.大家反映还不错.这里,就再写一篇博文,用一个应用程序的实例来深入的说明一番CLR环境下的IL语言的语法,基本运行机制和原理.首先,找一段IL语言的例子,从codeproject找了一段IL程序修改了下.method static void main()...
阅读全文
摘要:首先来看一下一个有代表性的: ldc.i4 num 这个指令.在这个指令中,num被放到了堆栈上面:Note that there are special short (and hence more efficient) encodings for the integers -128 through 127, and especially short encodings for -1 throug...
阅读全文
摘要:关于Attribute的详细知识,我就不多说了.大家可以参考dudu和anytao的一个系列里面的介绍,比较经典的探讨了Attribute的一些生成和运行机制.在这里,我只想从几个侧面来探讨下CLR环境下的Attribute.首先,我们来看一个Reflecting in Attribute的例子:using System;using System.Reflection;public class A...
阅读全文
摘要:我们先写个最简单的Console App,打印出一行字符:using System;using System.Collections.Generic;using System.Text;namespace ILTest{ class Program { static void Main(string[] args) { Console.WriteLine("Test App for IL"); }...
阅读全文