20101027

城市就是大农村

城市就是大农村

又是很久没有博客了。

其实,最近过着混乱而忙碌的日子,不仅博客,连日志都停了。所有一切每日计
划都受到影响。都在等着紧急任务完成,然后一切恢复正常。

好象,这是世界末日前最紧张的时刻,过了这一会儿,就会全都恢复正常。

也许会,也许不会。

周一,下午与建一、包师弟、王伟分别讨论。跟建一写程序以前,打起精神戴上
隐形眼镜,为了看清屏幕。我以为所有的感觉就会回来,然后一切如新。

但是,我最后离开的时候,忘了取回框架眼镜。

天有些冷,糟糕的是风挟着沙子往眼睛里灌。我只好一会儿用左眼,一会儿用右
眼,眯着另一只,等眼泪冲洗干净眼镜。

29分钟,从计算机面前赶到公共汽车站,再加上等车的时候。

黑暗里,大家在车灯里抻着头望向左方,像一排企鹅。

后来决定步行。依然一会儿左眼,一会儿右眼。摆开胳膊,弓箭步,就像十多年
前我依然年轻的时候一样。

回到家,发现框架眼镜丢了。因为眼睛进了沙了,摘了隐形,在一片模糊的屋子
里走来走去。

我不喜欢这个颉颃。从来也没有。

记得大学的时候,我就说:长春的雪太少了,而且,往远处看,居然没有山。

后来,一年的时候,长春感觉就像瞬间一样,变成了一个大都市。打车和公交都
非常困难。以前从来也没有想过,半小时的路程,会变成二个小时。

有一次,丁老师对出租司机生气,因为他把我们拉到师大对面而不是按事先要求
的到门口。我说:哥哥啊,现在有车拉你就不错啦。现在出租拼车都不经你同意
啦。同时,我就没见过哪个司机师傅抽烟经过乘客同意的。

暖房子和暖气改造都是没有预约的,要求留人在家――甚至连这个也不通知。城
市,不过一个大农村。

这样的一个时代,这样的一个城市,我充满绝望。

这时,就想起当年赵元良老师教导我的话。

在我大四快毕业,或者快毕不了业的时候,我坐在机房里发愁,感叹四年啥也没
学着。赵老师说:孩子,以后你就知道了,这些都只是人生中的一些小小的磨难。

我不能清楚地记得原文了。也许他在这句话之前或者之后叹了口气?也许,他还
补充说,更苦的还在后头?时间让这些都模糊了。但是,这些话一直一直都鼓励
或者说帮助着我。

反正更苦的还在后头,眼前的这些,都算不了什么。

不过,十多年来,我从未想过:如果后面的更苦,我们还有什么希望。

就希望问题,当年问过李树杰老师,如果工程师要一直学习新的技术,那还有什
么希望。

李老师回答:工程师这个职业就是这样的。

虽然很多年以后我认识到,技术的训练需要时间,而且除非训练本身,没有替代
的方法可以获得。但是,这也彻底粉碎了少年的梦想,如何如何以后,就可以过
上幸福无忧的日子了。大学之前,老师们都是这样欺骗我们的(似乎除了高一班
主任宋老师),上了大学这些谎言不攻自破。不过,愚钝如我,没有悟出,世事
都是这样的道理。

因为暖气改造,所有的旧东西都翻了出来。一件件地扔掉,或者重新包装起来。
时光重新回到十五年前、十二年前、十年前、五年前、两年前、一年前。

老师们的叮嘱言尤在耳。如果那是一道作业题,不知道老师们面对我现在潦草的
答案,会是怎么样的叹息。


其实很多时候写博客读博客,不过是博得一笑。人生就像是小丑,掩在面具下做
出各种有深意的表情。如果看得懂的,不妨一哭,看不懂的,只有能逗乐的才是
好文章。

无奈今天实在是没有情绪。各位看官,你就当是听到小丑自己哭了出来吧。

或者,这也是今天这出折子戏的一节。所以,别忘记叫好。

20101025

西方的智慧 笔记 意图与原因

西方的智慧 笔记 意图与原因

西方的智慧

罗素
亚北 译
中国妇女出版社
2004年1月
---------------------------------------
2010-10-25 02:08:01

pp.111
关于物质因和形式因,这里没什么可补充的。我们不再把它们当作原因,它们只是因果情况中的必要条件,因为任何事情要发生,都必须在某个地方存在着某种条件。至于动力因和目的因,这两项都值得我们花点时间来探讨。现代术语简单地把动力因称为原因。因此,一块石头从台阶上掉下来,是因为某人或某物推了它一下。在物理学中,这是被人们认识到的惟一因果关系,科学的总体趋势就是试图用动力因来进行各种解释。今天的物理学没有吸纳目的因概念,尽管它的词汇里还保留着目的论的痕迹。吸引、排斥、向心之类的词都是目的论概念的残余,它提醒我们,直到大约350年前,才有人对亚里士多德的因果论提出质疑。目的因果论带来的不利影响与潜在性概念(前文讨论过)带来的麻烦极为相信。说石头掉下来是因为它有掉落的趋势,这实际上等于没有作任何解释。但在某些时候,目的术语又的确能起到某种合理的作用。比如,在伦理学领域里,把某个目标作为一定行为或行动的原因并非没有意义。总的说来,人类的活动也是如此,对未来事物的当前期望就是我们采取行动的动机。动物也是这样,有时候人们甚至还有可能认为这种说法同样也适用于植物,因此很显然,当然们考虑生物和社会问题时,目的性并不总是微不足道的。亚里士多德正是出于他的生物学兴趣,才提出了目的因概念。由此看来,潜在性与目的性显然结合在了一起,生物学家面临的是一粒种子怎样长成大权树,一个卵子怎样发育成动物的问题。亚里士多德会认为,橡果潜在地包含着橡树,至于长成大树,则是因为有实现自我的倾向,当然,这种说法是运用这些概念的一个浅显的例子。更通俗地说,随着科学的发展,目的因解释将被动力因解释所取代,甚至心理学也在顺应这一趋势,精神分析学(不管它有什么样的优点和缺点)就是在试图根据以前发生的情况,而不是即将发生的情况来解释人的行为。

目的论观点最终从下述事实上获得了自身的力量:我们周围的自然环境似乎展示出了某种秩序,与动力因有关的因果必然性似乎是一种盲目的力量,因为其运作无法解释这种秩序。另一方面,目的论却仿佛很有预见性,生物学的秩序在此很可能又让人们认同目的论观点。但不管怎样,亚里士多德认识到了必然性和目的性的效力。在这样的基础上,自然科学显然是不会繁荣起来的,尤其是物理学遭到了严重阻碍,直到伽利略时代,人们在方法上回归到柏拉图那里之前,这种状况都未见好转。由于数学家不大容易像生物学家那样想到目的性概念,因此柏拉图没有像亚里士多德那样考虑到这一点也就不奇怪了。目的论最终因其拟人特性或神学特性而出了差错,因为只有人才会具有意图,才会追求目的,即使假设它们似乎有目的,也没有什么好处。但是,我们完全可以适当谨慎地使用趋向概念,就像我们有可能用到潜在性概念。

