相关疑难解决方法(0)

为什么我不能在Windows 7中测试返回码?

我有一个非常复杂的程序失败了,我已经将它简化为带有批处理文件和C程序的测试集.

我的C程序使用ExitProcess将errorlevel传递回批处理文件.有时在Windows 7(Microsoft Windows [Version 6.1.7600])上,错误级别未正确解释.

我认为这应该永远运行.在Windows XP上,它似乎永远运行.在两台不同的双核Windows 7机器(一台64位,一台32位)上,它会在几分钟内失败.

我无法想象我做错了什么,但是如果在Windows 7上有一些关于ExitProcess的搞笑,我想我会问.这里有什么我非法做过的吗?

cmd.exe的批处理文件test.bat:

@ECHO OFF
SET I=0
:pass
SET /A I=I+1
Title %I%
start/wait level250
if errorlevel 251 goto fail
if errorlevel 250 goto pass
:fail
Run Code Online (Sandbox Code Playgroud)

程序级别250.c:

#include "windows.h"

static volatile int Terminate = 0;

static unsigned __stdcall TestThread(void * unused)
    {
    Terminate = 1;
    return 0;
    }

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
    {
    CreateThread(NULL, 0, TestThread, NULL, 0, NULL);

    while (Terminate == 0) Sleep(1);
    ExitProcess(250); …
Run Code Online (Sandbox Code Playgroud)

c batch-file windows-7

5
推荐指数
1
解决办法
1105
查看次数

在流程退出时中断Visual Studio

我在确定导致流程退出的原因时遇到了一些困难。我正在调试的一些关闭代码中有一个断点,但是在该断点处插入调试器并单步执行之后,整个过程将立即退出。每个线程在输出窗口中报告退出代码为-1。那时进程中有很多线程,并且代码库很大,因此很难找到问题的根源。

我已经尝试安装一个std::atexit函数,但是没有成功。我还尝试了覆盖SetUnhandledExceptionFilter,以防它是由崩溃引起的,并且也不会被击中。该项目的异常已禁用(#define _HAS_EXCEPTIONS=0),因此我无法调用std::set_terminatestd::set_unexpected

还有其他方法可以确定导致流程退出的原因吗?当进程即将终止时,在调试器中中断的某些选项?

c++ atexit visual-studio visual-c++

3
推荐指数
1
解决办法
2122
查看次数

标签 统计

atexit ×1

batch-file ×1

c ×1

c++ ×1

visual-c++ ×1

visual-studio ×1

windows-7 ×1