当使用命名可执行文件的参数运行时,'which'实用程序将告诉您在路径中找到的具有该名称的第一个可执行文件(如果找到的话).这样可以很好地了解将运行哪个版本的可执行文件.(如果这个描述不完整,请原谅我,但它传达了一般的想法)
我正在寻找'哪个'实用程序的端口,一个Powershell命令,或者其他一些我不知道的实用程序.
我查看了以下SO问题(并将在所选答案中尝试for循环逻辑).我更喜欢有一个实现此功能的命令,并希望查看是否存在.如果不存在这样的东西,那么该逻辑很容易被放入脚本中:
CodeProject上
的"winwhich"实用程序存在.它在6年左右的时间内没有更新,当我在Win 7机器上安装VS 2010时,它在运行时崩溃了.我打算尽职尽责地找出崩溃的原因,但直到今晚才有时间.
有没有人在Windows上使用另一个实用程序或命令来模拟此功能?
这是我得到的情景.我正在测试的函数有一个错误条件,如果命中,它会调用一个正常的退出函数来释放任何全局内存,关闭句柄并退出程序.
显然,我想写一个测试,发现这个条件,以确保它被正确处理,但我不希望优雅的退出例程实际退出程序,因为这将停止任何剩余的测试.这意味着剔除优雅的退出例程.存根而不是调用exit的问题是控制流返回到被测函数(由于例程应该退出,这是不好的).
这是一个实际的问题:我们如何将控制从短线函数返回到测试而不是被测试的函数?
我可以做一个setjmp/longjmp,但由于"gotos"一般不好,我会喜欢任何其他的建议.(请记住,这是程序C,而不是C++,因此就我所知,异常不起作用)
编辑 正如索伦和其他人在下面提出的那样,当测试是一个好主意时,退出时什么都不做.无论是通过#define语句还是通过exit()例程的存根,有几种方法可以做到这一点.
但是,这样做会带来我真正解决问题的问题(除了setjmp/longjmp).看看这个场景:
void gracefulExit() {
// Clean Up
exit();
}
void routineUnderTest() {
// Do some calcs
if (someBadCondition == TRUE)
gracefulExit()
// Do some more calcs
}
Run Code Online (Sandbox Code Playgroud)
如果exit()在这种情况下什么都不做,gracefulExit()会将控制权返回给测试中的例程,这不应该发生.因此,我需要一种方法使exit()(或gracefulExit()的存根版本)将控制返回到测试而不是测试中的函数.
setjmp/longjmp(又名goto)是一种方法,虽然不是一种优雅的方式.关于如何解决这个问题的任何想法?
编辑#2
正如fizzer所提到的,setjmp/longjmp是处理这种情况的有效方法.这是我永久处理它的可能方式.
但是,我从同事那里得到了另一种可能的解决方案.而不是将gracefulExit()例程#defining到存根例程,请执行以下操作:
#define gracefulExit return NULL
Run Code Online (Sandbox Code Playgroud)
正在测试的特定函数处理这个很好,因为NULL是它的有效返回值.我还没有在每种可能的情况下对此进行测试(例如,具有void返回值的函数).如前所述,我可能会使用setjmp/longjmp方法来解决这个问题,但如果这个额外的解决方案为某人提出了一个想法,那太好了!
这是我发布的第一个问题,如果我做任何失礼,我很抱歉
使用C.
在我的程序中,我创建了一个全局变量指针
double *correlationData;
Run Code Online (Sandbox Code Playgroud)
在main中我创建了这个局部变量:
int arrayLength = 0;
Run Code Online (Sandbox Code Playgroud)
在main中,我在for循环中有一个if语句,其中包含
arrayLength++;
Run Code Online (Sandbox Code Playgroud)
在for循环之后,我启动一个数组并将其分配给指针
double correlationArray[arrayLength];
correlationData = correlationArray;
Run Code Online (Sandbox Code Playgroud)
但是我在代码的这一部分遇到了"分段错误",我无法弄清楚原因.如果我打印出arrayLength它是1900000.首先我想也许这对于一个数组来说太大了所以我试过了
correlationData = correlationArray[1900000];
Run Code Online (Sandbox Code Playgroud)
这没有任何错误.为什么我收到此错误?