说一块石头具有坠落的趋向,也就是说如果给定某种条件,它就会掉下来。然后亚里士多德却不这样想。他认为目的性与意图有关,他是从秩序的存在中推断出这一点的,秩序在他看亚秩序就象征着规划。遵循这样的原则,物理学研究显然不可能繁荣起来。因为,如果探索者的未知欲为虚假的解释所满足,那么自然现象的真实解释就无从获取。亚里士多德对科学,尤其是天文学的发展,造成了严重的阻碍。目的性理论给万事万物都分配了适当的位置,这使得他把尘世和尘世以外的领域区分开来,并主伙这两部队分受到不同原则的支配。如果和阿卡德米先进的天文学相比,这种纯粹的妄想简直就等于精神错乱,然后真正的危害还来自于那些不敢对亚里士多德持批判态度的人,他们全盘接受,连糟粕也不肯放弃,从而使得亚里士多德在各个领域都留下了坏名声。

20101024

omnet的一些资料

omnet的一些资料


在计算机网络的理论研究中,设计一个新型的网络协议,需要对该协议的性能进行合理的评价。可以进行这种评价的方法大致有以下三种:
 
数学分析的方法。这一种方法有数学理论基础的支持,因此可以得出精确而合理的结果。但是另一方面,进行数学分析前需要首先建立一个合理的数学模型来对网络状况进行合理的描述。而这种模型的建立,往往又是无法全面兼顾各种情况的。因此,对网络协议的数学分析之余,需要还有具体的实践来证实这样的分析的有效性。
 
网络模拟器。这是一种将一些网络环境量化后,通过计算机来进行模拟的方法。实践证明这种方法是行之有效的,因为它可以利用软件模拟硬件环境,节省了开销,也节省了网络协议性能评价的代价。GloMoSim[1][2][3]就是现在比较流行的模拟器之一,其他比较著名的网络性能模拟器还有:NS2(Network Simulator Version 2)、OPNET(事实上是NS2的商业版)、QualNet(GloMoSim的商业版)。
 
试验台(Test bed)。这种方式就是把需要的试验做到硬件上,利用现实的环境,进行确实的测验。这种方式一般在网络模拟器性能估价比较完备的基础上进行。当然,现在有很多设备都支持对该设备进行编程(比如可以将软件在Palm上运行),现在利用这种方式进行实验的代价也已经大大降低。
 
对于大多数网络理论的研究者来说,除了从数学分析上对所做的协议进行评估以外,使用网络模拟器是一种快速而有效的方法。


hhOmnet仿真分为科研版和商业版。

目前使用的是科研版。(2010.3.15)

下载与安装:

1.到http://www.omnetpp.org/上下载http://www.omnetpp.org/omnetpp/doc_details/2199-omnet-40-win32-source--ide--mingw-zip,该版本为windows下的版本,最新版本为4.0.该版本只有源代码版,没有exe直接安装的版本。

2.下载jdk-7-ea-bin-b57-windows-i586-30_apr_2009.zip,因为omnet的运行需要JRE(java运行库)。安装JDK。

2.解压后(路径中不能包含中文和空格!),根据omnetpp-4.0-src-windows\omnetpp-4.0\doc\Readme-MinGW.txt的介绍:先执行mingwenv.cmd,然后./configure,然后make,然后输入omnetpp即可运行(或者直接双击运行omnetpp-4.0-src-windows\omnetpp-4.0\ide\omnetpp.exe)



Simulation with OMNeT++
用OMNeT++进行仿真的大致流程如下:

一个OMNeT++模型是用通过交换信息来通讯的组件(模块)来构建的。模块可以嵌套,也就是说,几个模块可以组成一个复合模块。在创建模型时,你需要将系统映射到一个相互通讯的模块体系中。
用NED语言定义模型的结构。你可以在OMNet++提供的IDE中以文本或图形化方式来编辑NED文件。
模型的活动组件(简单模块)需要用C++来编程,当中要使用仿真内核及类库。
提供一个拥有配置和参数的omnetpp.ini文件给模型,一个配置文件可以用不同的参数来描述若干个仿真过程。
构建仿真程序并运行它。你可以将代码链接到OMNet++的仿真内核及其提供的一个用户接口:命令行和交互式接口或图形化接口。
仿真结果将写入输出向量和输出标量文件中。你可以使用IDE中提供的分析工具来进行可视化。结果文件是普通的文本,所以你能用R,Matlab或其它工具来进行绘图。

OMNet++ 10 分钟教程



OMNet++ 中的 NED 语言学习

20101019

梦与现实

梦与现实

今天晚上,上校车前请司机在东岭停一下,然后睡着了。我醒过来的时候,发现
他叫了我好几声。


还有哪一天的中午做梦,两条大蛇张着雪盆大口扑面而来。第二条完全挡住视线
的时候,持续不断地警报声,花了好一会才醒过来认识到是闹表。


更早一些。梦到我在上课,学生都不好好听。我怒不可遏,拉住其中一个,扔到
门外。然后看到一些老外,从课堂中穿过。我大喊:你们谁负责,这是我的课堂,
都出去。监督着着他们往外走,一个老外贴近我,我捉摸着,来个过肩摔?然后
醒了。

今天上午上课睡着了,实在是挺不住。最后几节全是蒲老师翻译的。

现实是如下的对话,和芬兰教授之间的。
今天一早。
你上厕所看书啊。
是啊。
我最近在厕所看 西方的智慧。
罗素的。
恩纳。中文的。
还是看英文的吧。

感叹一下。

20101015

如何摆脱强烈的情绪? zz

如何摆脱强烈的情绪? zz

by 李笑来

每个人都有过这样的经验:各种情绪诸如喜怒哀乐强烈到一定程度的时候,大脑几乎处于空白状态,各种知觉几乎都临近失灵……

脑科学家的解释通俗地讲是这样的:

大脑可以这样由里到外分为三层,第一层负责"反射",第二层负责"情绪",第三层负责"理智"。我们的身体对大脑来说,就好像是个大电池,要为大脑提供足够的能量。可问题在于,无论如何,那能量是有限的。所以,当我们感受到强烈情绪之时,大脑的第二层就占用了大量的能量,进而使得负责理智的最外层因缺乏足够的能量而进入休眠状态……

