Monthly Archives: July 2008

.NET Debugging Demos Lab 7: Memory Leak

原文:http://blogs.msdn.com/tess/archive/2008/03/25/net-debugging-demos-lab-7-memory-leak.aspx 一.重现问题+收集数据重启IIS打开http://localhost/BuggyBits/News.aspx设置performance monitor log      Process      .NET CLR Memory进行压力测试:      tinyget -srv:localhost -uri:/BuggyBits/News.aspx -threads:50 -loop:20tinyget运行结束后获得dump数据:      adplus -hang -pn aspnet_wp.exe -quiet停止performance monitor log 二.用performance monitor观察下列计数器Process\Private Bytes Process\Virtual Bytes.NET CLR Memory\# Bytes in all heaps.NET CLR Memory\# Total committed bytes.NET CLR Memory\# Total reserved … Continue reading

Posted in Uncategorized | 1 Comment

.NET Debugging Demos Lab 6: Memory Leak

原文http://blogs.msdn.com/tess/archive/2008/03/17/net-debugging-demos-lab-6-memory-leak.aspx 一.重现重启IIS (iisreset) 打开页面http://localhost/BuggyBits/ProductInfo.aspx?ProductName=Bugspray 设置performance monitoring 添加.NET CLR Loading counters, 启动这个performance monitor log 压力测试tinyget -srv:localhost -uri:/BuggyBits/ProductInfo.aspx?ProductName=Bugspray -threads:50 -loop:20 tinyget 运行结束后生成一个dump文件adplus -hang -pn aspnet_wp.exe -quiet 停止performance monitor log 二.在performance monitor中进行分析在performance monitor中打开performance monitor log,添加下列CountersProcess\Private Bytes Process\Virtual Bytes.NET CLR Memory\# Bytes in all … Continue reading

Posted in Debug | 1 Comment

.NET Debugging Demos Lab5: Crash

原文http://blogs.msdn.com/tess/archive/2008/03/05/net-debugging-demos-lab5-crash-review.aspx 执行IISReset打开页面http://localhost/BuggyBits/CompanyInformation.aspx随便输入一些东西,提交页面,会看到一个错误页面: Server Application Unavailable 这说明IIS的工作进程崩溃了. 查看Event log,用的是xp+IIS5, eventlog中只记录有错误出现,没有更深入的信息 在2003+IIS6的eventlog中可以知道,进程的退出码(Exit code)为0x800703E9 means "Recursion too deep; the stack overflowed." 原因可能是infinite recursion. 现在开始生成dump文件.先重启IIS,打开http://localhost/BuggyBits/CompanyInformation.aspx,但是不要提交执行adplus -crash -pn aspnet_wp.exe -quiet, attach到IIS的工作进程上,等待crash在IE中输入信息,提交, 引发异常, dump文件就生成了进程异常终止有3种情况:1.在Lab2-Crash中,介绍了1st chance 和 2nd chance的概念,对于一个unhandled的exception,会得到两个dump,2nd chance exception会导致进程的结束.2. 进程结束是由于iisreset或preemptive recycle等外因.3. 由于一些严重的错误,如heap毁坏,栈溢出,内存不足等,进程必须退出本例中只得到一个dump说明crash不是由于unhandled exception引起的 用WinDBG打开dump文件,加载Symbols和SOS 执行 … Continue reading

Posted in Debug | Leave a comment

.NET Debugging Demos Lab 4: High CPU hang

原文http://blogs.msdn.com/tess/archive/2008/02/22/net-debugging-demos-lab-4-high-cpu-hang.aspx用于实验的页面是http://localhost/BuggyBits/AllProducts.aspx 执行 IISReset 重启IIS 打开http://localhost/BuggyBits/AllProducts.aspx,这是一个很耗时的操作,Tash Manager(Ctrl+Shift+Esc)显示CPU使用率那是相当的高 按照Lab3的步骤Setup一个performance conunter log "Lab4-CPU", 并启动它  输入命令 adplus -hang -pn aspnet_wp.exe -quiet 但是先不要执行. 执行 tinyget -srv:localhost -uri:/BuggyBits/AllProducts.aspx -threads:5 -loop:1 用5个线程进行压力测试,当CPU使用率飙上去之后,执行 adplus . 停下performance monitor log 用WinDBG打开dump文件,.symfix d:\_symbols  .reload .load SOS 或 .loadby sos mscorwks 显示CPU … Continue reading

