一次Debug经历

    周五天晚些时候,部门发布了一个“世界末日”版本的产品,我们小组参与了其中Office插件的开发工作。这算是一个比较重要的节点。产品发布后,在同事机器上安装部署之后,Office插件发现了一个比较严重的Bug,就是用户在打开一个已经存在的Excel文件的时候,我们的插件不能正常加载,因为之前开发调试的时候,都是直接选择Excel软件为启动项的,这样,每一次都是直接打开的Excel程序,而不是一个文件。在检查这个Bug的时候又发现了另外一个比较严重的Bug,就是Excel关闭之后,任务管理器中的Excel.exe这个进程没有关闭,这个Bug在开发阶段我注意到了,以为是开发阶段调试的时候才有的,所以没有太在意。于是乎跟领导们反应之后,领导过来说这个Bug能不能修复,最好能修复,不可以的话,叫测试那边注意一点儿就可以。我说可以,但是需要一点儿时间。我和另外一个同事开始寻找解决方案。试过几种方案问题依然没有进展,由于快周末了下班后我就让同事早点儿回去,自己吃完饭后又查了一会儿,没有进展。
    感觉有点累,于是抱着两本刚买的书就往家走。回来之后就洗漱完了之后就用热水泡脚。脑袋中还是想着那个问题怎么搞,于是打开电脑又在网上搜了一些解决方案,依然无解。于是在MSDN上用蹩脚的英文发了我有史以来的第一个问题,以前一般是在StackOverflow上面去找答案或者回答别人的问题。

一次Debug经历_第1张图片

    发完了之后,不到几分钟之内,有个家伙回复了我,有点儿小激动。大意思是,你代码可能有问题导致加载不上。可以自己使用System.Diagnostic.Debugger.Break()调试一下。我一开始觉得没有回答上我的问题,但是突然又好像明白了什么。不过实在是太累,就困了。
    第二天下午决定去公司试一试刚才那方法,,于是兴冲冲的跑去公司,里面1个人都没有。打开电脑按照提示的方法修改代码,编译完成之后,脱离Visual Studio,直接运行Excel文件,发现Excel竟然提示代码中有断点,要不要调试,当然要调试,看到这个弹出框我无比开心,于是调出Visual Studio,真的能够进行逐步的调试,因为之前觉得,脱离了Visual Studio,或者即使是使用Attach Process的方式在目前这种问题下是没有办法调试的。突然觉得那家伙给我的回答太有价值了,他似乎明白我不知道咋调试一个外部的Excel程序。有了这个帮助,马上就定位到了问题的所在。加载.xla文件,也就是加载自定义函数出了问题。于是乎根据提示的问题描述,试着在网上找答案,由于藕装的是个中文版的Visual Studio,导致提示信息都是中文的,这个非常麻烦,因为根据中文的错误信息在中文网站上根本找不到问题,于是乎把错误提示翻译成了英文,一下子就在MSDN上找到问题所在了,如下图。所以说装英文版的开发工具不只是装13,而是能够大大提高工作效率。下周上班就换个最新的英文版的VS2012.

    一次Debug经历_第2张图片

    重点是中间的那段英文的第二句话。就是说像xla这些外部加载的文件都是由Add-in管理器来管理的,但是这个管理器只有在有一个可见的处于打开状态的Excel工作簿时才能正常工作。平常我们直接打开Excel的时候,Excel会帮助我们新建一个默认的工作簿,而当用户要打一个工作簿时,由于在打开文件之前插件是需要加载进来的,由于Excel判断用户是打开一个工作簿,所以不会创建默认的工作簿,在这种没有默认工作簿的情况下,插件加载.xla自定义函数就会报错。

    这个问题搞定之后,开始解决登录插件后,关闭Excel,后台进程没有关闭的问题。于是又是一顿google,终于在StackOverflow上找到了令我满意的答案:

    一次Debug经历_第3张图片

    于是按照上面的思路,在本机上测试没问题,于是乎又在虚拟机上的XP系统,03系统上测试了一番,估计是XP的内存管理不太好,导致还是回收不掉,不过算是解决了一大半的问题吧,下周上班再好好看看。 修完这两个Bug,大概花了1个半小时,哈哈……

你可能感兴趣的:(一次Debug经历)