情绪是很难控制的──因为它本身就处于"更底层"(相对于理智来说)。并不像大家想象得那样,把情绪压制下去就没事儿了──更可能的结果是,那情绪越是压制越是强烈。

事实上,更为有效的建议是:关键不在于压制情绪,而是在于唤醒理智。按照脑科学家的研究结果来看,由于能量是有限的,所以,一旦唤醒理智,情绪将自然而然地被削弱,甚至只能休眠。

那又如何唤醒理智呢?也不是很难。

第一种手段是,先了解以上的道理之后,将来感受到强烈情绪的时候,对自己用语言描述自己正在经历的感受──或者在心里对自己说,或者用笔写下来,或者向别人说这种方式并不推荐,但它是基督教吸引人的重要原因之一,因为有什么事都可以跟神父说……)。这种手段看似平常,但有着神奇的功效。原理是当我们使用语言的时候,必须启动负责理智的第三层,否则我们没办法使用语言去描述任何事情。一旦第三层开始启动了,它就会渐渐占用更多能量。

第二种手段是,启用即时感受。这是个新的概念。当我们感知周遭事物的时候,实际上我们有两种方式:模式认知,即时感受。使用模式认知的时候,信息交由第二层处理,然后再返回第三层;使用即时感受的时候,信息直接由第三层处理。什么事即时感受呢?就是你能听到身边的声音,看到眼前的景象,体会到风吹过皮肤的感觉……

所以,当你已经意识到自己被强烈情绪影响之时,先用第一种手段(对自己用语言描述感受)启动第三层,然后再运用即时感受(关注一下可以听到的声音,可以看到的景象,可以闻到的气味,可以感受的触觉等等)强化第三层的运转,让它能够占用更多的能量,恢复正常地运转能力。

一旦负责理智的第三层重新被启动,并且能够正常运转之时,你对第二层所能够体会到的情绪将有"被更新"的描述,即,所谓的"理智地对待情绪"。

很多人由于不懂这样的道理,所以,他们是被反方向牵引的。当他们突然被强大的情绪所影响之时,第三层休眠掉,而后又受不了第二层过于活跃,于是他们下意识地启动负责反射的第一层──吃和睡就由这一层管理)。日常生活中经常看到女生失恋之后就变胖了,大抵上就是为了使第二层休眠所以不顾一切地启动第一层才造成的。

参考阅读:《是我们的反应,还是鳄鱼的反应?》

20101013

博大家一笑

博大家一笑

脑袋完全不行了。
看到封邮件,是EC-SPR协议,想包师弟手看快,
看了大半天,越看越觉得是我写的,
想,啊,应该是在我原来的文档基础上改的;
后来就觉得包师弟太偷懒了,
协议也没怎么改啊;
一直看到最后。
看信的结尾,然后看开头,
我发给我自己的。
博大家一笑。
请各位注意休息。

六天不悟,七天就能悟么?意思意思得了 zz

六天不悟,七天就能悟么?意思意思得了

【皆是虚妄,为何不能交媾?】【有本事自己寻缘。】【万法皆空,为何不能食肉?】【庙里没有闲钱。】【梦幻泡影,为何不能蓄发?】【你师娘摸不习惯。】

【师傅,一切如梦幻泡影,可在梦里我还有哭有笑,甚至还有了一头长发,梦幻泡影虽易逝,也比这循环往复的无聊强太多了。】【你睡醒了再跟我说话。】

如是我闻:时,佛见须菩提静坐莲台吃面,佛问,须菩提,何不就蒜?须菩提白佛言:世尊,我念经已经够臭了。

如是我闻:须菩提庆生,佛告曰,此是一世,前有无穷世,后有无穷世,所谓生日只是来日,所谓死日只是去日,来去如烟,何必庆祝,你就别跟我要蛋糕了,乖,Happy
birthday to you 。须菩提白佛言:Are you fucking kidding me ?

【师傅,你知道我在想谁么?】【昨天那个女施主。】【你怎么知道。】【我也在想。】【那你怎么睡得着?】【那是大方丈的闺女,想也白想。】

【师傅,想必我在庙里呆不久了,我怕我控制不住自己。】【还想她呢?】【嗯。】【那就别控制了,为师传你一套迷魂经。】【你怎么不用?】【此经一生一念,一念一缘,我已经有你师娘了。】【我靠,那我还是等等看还有没有更合适的吧。】【操,没用,都会腻的。】

【小和尚,听说你喜欢我?】【不好说喜欢,只是看见你会乱】【听说你还想娶我?】【不好说想娶,只是想永远和你在一起。】【妈逼,油嘴滑舌,你丫天秤座的吧?】【阿弥陀佛,心直口快,女施主别不是天蝎的吧?咱俩正合】【合你大爷,你们佛门弟子还信这个?我爹怎么带的队伍。】

【师傅,为什么咱早上要敲钟啊?】【因为我们没养鸡。】

【师傅,你什么时候教我武功?】【佛门中人,慈悲为怀,大方丈有令,我们这种清净小庙,不可学少林喊打喊杀。为师传你诸般经义,读懂念通,内心强大,见着那些花拳绣腿的,舌灿莲花,灭他们跟玩儿似的。】【师傅,我懂了,知识就是力量。】

【咦?你怎么肿成了这个样子?又去调戏小北了?】【不是,少林的人打的。】【为什么?】【我跟他们舌灿莲花来着。】【唉,我说什么你都信,真可爱。】

【师傅,《易筋经》听起来很牛逼啊,我想学。】【那是通过刺激经脉给自己带来快感的土办法,都是买不起大麻追不上姑娘的和尚才练的。】【我好像就是....】【可我不是,所以不会,哦耶。】

【师傅,今天晚上我能不住庙里么?】【别装了,出去冻一夜回来和师兄弟们吹牛逼的事儿我也干过,想开点儿吧,色即是空。】

【师傅,和尚有自杀的么?】【有,但各寺都封锁消息,佛门已是逃避现世之地,你来了还死,传出去这不显得我们不专业么?此世不乐,来世就乐么?这些人真痴。】【那来世就一定不乐么?】【嗬,跟我抬杠?那你死去吧。】【你看你,辩经嘛,小心眼儿样儿。】

【师傅,那你相信西方极乐么?】【那都是骗施主们的。】

【为师现赐你法号澈丹,取清清澈澈,圆润如丹之意。】【师傅,我又怎么着你了.....】【你知足吧,你师兄宨丹都没说啥。】

【师傅,你法名为什么叫空舟?】【大方丈说我度不了人,也难自度,所以赐名空舟,由我自横。】【那我还跟着你干嘛....】【你执念太重,跟着谁也到不了彼岸,不如索性和我负负得正。】【为什么啊?】【你看,你总问为什么。】

