上个周末,到公司看点东西。还有其他的人在忙,有个同事过来找我。
powershell你熟么?
还行吧,咋啦?
过来帮我看看,老是报错,我找不到原因。
于是,我就过去看发生了什么。
同事是在改我们项目上的powershell脚本,因为我们的项目是Windows的,所以很多东西我们都是用powershell做了。比如编译、构建、运行测试、初始化开发环境数据库,甚至部署。
哦,对,鉴于有些朋友不是IT行业的从业者,所以,我先简单介绍一下,什么是powershell。下面是维基的介绍:
Windows PowerShell是微软公司为Windows环境所开发的壳程序(shell)及脚本语言技术,采用的是命令行界面。这项全新的技术提供了丰富的控制与自动化的系统管理能力。
微软之所以搞出这个东西来,是因为
UNIX系统一直有着功能强大的壳程序(shell),Windows PowerShell的诞生就是要提供功能相当于UNIX系统的命令行壳程序(例如:sh、bash或csh),同时也内置脚本语言以及辅助脚本程序的工具。
如果看不明白,没有关系,反正我们要讲的重点不在这个上面。你们知道这是一门语言,可以编程序,就好了。
回到主题,同事遇到的问题是,他改了一个文件,只在里面加了一点点东西。然后运行的时候,就挂了。报的错里面说,你的语法不对,有个单目运算符后面没有参数。
我还是解释一下什么是单目运算符吧。
所谓单目运算符,就是运算的时候,只需要一个变量,这样的运算符就是单目运算符。比如负号“-”,就是个单目运算符。比如取反“!”,也是。
很容易理解,加号“+”是个双目运算符。就是说,你想让“+”运算,需要提供两个参数给它,a+b,才能运算。
有眼尖的朋友会发现,“-”除了可以做负号,还可以做减号啊。没错!减号是双目的,负号就是单目的了。
OK。继续我们的故事,我跟同事就顺着报错当中提到的那个提示,去找。同事告诉我说,他就改了一个文件,然后打开让我看。我看了半天,觉得他写得都对。没有哪个单目运算符缺失了参数。
可是,一运行就报错。喋喋不休的告诉我们,你们的单目运算符少了一参数啊,喂!
我们前后看了好几遍,也试了好几遍。还是出错,而且是同样的错误。我俩都觉得见鬼了…
没办法,一行一行走吧。
我们回到了程序最开头的位置,看它需要加载哪些东西。如何根据我们输入的参数,去调用相应的方法,如何最终调用到那个被同事改过的文件。
遛了一遍下来,发现,没有什么问题啊。什么语法错误都没有。可是运行后,那个红红的错误还在那里…
没辙,我们开始一行行的打印一些输出信息,试图通过这个方法来定位到底是在哪里出了错。经过反复的尝试和排查,很快我们就到了调用那个文件的地方,出错了。
那说明,确实是这个文件有问题。可是我们去检查那个文件,明明什么问题都没有。到底怎么回事啊…
我尝试着把文件路径在命令窗口上打出来,也成功出来了,没有问题。但是一尝试运行,就报之前的那个错误。真是诡异啊…
我俩又回到那个编辑的文件,盯着同事刚改了的那行代码看,真的是一点问题都没有。那为什么就运行不了呢?
无意中,我瞥了一眼编辑器的左上角。那里有当前文件的路径,恍惚之间发觉有些不对。
我把看到的那个路径打印出来,然后把调用文件的路径也打印了出来。发现二者十分相似。
我们编辑的文件路径是
C:\aaa\bbb\ccc\ddd\funtion\xxx.ps1
而代码中调用的文件是
C:\aaa\bbb\ccc\ddd\xxx.ps1
就差一个文件夹…也就是说,我们费劲巴拉改的那个文件,根本就不是代码运行中调用的那个。
于是,我们把代码调用的那个文件打开,看看内容,发现果然有相应的错误。改掉,运行,一切正常…
所以,今天的重点来了,调试代码的首要技能:
检查你改的文件与运行的文件,是不是同一个。
如果喜欢我的文章,欢迎扫描下图,关注我的微信公众号。
网友评论