Posted in Debug | Leave a comment

.NET Debugging Demos Lab 3: Memory

原文http://blogs.msdn.com/tess/archive/2008/02/15/net-debugging-demos-lab-3-memory.aspx用于实验的页面是http://localhost/BuggyBits/Links.aspx 一.设置performance monitor打开http://localhost/BuggyBits/Links.aspx,启动IIS的工作进程执行命令perfmon.exe 启动performance monitor点击"performance counters and alerts"右键点击"counter logs" 选择"new log settings", 取名为"Lab3-Mem" 点击"Add Objects…" 添加Performance Object".NET CLR Memory" 和"Process" 把sampling interval设置为1秒,因为页面执行时间很短 要运行counter log必须要有debug IIS工作进程的权限,否则拿不到任何.NET counter.如果当前帐号没有权限,就需要把"Run AS"从<Default>改成一个有权限的帐号,并设置password 二.进行压力测试运行 tinyget -srv:localhost -uri:/BuggyBits/Links.aspx -loop:4000如果出现OutOfMemory exception,请把loop从4000改成一个稍小的数字等tinyget运行结束后,让pefromance moniter再运行20-30秒,然后停止counter log Lab3-Mem,缺省情况下,此时会生成 c:\PerfLogs\Lab3-Mem_000001.blg 三.在performance monitor中查看performance log  … Continue reading

Posted in Debug | 1 Comment

.NET Debugging Demos Lab 2: Crash

原文:http://blogs.msdn.com/tess/archive/2008/02/08/net-debugging-demos-lab-2-crash.aspx 用于测试的页面为:http://localhost/BuggyBits/Reviews.aspx点击"Refresh"按钮,页面会抛出异常,VS Just-In-Time Debugger会询问是否Debug. 一. 检查 eventlogsevent viewer可提供大量有用信息,但是不同的OS/IIS/Framework组合会产生不同的Eventlog.对于W2k3, .NET 2.0 SP1,可直接知道错误的出处, 甚至StackTrace. 0xe0434f4d是.NET exception的Native exception code, 所有的.NET exception,SQLException, NullReferenceException 或 FileNotFoundException都会被转化成0xe0434f4d 二. 得到 Memory dump打开页面,不要点击"refresh" 按钮 在debugger目录下运行adplus -crash -pn aspnet_wp.exe运行后出现提示Attaching the debugger to: ASPNET_WP.EXE (Process ID: 4588)并且出现一个新的命令行窗口,这个新的命令行运行的是CDB,就是命令行下的WinDBG,负责监视系统中将要发生的异常. 下面这个表中列出了adplus 监视的event和exception,event和exception发生后对应的动作 Code … Continue reading

Posted in Debug | Leave a comment

[笔记]有关symbols的讨论 by Tess

原文见http://blogs.msdn.com/tess/archive/2005/12/05/why-do-i-get-weird-function-names-on-my-stack-a-discussion-on-symbols.aspx Symbols的内容Symbols包含以下信息:全局变量,局部变量,函数名,函数参数,结构定义,二进制代码所对应的原代码行号. Symbols的分类1.export symbols:对于一个包含可执行代码的dll,export symbols是它的一部分,有了这种export symbols,这个dll中的函数才可以被dll之外的代码调用.但是export symbols一般不包含函数的参数信息,而且并不是所有的函数信息都包含在export symbols中.如果只有export symbols,在debug过程中看到的调用栈的信息就很费解.2.pdb symbols(public symbols):public symbols包含函数名,全局变量,但是developer会隐藏一些函数的信息,因此public symbols并不包含所有的函数信息,这一点和export symbols相似3.private pdb symbols:包含最完整的信息. 如何找到对于的Symbols在WinDBG中Symbols的查找路径用命令 .sympath 或菜单 File-Symbol file path来指定. 除此之外,Debugger还会搜索正在被debug的dll所在得路径和环境变量_NT_SYMBOL_PATH有关Symbol路径,请参考WinDBG Help中“Symbol Path”中“Controlling the Symbol Path”一节debug过程中Symbols和它所对于的dll或exe通过timestamp 和 checksum关联起来,这就保证了就算查找路径下存在多个同名的Symbols文件,Debugger一样可以找到需要的那个. 使用了错误的Symbols会怎么样如果使用mscorsvr.dll的public symbols来观察调用栈(kb)会是:1212ef7c 791b578b 00000090 00009c40 00000000 kernel32!WaitForSingleObject+0xf 1212efa0 791dbe6e 00000000 … Continue reading