【师傅,其实我应该叫你师父才对吧?】【没事儿,输入法怎么默认的就怎么叫吧,随缘。】

【师父,你师父是谁?】【大方丈。】【他的呢?】【他师父就是咱庙的创始人,据说当年是混的,后来路上捡了本儿经,就拉了一票弟兄,占山为王,广结善缘,干起了这普度众生的勾当。】【咱庙还有这背景?】【不然你以为为什么我们还没被少林吞并?】

【师父,小北和她娘为什么不住庙里啊?】【大方丈怕影响不好。】【那我师娘为什么就能住庙里?】【我一个出家人,还在乎什么影响。】

【一切如梦幻泡面,有蒜就蒜,没蒜就算,观自在,望远山,一切有为法,当做如是观】【师父,我爱吃米饭。】【.....好了,今天的早餐,啊不,早课就上到这里吧。】

【撤丹,听说你偷鸡被人撞见了?大白天就去偷鸡,你可真有创意。】【师父,没事儿,我说我是少林的。】【嗯,好孩子,鸡呢?赶紧给你师娘送去,出家人不能杀生。】【再说咱也不会炖啊。】【阿弥陀佛,这孩子,真可爱。】

【师父,人家别的寺都叫方丈,为什么咱们得叫大方丈?】【这不显得咱大气么。】【那我以后就管你叫大师父吧?】【嗬,你在这儿等着我呢!】

都看的很明白,都活得很不明白————空舟禅师与诸君共勉。

【师父,咱庙为什么叫遗寺啊?】【说来话长。本来叫义寺,就大方丈那黑社会师父取的,后来他死了,大方丈说这名儿太不禅了,就叫了疑寺。谁知那年起了瘟疫,正该是香火旺的时候,结果百姓都不来咱庙,就改成遗寺了。还有人提议叫逸寺,让大方丈否了,他说,蒙谁啊,你真那么逸还出什么家?】

【小和尚,你到底喜欢我吗?】【喜欢】【出家人不打诳语?】【出家人连肉都不吃连姑娘都不泡,他们的话你也敢信?我师父说,出家人的话都是诳语。小北,这话不是出家人说的,这是我说的,我喜欢你。】

【师父,今天怎么哪儿哪儿都这么黑啊?】【澈丹,我们佛门中人,不要学人家针砭时弊。晨鸡报晓,昏鸦鼓噪,都在红尘里闹,你以为黑白的红尘就不是红尘了?活着的人就不是死人了?唉,去叫你师娘吃饭。】

【师父,其实那迷魂经你没给师娘念过吧?】【你怎么知道?】【我昨天听见师娘让你跪搓衣板儿来着】【...那是我们夫妻间的小游戏】【你怎么不念啊,念了师娘不就全听你的了么?】【这些伪科学的东西怎么能信,再说,她要是全听我的了,我们在一起还有什么意思。】

【师父】【嗯?】【那你为什么让我给小北念迷魂经?】【反正你也追不上人家,死经当活经念呗。万一成功了,证了这经,那得造福多少比丘僧啊,你这可是大功德。】【师父,要不是打不过你我就跟你拼了】

【师父啊,可是爱情本身不就是伪科学吗?】【谁说不是了,你看这些香客,求签,问八字,配星座,凡俗中人,贪恋的不就是这些个伪科学吗?他们要是都科学了我佛就没饭吃了。】

【师父,那什么是科学?】【这孩子,我要懂我还跟这儿呆着?闹什么闹。不过据说大方丈是懂的,他说,科学就是一花一世界,就是无限的轮回无限的远,就是谁也说不清楚的东西,就是比伪科学还伪科学的东西。咱们还是别想这个了,省得一不小心再真给顿悟了。】

【师父,好大风雨。】【澈丹,少做感慨。】

【师父,澈丹公然追求大方丈之女,枉顾清规戒律,破坏寺内安定团结,请师父予以管教。】【行了吧,看你们这没出息的样儿,还学会给人扣大帽子了?还学会正义凛然了?还有没有一点儿出家人的样子!】

【澈丹,和师兄弟们打架了?】【是。】【所为何事?】【他们说我不应该追小北,其实他们是嫉妒。】【嗯,既已看破是嫉妒,又何必跟他们争呢?】【我没争,他们争。】【唉,力的作用是相互的,你真的没争么?你还是执念太重啊。算了,来,为师传你一套女子防身术,省得你老吃亏。】

【师父,我从小就在庙里,我的亲爹亲娘呢?】【你怎么问这么俗套的问题?难道为师要告诉你我其实就是你爹吗?】【师父,咱们出家人,可不许玩儿伦理哏。】【你还跟我玩儿八点档狗血剧呢。】

【师父,你说大方丈知道我和小北的事儿吗?】【大方丈什么不知道。】【那他怎么不管?难道他看我还行?】【别臭美了,大方丈那是对自己的女儿有信心。】

【澈丹,此番云游,有何感想?那儿好玩儿么?】【师父,你竟然也会问这种问题,用你的话说,这红尘里哪有什么好玩儿不好玩儿。】【唉,主要是你师娘想把蜜月补上。】

【师父,寺里好安静啊。】【那你还说什么话。】

【师父,我心里乱。】【去墙根蹭蹭去,没看我这儿入定呐嘛,别烦我。】【师父,你干嘛要入定?】【我心里乱。】

【空舟!你那徒弟,叫什么撤丹的,怎么老不见影儿,是不是出去云游了?怎么也不跟我爹请假!好放肆!】【哈哈哈,小北,你动凡心了。】

【师父,你说,我和小北,我是不是自作多情?】【自作虽苦,但看你这个贱兮兮很享受的样子,多情想必是快乐的,你还抱怨什么?】【别跟我打哈哈,我知道今天小北来找过我,她说什么了?】【别问,万一不是好话呢?】

【小北,我觉得少林的素菜做的还不错啊,我请你去吃好么?】【不吃,就爱吃肉。】【小北,我觉得十里坡那个戏班子的青衣唱的还可以,我请你去听好么?】【不听,没我嗓子好。】【小北,你生我气了?】【不生.....哎?生!】

【完了,小北,我们有分歧了,肯定是我错了,我决定听你的!】【真的?】【真的】【那我可唱了】【..........】

【小北,你唱的真好,能教教我么?】【得了吧,你念经都跑调。】

佛法不二,佛不分是非,不分喜悲,佛见有缘的教他度化,见无缘的教他轮回。后来佛见你了,佛二了,佛更不分是非了,你是便喜,你非便悲,从此你就是佛法了,佛不普度众生了,佛颓了,佛被你普度了,但是佛欢喜了。————空舟禅师当年的情书,引来给你。

