缘起
最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的。代码是同一份,vs
版本也一样(打的补丁也一样)。编译出来的程序在两台电脑上运行的结果就是不一样。惊不惊喜,意不意外?如果是你遇到了这种情况,你会怎么调查呢?:upside_down_face:
{% note info %}
说明:
为了跟大家分享这个问题,我事后在自己的机器上重新把整个过程梳理了一遍,并保存了process monitor
抓取的事件文件,方便感兴趣的读者亲手做实验。
为了行文方便,下文把程序功能正常的电脑称作A
,把程序功能不正常的电脑称作B
。
{% endnote %}
排查问题
通过对比程序在两台电脑上的运行过程的不同点可以比较有效的解决这种问题。
下面是我的思路:
- 首先,排除代码不一致的问题。把
A
上的代码拷贝到B
上,编译,运行,功能不正常。 - 把
A
上的整个Debug
目录(程序所在的目录)拷贝到B
上,运行,依然不正常。 - 对比两台电脑上的环境变量,排除两台电脑的环境变量不一致导致的问题(尤其是
PATH
,会影响dll
加载顺序)。