以下是更多背景信息:最近我注意到,在运行我的Eclipse单元测试构建时,如果我从启用SDL的测试开始,它会打开SDL窗口并在能够启动测试之前冻结约20秒钟。在随后的测试中(其中调用SDL_Quit()并重新初始化SDL作为测试过程的一部分),此延迟不存在。现在我已经确定,只有当可执行文件的名称恰好为"game.exe"时才会发生这种情况!如果我将其重命名为任何其他文件名,则可以快乐地运行测试,像通常一样在一秒内初始化SDL系统。以前我曾认为,可能存在某种错误导致我的Eclipse构建出现这种行为,而在makefile构建中则不存在,但事实证明,如果我取出Eclipse构建并重命名其可执行文件(它所在的项目文件夹称为game,因此为game.exe),则它不会表现出这种行为。
同样,我将我的makefile构建(其文件名为entropy_unittest_disp.exe)重命名为game.exe,然后它就开始这样做了。我将其重命名为game,它也会这样做(当我使用mingw的bash时运行,不带.exe扩展名,资源管理器无法识别它是可执行文件)。但是,如果我将其更改为game.exx,则它会正常工作。
这是什么黑魔法?为什么程序的功能取决于其文件名?我确实查询argv[0],并且实际上我打印它的值到控制台(用于调试目的),但毫不奇怪,它只打印程序及其路径。在我的程序中从未对其执行任何逻辑。
我尝试运行GDB以查找它在哪里冻结,但是一旦我按下Ctrl + C,GDB就会退出。
有人知道可能是什么原因吗?病毒吗?
编辑:我从此网站下载了这个演示:http://www.sdltutorials.com/sdl-opengl-tutorial-basics/ 提取它,将文件重命名为game.exe,是的,同样的事情发生了。这是什么情况?接下来我将尝试运行依赖项检查器,看看是否有什么东西试图钩入它。