【澈丹,为师是为了让你哄小北才给你看我的情书,你自己用心研究就好了,干嘛到处嚷嚷啊?】【师父,你还挺不好意思。】【不是,那当年不是给你师娘写的.....】【我说你怎么有点儿肿.....】

我师父和师娘早睡了,我师兄和师弟们也睡了,小北,你也已经睡了吧?我和想你也该睡了。

【师父,你好久没给我讲经了。】【你不是最烦听经么?】【我觉得将来要和小北生活在一起,还是得有一技傍身,你看,你不就是靠经念得好才能留住师娘,才能做得禅师的吗?】【这孩子,这话别跟别人说,来,为师给你讲一段儿楞严,这活我熟。】

【澈丹啊,念经只是基本功,做好和尚还得会解签,趋妖,看风水,做慈善,心理辅导,编造彼岸,装看得开,装悲天悯人,装笑口常开。佛法无涯,你慢慢学吧。】【师父,做和尚好难,要不咱们出家吧?】

【这诸般经义,确实是安身立命之技,练到能随口占偈,指点迷津,越指越迷也就行了。但我就怕你动机太纯,一心执念,将来小北转身一走,水打飘萍,你别真的陷进经里,那就神佛难救了。】【没事儿,小北走我就跟着呗。】【得,这就已经没救了。】

【澈丹,你喝酒了?】【嗯。】【啤的白的?】【要不我吐出来你尝尝?】

【傻孩子,能吐出来的就不是酒了。】 【师父,你说我是不醉了?】【这你得问小北。】 【小北不理我。】【嗯,你没醉。】

【师父,这次中原辩经大会咱庙派得你去吧?】【不是,当然是派你空响师叔。】【他?他念经还不如我呢吧?】【但他嗓门儿大啊,大会上好几百和尚,辩到最后,还能喊出来不破音儿的就算胜利。】

【师父,我能跟去么?】【想见见世面?】【嗯】【算了吧,年年辩经大会都得打伤几个和尚,庙里今年派你空手道,啊不,空道师叔陪同保护。咳,上回要不是少林不要脸竟然带了家伙去,咱庙去年就是第一了,他们哪是空道的对手。】

【咱庙得过第一么?】【建寺第一年,大方丈的师父为了闯名头想了个狠招,辩经当天故意迟到,待群僧辩至酣处,一脚踢碎大门,注意,是踢碎,立在大厅就喊了一句:大音希声。那帮和尚都傻了,没傻的看着那一地木头渣儿也都装傻了,第一就是咱的了。】

【这招好,再用啊。】【别提了,后来确实有人模仿,同样动作,喊完正等鼓掌呢,那评委老和尚气得哆哆嗦嗦地骂,你们这行为艺术还有完没了?踢坏门不赔也就算了,还老拿《道德经》里的词儿冒充佛法,以后我们还能跟道士见面儿么!给我滚出去!】【哈哈哈这倒霉蛋是谁啊。】【咱们大方丈。】

【大方丈还干过这事儿?】【谁没年轻过啊,回来痛定思痛,觉得脚疼不如嗓子疼,辩经还得拼硬功夫,就苦练声乐了。小北唱歌儿好听吧?遗传他爹的。你空响师叔就是那会儿进的庙,学的就是这本事。】

【那大方丈后来还去辩过经么?】【去过几次再也不去了,自从他有了小北,就成了现在这副大彻大悟的样子,还给自己改了法名,叫南无,翻译过来好像就是皈依的意思。】

【那大方站以前叫什么?】【南子,他那黑社会师父给起的,说是听着霸气。后来大方丈才知道他看过《论语》,起这名儿其实是糟践大方丈长的不够霸气。】【哈哈哈,就怕流氓有文化。】

【师父,我怎么每次午觉醒来都觉着头沉啊?】【你执念太重。】【那怎么办啊。】【....以后就别午睡了吧。】

【师父,咱们和尚又不干正经事,怎么还那么多人能当和尚啊。】【本朝尊佛,会念个阿弥陀佛就饿不死。再说,干正经事的人总要把钱花在这些不正经的事上,都是应运而生,你不用过意不去。】

【那万一哪天本朝不尊佛了呢?】【出家人,不要学人家深谋远虑,深谋远虑,最后都净剩下虑了。当一日和尚撞一日钟,到时候实在不行咱就转型当道士呗,不就买个假发套的事儿嘛。】

【师娘!快快,小北让我陪她去逛街,快给我找件儿干净好看的僧衣。】【傻孩子,这大热天儿,你还得拿那么多东西,穿什么僧衣啊,你师父上次陪我逛街就是臭美,还拿了禅杖,回来就中暑了。】【师父...】【澈丹,锻炼身体,磨砺耐性,也算修行,去吧去吧,唉,中午多吃点儿饭啊。】

【师父,空响师叔回来了?怎么没见空道师叔?】【空响连辩三天三夜,直至群僧哑口无言,就听他一人儿喊了,当然第一。但是少林的辩手不服气,哑着嗓子指你空道师叔的头发,意思留发的不是佛门弟子,一大厅的哑巴和尚都盯着空道呜呜喊,空道顾全大局,当场剃度。回来就一直躲屋里哭,不见人】

【对啊,空道师叔为什么能留头发?】【说来话长,空道是从日本偷渡来我中原求佛法的,结果这个笨蛋还赶时髦信儒家,身体发肤不损,这不倒霉催的么,哪个庙都不要他。大方丈看他一身武艺,性情朴质,就留下了,顺便学日语。】【大方丈还会日语?】【哈依。】

【不行了,你空道师叔是咽不下这口气了,为师得跟他去趟少林。】【好!讨回公道!】【小点儿声,喊什么,讨什么公道,哪来那么多公道,佛门中人,不可争强好胜,能不声不响的给那个输了不服气的孙子来一闷棍就好。】

【师娘,我师父呢?】【闭关七日,潜心佛法。】【那我修行怎么办?】【我教你呗。】【你?】【怎么着?不就普度众生那套嘛,别说普度众生了,大彻大悟咱也会啊。】

【师娘,你还是教我点儿正经的吧,怎么才能讨姑娘喜欢啊?怎么才能让小北待见我?】【讨姑娘喜欢的道理我可以教你很多,但这就像你师父教你的那些大道理一样,具体到人和事上,道理都是没有用的。小北是一劫,凡是劫,都要自己去度。】【咳,我也不知道要你们两口子干嘛用。】

【师父,你怎么出关了?悟道了么?】【没有。】【那你怎么六天就出关了,不是要闭关七日吗?】【六天不悟,七天就能悟么?意思意思得了。】