Posted in Debug | 1 Comment

.NET Debugging Demos Lab 1: Hang

原文地址:http://blogs.msdn.com/tess/archive/2008/02/04/net-debugging-demos-lab-1-hang.aspx 一. 观察及猜测用于实验的页面是FeaturedProducts.aspx打开5个浏览器同时刷新.根据页面上显示的开始时间(start time)和执行时间(execution time),可以看到5个页面start time几乎一样,说明5个连接是在同时建立的. 如果前后两次执行的start time之间有延迟,就说明不能和server建立并发的连接,这就需要修改IE的设置,方法是修改注册表:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]"MaxConnectionsPerServer"=dword:0000000a"MaxConnectionsPer1_0Server"=dword:0000000a 注意!需要打开5个IE实例而不是在一个IE中打开5个Tab,我实验的结果是:让5个Tab同时请求同一个链接,各个请求会排队执行,没两次执行的start time之间有5秒的时差 各个execution time是逐渐增加的,后一个比前一个使用的时间更长. start time和execution time 的实现如下protected void Page_Load(object sender, EventArgs e)  {      System.DateTime start = System.DateTime.Now;      if (!Page.IsPostBack)      {           //–Do something…       }       System.DateTime end = System.DateTime.Now;      lblStartTime.Text … Continue reading

Posted in Debug | Leave a comment

.NET Debugging Demos – Information and Setup Instructions