【澈丹啊,你应该也闭闭关,减肥,美白,增加忧郁感和神秘感,还能变得沉默少言。哎呀,这么一说,真该让你师娘也闭闭关。】【你敢跟师娘说么?】【不敢。】

【师父,小北彻底不理我了,怎么办啊。】【你问我我问谁。】【那那些施主有了烦恼,怎么都来问你。】【那不是问我,是问我佛。】【那我也问我佛。】【问我佛是要收费的。】

【师父,今儿是佛诞日啊。】【那你孵去吧。】

【师父,你这大不敬,今天是佛祖诞辰,佛祖生日!】【嗯。】【你嗯什么啊,咱们不表示表示?】【你跟佛祖熟吗?佛祖用的着你表示吗?为师过生日你表示了吗?师娘过生日你表示了吗?你们啊,就整这些虚的来劲。】

小北,今天天气晴好,但过一会儿可能会下雨,我现在在想你,但过一会儿可能会更想。我师父说,世上其实并没有比天气更难测的东西。我觉得他说的对,他总是说的对,小北,不管下不下雨,过一会儿我都会更想你。

【师父,刚那洋人来干嘛的?】【来传教的,说让咱们别信佛祖了,信耶稣,真可爱,好像咱们本来信佛祖似的。】

【怎么不让人家进来啊?】【你can speak English
吗?为师也就是勉强能听懂,大方丈倒是会说,但是这些传教士都一根筋,你大方丈懒得费工夫开悟他,打他又不合适,就撵走了。】

【不是一根筋吗?怎么能撵走?】【大方丈说,我中原大乘正宗佛法皆出自少林,少林如若改信耶稣,我等小庙没有不信之理。那洋人一听有道理,就去少林了。】【大方丈这是借刀杀人吗?】【呦,你还看上兵法了?心里明白就得了。】

【空舟!你们遗寺太过分了,这传教的打也打不得,劝又劝不走,弄我们少林来让我们如何是好?】【阿弥陀佛,吵吵什么,你们不是爱接待外宾吗?拿出中原第一大寺的排场来,好生款待他,说不准哪天被感化了,就回西洋替我们传佛法了。】

【师父,最近咱怎么不做早课净跑步啊?】【出家人,太胖不合适,影响信誉。保持身材,眼神空灵,头顶锃亮,僧袍整洁,都算职业道德。】

【师父,今日山上好大雾啊,望不出去。】【没雾你就能望出去吗?瞎望什么,留神脚下。】

【师父,昨夜雷声好大啊。】【嗯,也不光是雷,你空响师叔跟丫对着喊来着。】【喊什么啊?】【"你小点儿声!你小点儿声!"大概就这句吧。】

【后来雨停了,雷歇了,你空响师叔就笑了,说了句阿弥陀都服,你不服?哦耶了一下儿,就睡了。】【我说他今儿怎么看谁都笑,得意洋洋的。】【那是嗓子喊哑了,要不早显摆上了。】

【澈丹啊,你这心里老挂着小北,已成执迷不悟之势,长此以往,怕是影响修行。】【那怎么办啊?】【你还是得找小北求解脱。】【.....我要这么求,她非打死我。】

【师父,空言道何以弘道?我得跟空道师叔学学空手道。】【嗯,这上联儿不错,你自己能对出下联儿来我就让你去学。】【靠!】

【靠什么靠,你空道师叔倾心儒学,虽是武艺超群,但一身文人毛病,就爱对个对子,你早晚都得学】【佛理实相中,本来一切空,
无生无死无去无来,哪有个相对?师父,你竟然让我学这等有悖佛理的小技。】【哪儿那么些废话,让你学你就学,过年写写春联儿也能挣点儿零花钱】

20101004

Emacs开发VC程序 zz

[http://emacser.com/dev-vc.htm]

Emacs开发VC程序


背景
前些日子,微软宣布Visual studio 2010的EMACS扩展。此前,Visual studio 2005
6.01已然引入了Emacs的键盘模拟,这次又将Visual studio
的Emacs化更进一步,这种事发生在Microsoft这样无利不起早的企业,原因呢,你懂得。
话说,武功再高,也怕菜刀。Emacs玩的再溜,也保不齐哪天你要去开发Visual studio
程序。习惯了Emacs的高效,使用Visual studio
就是一个杯具1。这种情况,一般一颗红心,两手准备。一颗红心:cosplay,两手准备:1.Visual studio 扮Emacs
2Emacs扮Visual studio 。

VC扮EMACS

非官方扩展式visEMACS
官方的Emacs扩展2
不过,我对这种方式的经验总结:享受不到Emacs的周到体贴,却净受VS的大小姐脾气了。不给力啊,不给力。不过,作为出差旅行,远程登陆,客户服务时,没有Emacs可用时,让Visual
studio 模拟一把Emacs,也不失为一种没有办法的好办法了。

这个方法不是本文的重点,所以不深入。

EMACS扮VC

配置EMACS为IDE
一个基本的IDE,必备功能:编辑,编译,调试。

编辑

应该很多人都很眼红Visual studio的销魂的插件visual assist
x吧。实时语法检查,快速打开文件,h,cpp文件,回到刚才编辑的地方,函数跳转,自动补全,插入模板。

可以号称操作系统的Emacs怎么可能没有这些功能呢?尽管这些不在本文范围,但是稍稍提及功能在Emacs中的对应,有兴趣想深入的请Google,
Duckduckgo, Wikipedia.

VXA功能 EMACS对应功能
实时语法检查 Flymake 3
快速打开文件 ECB, 快速打开文件
h,cpp跳转 CEDET 4
回到刚才编辑的地方 Recent-jump5
函数跳转 CEDET 4
自动补全 Auto-complete 6
插入模板 Yasnippet 7
快速打开文件
至于快速打开文件一项,我感觉ECB做的并不是特别好,如果C++程序的头文件和实现文件没有在一个文件夹,很难找到。所以我用了一个比较笨的方法,生成文件的列表到一个文件,使用Emacs的查找功能和打开当前光标下文件的功能
find-file-at-point,我把它编定到了C-c
C-f。这个过程还有两个副产物供cscope和etags用。确认你的机器上有cscope, find,
etags8,将以下代码成为uptags.bat,放到系统的pathz中的某个文件夹下。
%1
cd %2
rm TAGS
rm cscope.files
rm filelist.txt
rm cscope.in.out
rm cscope.out
rm cscope.po.out
if "%3" EQU "java" set PARAM=-name "*.java" -print
if "%3" EQU "c++" set PARAM=-name "*.cpp" -print -o -name "*.r" -print
-o -name "*.[hcrHs]" -print -o -name "*.hpp" -print -o -name "*.lua"
-print
echo %PARAM%
find . %PARAM% > cscope.files
less cscope.files | xargs etags -aR
cscope -bkq -i cscope.files
cp cscope.files filelist.txt
find . -name "*.txt" -print >> filelist.txt
假设我们的C++工程在d:\mydocuments\workspace\cpp\,那么调用方法9为:

uptags d: d:\mydocuments\workspace\cpp\ c++
java工程在d:\mydocuments\workspace\java\, 那么调用方法为:

uptags d: d:\mydocuments\workspace\java\ java
那么打开文件helloworld.cpp的操作就是:C-x b filelist.txt , C-s helloworld.cpp, C-c
C-f, RET。确实,稍显复杂,期待有更好的方法。

编译

编译的话基本上还是要靠Visual studio 自带的工具:nmake10,msdev。本文主要介绍msdev。

使用msdev.exe
msdev.exe位于安装路径下的bin目录,如我本机使用Visual studio 6.0,目录为"C:\Program
Files\Microsoft Visual Studio\VC98\bin"。 直接调用msdev.exe,即启动Visual
studio的UI界面,同时msdev.exe也接受命令行调用。我们看其帮助。
msdev /?
Usage:
MSDEV [myprj.dsp|mywksp.dsw] - load project/workspace
[<filename>] - load source file
/? - display usage information
/EX <macroname> - execute a VBScript macro
/OUT <filename> - redirect command line output to a file
/USEENV - ignore tools.options.directories settings
/MAKE [<target>] [...] - build specified target(s)
[<project> - <platform> <configname>]
[[<project>|ALL] - [DEBUG|RELEASE|ALL]]
/CLEAN - delete intermediate files but don't build
/REBUILD - clean and build
/NORECURSE - don't build dependent projects
假设我们有这么一个工程,路径为d:\Mydocuments\workbench\,工程目录结构,Configuration如下图


可以通过命令msdev.exe来编译工程test211。
C:\Program Files\Microsoft Visual Studio\VC98\bin\msdev.exe test2.dsw
/Make "test2 - Win32 Debug" /NORECURSE
同样,使用clean,rebuild可以清除、重编译该工程。将test2 改为test21,test23,即改变编译对象。
总这样写也很麻烦,而且为了在Emacs中调用 ,我们将其写成一个批处理。

d:
cd d:\Mydocuments\workbench\
set project=%1
set target=%2
if "%1" == "" set project=test2
if "%2" == "no" set target=/NORECURSE
msdev test2.dsw /Make "%project% - Win32 Debug" %target%
保存为makTest2.bat。调用方式为:

makeTest2 [工程 [目标]]
默认为编译test2 的 /NORECURSE。如果要编译test23的rebuild,调用方式为:

makeTest2 test23 /REBUILD
调试

实际上,如果有了编辑,编译,那么调试就不需要了。因为调试器是一切罪恶他妈12。

哈哈,当然是开玩笑的了。作为一个有思想的程序员,要认清楚,编译器,调试器都只是恶魔,程序员本身,也就是我们,才是恶魔他妈(当然大部分是他爹^_^ )。

哈哈,那么作为恶魔的产生者,我们当然要丰富自己的技能,而调试就是一个必杀技。我杀,bug闪……..

cdb-gud
要用Emacs调试Visual studio 的程序,首先需要一个el – cdb-gud.el
。cdb-gud使用Microsoft的命令行调试器cdb来调试程序。
cdb-gud.el只需下载,然后在.emacs中使用下面语句,cdb-gud就随时待命了。
;;+cdb [[http://msdn.microsoft.com/en-us/vstudio/default.aspx][Visual studio ]]
(when (eq system-type 'windows-nt)
(load-file "~/.emacs.d/lisp/cdb-gud.el")
)
调用cdb-gud: M-x cdb RET。

Microsoft命令行调试器cdb.exe
如果你是一个Windows程序员,Windbg听说过吗?如果没有听说过,我建议你去看看《软件调试》,这本书讲的非常的透彻。
注意,这是一本厚度为1000页的砖头书。如果你没有耐心去读这么厚的书,那么还有一个选择,《Windows用户态程序高效排错》,
内容236页,内容写的不多,但是书内提供的资源。
两本书排名不分先后。那么cdb就在Windbg的安装目录下。Windbg是Windows下的能用户态调试核心态调试的强大的图形界面的调试器。那么,简而言之,尽管不太准确13,cdb就是非图形界面的调试用户态程序的windbg。
简要介绍一下cdb:cdb就是一个命令行的调试器,over。

深入探讨一学cdb: 我想很深入的探讨一下cdb,但是实在是没有如此深厚的内功,但是我可以推荐一些内容供有兴趣的去深入。

WINDBG安装目录内的debugger.chm
windbg info
MSDN的帮助
强烈推荐将windbg info 打印出来在手边供不时查阅之需。

现在,来启动cdb-gud吧:M-x cdb RET

Showtime14!

例子
建立一个Visual studio 的console典型的Hello world工程(比如刚才的test2),源代码如下15:
#include "stdafx.h"
#include <string.h>
void assign (int a[], int n)
{
for (int i = 0; i < n; ++i)
{
if (a[i] == 0)
{
a[i] = i;
}
}
}

int main(int argc, char* argv[])
{

int a[100];
assign(a, 100);
for (int i = 0; i < 100; ++i)
{
printf("%d\t", a[i]);
}

return 0;
}
通过上边程序,我们期待打出所有0-99的数,每个数是间隔一个制表符,每十个数打出一个换行。

我们编译运行代码,得到结果:

-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460
有点奇怪,为什么没有得到我们需要的东西呢??

从代码中貌似看不到直接的证据证明我们的代码逻辑的错误。我们就祭出cdb。

M-x cdb RET

minibuffer: cdb d:\Mydocuments\workbench\test2\debug\test2.exe 会有以下界面提示。

Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: d:/Mydocuments/workbench/tmp/VCTest/test2/test/Debug/test.exe
Symbol search path is:
C:\symbolsXpSp3;d:/Mydocuments/workbench/via/helios/coyote/Bin/MULTIMEDIA_PRO_240x320_Debug
Executable search path is:
*** WARNING: Unable to verify checksum for test.exe
ModLoad: 00400000 0042c000 test.exe
ModLoad: 7c900000 7c9b2000 ntdll.dll
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll
(a90.1eb8): Break instruction exception - code 80000003 (first chance)
eax=00241eb4 ebx=7ffd9000 ecx=00000000 edx=00000001 esi=00241f48 edi=00241eb4
eip=7c90120e esp=0012fb20 ebp=0012fc94 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc int 3
0:000> cdb: Reading initial command 'l+*;l-s'
Source options are ffffffff:
1/t - Step/trace by source line
2/l - List source line at prompt
4/s - List source code at prompt
8/o - Only show source code at prompt
Source options are fffffffb:
1/t - Step/trace by source line
2/l - List source line at prompt
8/o - Only show source code at prompt
0:000>
0:000> bp main
bp 表示打断点,断点的方式有几种:函数名,文件行数,内存地址。

但是我最喜欢的还是:当调试过程已经在运行,*在Emacs中打开文件,走到需要打断点的行,C-x space*,断点就打到该行,很给力啊。

0:000> g
Breakpoint 0 hit
test!main:
0040d880 55 push ebp
0:000> p
test!main+0x1e:
0040d89e 6a64 push 64h
0:000> t
test!ILT+15(?assignYAXQAHHZ):
00401014 e907c80000 jmp test!assign (0040d820)
0:000> p
test!assign:
0040d820 55 push ebp
0:000> p
test!assign+0x18:
0040d838 c745fc00000000 mov dword ptr [ebp-4],0 ss:0023:0012fd8c=cccccccc
g==go,所以表示开始运行程序。

p 单步跟踪,不进入子函数。

t 单步跟踪,但是进入子函数。

不出意外,当你使用p或者t跟踪程序的时候,源代码窗口已经打开,同时随着跟踪,相应的代码行也会高亮。

0:000> dv
a = 0x0012fdf0
n = 100
i = -858993460
0:000> p
test!assign+0x32:
0040d852 8b55fc mov edx,dword ptr [ebp-4] ss:0023:0012fd8c=00000000
0:000> dv
a = 0x0012fdf0
n = 100
i = 0
0:000> dt a[0]
Local var @ 0x12fd98 Type a[ 100]
[0] 0x0012fdf0
-> -858993460
0:000> dt a[1]
Local var @ 0x12fd98 Type a[0]
[1] 0x0012fdf0
-> -858993460
0:000> dt a[i]
Local var @ 0x12fd98 Type a[1]
[0] 0x0012fdf0
-> -858993460
dv:显示当前的局部变量。

dt: 显示指定的变量。

当前发现为什么a数组的值怎么是负数,不是期待的0呢?

0:000> k
ChildEBP RetAddr
0012fd90 0040d8ac test!assign+0x32
[D:\Mydocuments\workbench\tmp\VCTest\test2\test\test.cpp @ 10]
0012ff80 00401209 test!main+0x2c
[D:\Mydocuments\workbench\tmp\VCTest\test2\test\test.cpp @ 21]
0012ffc0 7c817077 test!mainCRTStartup+0xe9 [crt0.c @ 206]
WARNING: Stack unwind information not available. Following frames may be wrong.
0012fff0 00000000 kernel32!RegisterWaitForInputIdle+0x49
0:000> .frame 1
01 0012ff80 00401209 test!main+0x2c
[D:\Mydocuments\workbench\tmp\VCTest\test2\test\test.cpp @ 21]
0:000> dv
argc = 1
i = -858993460
Type information missing error for a
0:000>
k:打印出当前的栈内容

.frame:跳转到栈中的第几帧,当前为第0帧。

在.frame 1后,我们注意到以下代码:

int a[100];
assign(a, 100);
貌似a[ 100]没有初始化吧。

0:000> q
然后修改代码后

#include "stdafx.h"
#include <string.h>
void assign (int a[], int n)
{
for (int i = 0; i < n; ++i)
{
if (a[i] == 0)
{
a[i] = i;
}
}
}

int main(int argc, char* argv[])
{

int a[100]={0};
assign(a, 100);
for (int i = 0; i < 100; ++i)
{
if (0 == (i % 10))
{
printf("\n");
}
printf("%d\t", a[i]);
}

return 0;
}
编译运行,结果:

test\debug\test.exe

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
那么cdb简单使用就介绍完了。

然而,其实很多cdb的强大功能都没有介绍到:

可以调试程序崩溃时留下的内存转储文件dump,调出其堆栈休息。
可以附挂到一个正在运行的程序。
远程调试
显示,执行代码
处理断点(支持复杂的条件断点)
读写内存地址
反汇编
多线程调试
Windows符号文件
对于一般的console程序,可能这样就够了。但是在调试广大的Windows程序时,哪能不接触Windows的API啊,调试这些个玩意儿,才是让人头痛的东西呢,没有源代码!!cdb的一个机制可以让你没有源代码的情况下看到很多Windows的公开数据结构。
首先,先查看自己的系统的版本,在我的电脑->右键->属性,我可以看到我的系统是Microsoft Windos XP
Professional Service Pace 3, 那么我就来这里下载Windows的相应的符号文件。

将其安装到本机,比如:C:\symbolsXpSp3。添加环境变量:_NT_ALT_SYMBOL_PATH,设其值为安装目录。

经此设置,cdb在调试时就可以看到Windows API的符号文件。更多内容,还请参考帮助文档或者我推荐的两本书。

Footnotes:
1 @木鱼指出 6.0中的Epsilon即为emacs模式。 可查到资料中最早的是2005, 来源猛击我。 但是有可能更早,如果有资料,麻烦请留言告之.

2 此处没有贬低Visual studio 的意思,只是我中Emacs的毒已太深,用其它什么都不爽:)

3 下载链接Visual studio Emacs emulation addon

4 flymake配置见http://marcelotoledo.com/2007/07/11/emacs-flymake/

5 CEDET配置见http://emacser.com/c-cedet.htm

6 recent-jump 配置见http://liuminzhao.com/emacs/recent-jump-el-for-emacs/

7 auto-complete 配置见http://emacser.com/auto-complete.htm

8 yasnippet主页http://code.google.com/p/yasnippet/

9 cygwin, mingw, msys, unixutils

10 好吧,我承认这个调用方法很蛋疼,如果你的工程比较少的话,其实可以将路径,程序类型什么的写到文件里,多整几个文件即可。upCppProject1Tags.bat,
upCppProject2Tags.bat,upJavaPro1Tags.bat,upJavaPro2Tags.bat。

11 此文 介绍了如何使用nmake,但是恕我直言,我在Visual studio 的安装目录里没有找到nmake。

12 如果不成功,请注意检查大小写和空格。

13 调试器,恶魔之母 http://stackoverflow.com/questions/602138/is-a-debugger-the-mother-of-all-evil

14 其实,用户态的windbg是图形界面的cdb。

15 谨以此名纪念我经历的一个软件项目:Showtime 0.7。

16 请注意,这是实验代码,所以请忽略魔幻数,程序是否有意义等话题。

15 请注意,这是实验代码,所以请忽略魔幻数,程序是否有意义等话题。