当你想学习时,老师就来了 Tess(http://blogs.msdn.com/tess/default.aspx)发布了一个名为.NET Debugging Demos的系列课程,共10 labs.她通过调试一个ASP.NET 小程序BuggyBits(http://blogs.msdn.com/tess/attachment/7431454.ashx)来演示如何处理死锁,性能,内存泄露等问题.主要的调试工具是WinDBG.Justin’s Tech Blog(http://www.cnblogs.com/justinw/archive/2008/07/08/1237849.html)有翻译.这种实验课的形式正和我的胃口:-) 以下是我的学习笔记. 实验器材:1. WinDBG注意在WinDBG的安装目录下(c:\program files\Debugging Tools for Windows (x86)),有一个名为adplus.vbs的脚本,用于抓取Memory Dump.用法见:Johan Straarup的文章:How to install windbg and get your fist memory dump(http://blogs.msdn.com/johan/archive/2007/01/11/how-to-install-windbg-and-get-your-first-memory-dump.aspx)在调试中,需要加载包含调试信息的符号表:.symfix c:\mycache  .reload "c:\mycache"是下载到本地的符号文件所在路径。 如果在Windbg里询问是否保存工作空间的的时候选择了保持,那么下次调式的时候,这个符号路径仍然有效。 2. SOS随.NET FWK安装, 所在目录为C:\Windows\Microsoft.NET\Framework\v2.0.50727, 是WinDBG用于调试.NET 程序的一个插件,为了方便WindDBG加载它,可以把它copy到WinDBG的安装目录下.在Windbg的命令行窗口运行".load<sos.dll所在路径>\sos.dll"命令来加载SOS,或者通过运行".loadby sos mscorwks"命令(这两种方式都是从Framework的目录加载的sos.dll)。如果sos.dll已经被拷贝到调试器目录,只要使用简单的".load sos"命令就可以了。 … Continue reading

Posted in Debug | Leave a comment

今日我,与你又试肩并肩——英雄本色二十年祭(ZT)

黄百鸣在他的书《新艺城神话》里提到1986年的时候,用了“风起云涌”四个字。之所以这么说,全因为新艺城公司所投资的英雄本色。   二十年后的今天,对于英雄本色的地位已经无须再多说什么,多少次香港的几十年几十大电影评选,它总是高居榜首。其历史意义也无须多言,自该片始,黑帮片成了香港电影除了功夫片之外另一永恒的主题,直至今日的无间道,黑社会,放逐,无不是在变换角度重复叙述着同样的江湖意气,家族恩怨,男儿尊严。   1989年给张彻祝寿的《义胆群英》里,倪震饰演的那个年轻人整天开口闭口都是小马哥的名言,还频频模仿到处藏枪,真实的反映了英雄本色对当时社会的巨大影响力。吴宇森与徐克联手打造的强烈的个人风格,情绪化的语言,流畅的画面,火爆的枪战,和横空出世的英雄形象,不知吸引了多少拥趸。当时不只香港和大陆为之倾倒,连韩国的风衣墨镜都卖到脱销。   无法不佩服周润发的演技,塑造出了小马哥这一深入人心的不朽角色。忽而长衣挟风潇洒不羁的浪荡在街头,忽而叼着牙签用假钞点烟往假腿上倒酒嚣张到极点,忽而出枪如风当者披靡傲视江湖,忽而蓬头垢面一瘸一拐的为人擦车混饭,无一不令人信服,让你觉得英雄就应该是这样的。   最著名的那一幕枪战多少年来为无数人津津乐道。风林阁里南国夜曲靡靡醉人,小马哥拥着歌女在长廊内辗转反侧,吴宇森经典的慢镜头让这一幕显得格外优雅迷人,周润发从轻佻的浪笑到狠辣的眼神间的转换是如此自然融通,翩翩舞步与腾腾杀气完美的诠释了什么叫做暴力美学。   然而,我更喜欢的场面,是之前小马在街头读报得知豪哥失手的消息,他扔下报纸面无表情的走过天桥,背影落寞,脚步坚定。还有三年后他放下从前的骄傲,衣衫褴褛的拎着水桶抹布,坦然地捡起阿成扔在地上的钞票,一瘸一拐的推着小车回到地下室,大口嚼着盒饭。这时阿豪现身:“小马,你写给我的信,不是这么说的。”兄弟的手又紧紧握在一起。每次看到这一幕,我总是会想起少林寺前段誉虚竹为了萧峰挺身而出并肩对敌,想起李寻欢拉起失去斗志终日醉酒的阿飞,想起李沉舟悲怆如风雪的痛呼柳五……   最是英雄落寞时。   英雄本色,说的本就是男人在落魄失意时,怎样找回尊严的。然而,当我们还是未经世事的懵懂少年,挤在黑暗狭小烟雾缭绕的录像厅里,为“我失去的东西一定要拿回来”而满堂喝彩,为枪林弹雨的决战而心潮澎湃,我们何曾真的看懂周润发眼中英雄末路的不死之心,真的明白狄龙人在江湖的无奈,真的读懂银幕背后吴宇森那份大志难舒的沉郁呢?   那一年,吴宇森40岁。暴力美学大师十余年来从邵氏到嘉禾再到金艺城,只能拍些不着边际的喜剧片糊口,英雄情怀无处施展。冠盖满京华,斯人独憔悴,John Woo失落中精神恍惚,把施南生的手当烟灰缸猛按。   那一年,狄龙40岁。一年前他离开了为之效力十八年的邵氏,手中拿着一封辞退信:谢谢你为公司多年来做出的成绩。曾经的香江第一美少年正品尝着人老珠黄的凄凉。   那一年,周润发31岁,正处在个人事业的最低谷,人生的二次创业是如此艰难,长剧之王走上大银幕却似乎无法再现辉煌,所拍电影无不赔钱,江湖人称毒药发。   真想不到香港的夜景原来这么美   这么美的东西一下就没有了,真不甘心   幸好,香港永远是盛产草根神话的地方,那个时代还是英雄的时代。一个失意导演,一个过气明星,一个票房毒药,在困顿中凑到一起,发出了惊天动地的呐喊,一鸣惊人。从此拨云见日,潜龙升天。   让我们记住1986年吧。   那一年,狄龙凭豪哥一角荣获金马影帝,姜大卫忽然到场祝贺,疏远多年的两兄弟紧紧相拥,狄龙激动得语无伦次。第二天香港所有报纸头版都是两人和好的大幅照片,香江都为他们沸腾了。   翌年金像奖颁奖礼,刚从片场赶来的周润发一身夹克牛仔就匆匆上台:“这个奖,我等了三年了,三年啊!”结果奖座都被他捏断了。台下观众似乎比他还兴奋,热烈的掌声打断了他的发言。最后周润发感谢了三个女人,顺便又爆出一则新闻:“我要感谢的第三个女人,就是我的未婚妻——陈荟莲。”满场震惊。他更当场从衣袋里掏出两张请柬送给司仪郑裕玲和钟景辉,上面的日期是一个月后的1987年5月6日。情路坎坷的浪子终于能执子之手与子偕老,从此发哥发嫂一路风雨兼程直到今天。   多年后吴宇森说:“在我最失意、失落,曾经一度被人认为已经落伍;也在我最要肯定自己、最需要朋友的时候,徐克大力支持我重拍龙刚导演的六十年代名作《英雄本色》。而在拍摄期间,许多时我都能从周润发、狄龙、张国荣和徐克之间,看到我自己,同时也更加了解别人,也终于,我能够在影片中找回了我的尊严。虽然如此,我可不自视为英雄,我只不过重视友情,晓得凡事感激。”   那真是一个美好的年代。   那时徐克和吴宇森还是困境中互相帮扶的好朋友,还能坐在一起亲密合作,施南生还是新艺城的管家婆,麦嘉石天黄百鸣三巨头的事业正如火如荼,奋斗房里老友鬼鬼,七人组讨论的热火朝天。   那时张国荣还像个孩子,面容光洁,笑靥灿烂,跨着摩托意气风发,一如他正在追赶谭咏麟的脚步。他为这部片带来了不一样的活力和层次,更有一首当年情唱得人如醉如痴。   那时李子雄还是个小公务员,朝九晚五,偶尔拍拍广告挣点零花钱。谁能想到他演了这第一部戏就拿到了金马奖最佳男配角。影片杀青时周润发对他说:“子雄你看拍完了这部戏,有多少年才能拍这么一部电影。”他还很茫然不明所指。他不知道,周润发那一年拍了11部片,为人记住的只有这一部英雄本色。   那时叶锦添还只是个潦倒的美术助理,常常一年拍不上一部戏,穷的连午餐都吃不上,“最难的是还要顶着家人失望的眼神、埋怨的唠叨,觍着脸伸手,找哥哥啊、小妹啊,一千一千地借钱过”。   那时小美刚帮她的偶像写了几许风雨,拿了当年十大中文金曲奖。罗文的歌声在酒吧里悠悠飘过时,小马正叼着牙签对阿成激奋的细说当年,旁边豪哥平静如水的微笑,正是歌词的最好解读:“无求一生光辉唯望斗志不会断,见惯风雨见惯改变尽视作自然”。   那时还有老辣的曾江,柔美的朱宝意,憨直的成奎安,更有黄霑与顾嘉辉的经典合作,空前绝后的徐克与吴宇森的联袂客串。真正的黄金时代,此情难再。   那时,罗大佑在台湾邀集群星合唱祈愿,歌名“明天会更好”与英雄本色的英文片名“A Better Tomorrow”正相呼应。影片中孩子们咿咿呀呀,稚嫩的童音唱起来别有一番情怀。“谁能不顾自己的家园,抛开记忆中的童年”,英雄侠士,江湖意气,不过是我们飘零的童年梦而已。   拥着你,当初温馨再涌现   心里边,童年稚气梦未污染   今日我,与你又试肩并肩   当年情,此刻是添上新鲜   “豪哥,你还回香港吗?”朱宝意问。狄龙笑而不语,转身离开教堂。   那时,吴宇森还不懂放白鸽吧。 

Posted in 摘抄转贴 | Leave a comment