Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在程序执行时忽略windows错误提示?_Windows_Batch File_Cmd_Ignore - Fatal编程技术网

如何在程序执行时忽略windows错误提示?

如何在程序执行时忽略windows错误提示?,windows,batch-file,cmd,ignore,Windows,Batch File,Cmd,Ignore,我有一个在Windows cmd上运行的程序,当程序抛出错误时,它会一直等待用户输入忽略/继续或取消,但我有一个批处理文件,它会在出现错误时自动重新启动程序,但由于它一直在等待用户输入,我不得不去那里按一个按钮 :unturned echo (%time%) Unturned started. cd masterserver cd VisualStudio cd Debug masterserver.exe @echo All done! @echo Masterserver list

我有一个在Windows cmd上运行的程序,当程序抛出错误时,它会一直等待用户输入忽略/继续或取消,但我有一个批处理文件,它会在出现错误时自动重新启动程序,但由于它一直在等待用户输入,我不得不去那里按一个按钮

:unturned

echo (%time%) Unturned started.

cd masterserver
cd VisualStudio
cd Debug
masterserver.exe  

@echo All done!
@echo Masterserver listening on port: 23466

echo (%time%) WARNING: Unturned closed or crashed, restarting. >>c:\crashlog.txt

ping 1.1.1.1 -n 1 -w 10000 >nul

goto unturned
如何使其忽略错误并自动继续

以下是提示的图像:


当在
masterserver.exe
中发生断言失败时,将显示弹出消息。失败表明存在代码错误,因为它正在编译时测试一个在运行时应该始终为true的条件,但该条件实际上为false

在本例中,错误发生在第528行的
CCRakNetUDT.cpp
中的
CCRakNetUDT::OnAck()。该行正在调用
RakAssert(rtt<10000000)
,其中
rtt
OnAck()
的输入参数。断言是
rtt
的值应该始终小于
10000000
,但实际上不是

void CCRakNetUDT::OnAck(CCTimeType curTime, CCTimeType rtt, bool hasBAndAS, BytesPerMicrosecond _B, BytesPerMicrosecond _AS, double totalUserDataBytesAcked, bool isContinuousSend, DatagramSequenceNumberType sequenceNumber )
{
#if CC_TIME_TYPE_BYTES==4
    RakAssert(rtt < 10000);
#else
    RakAssert(rtt < 10000000); // <-- line 528
#endif
RakNetDefines.h

#ifndef RakAssert
#if defined(_XBOX) || defined(X360)
                    
#else
#if defined(_DEBUG)
#define RakAssert(x) assert(x);
#else
#define RakAssert(x) 
#endif
#endif
#endif
根据:

计算表达式,当结果为false时,打印诊断消息并中止程序

assert宏通常用于在程序开发过程中识别逻辑错误。当出现意外情况时,使用它停止程序执行,方法是仅当程序运行不正确时,将表达式参数的值实现为false通过定义宏
NDEBUG
,可以在编译时关闭断言检查。通过使用
/DNDEBUG
命令行选项,可以在不修改源文件的情况下关闭assert宏。在包含
之前,可以使用
#define NDEBUG
指令关闭源代码中的assert宏

当表达式计算结果为false(0)时,assert宏将打印一条诊断消息,并调用
abort
终止程序执行。如果表达式为真(非零),则不执行任何操作。诊断消息包括失败的表达式、源文件的名称以及断言失败的行号

诊断消息的目的地取决于调用例程的应用程序类型。控制台应用程序始终通过
stderr
接收消息在基于Windows的应用程序中,
assert
调用Windows
MessageBox
函数来创建一个消息框,以显示消息以及
OK
按钮。当用户单击
确定
时,程序立即中止

当应用程序链接到运行时库的调试版本时,
assert
创建一个带有三个按钮的消息框:
Abort
Retry
Ignore
。如果用户单击“中止”
,程序将立即中止。如果用户单击“重试”,将调用调试器,并且如果启用了实时(JIT)调试,则用户可以调试程序。如果用户单击
Ignore
assert
继续正常执行:使用
OK
按钮创建消息框。请注意,当存在错误条件时,单击“忽略”,可能会导致未定义的行为

未定义
NDEBUG
时,在C运行时库的发行版和调试版中都会启用
assert
定义
NDEBUG
时,宏可用,但不计算其参数,且不起作用
。启用时,
assert
宏调用
\u wassert
以实现它。其他断言宏,
\u ASSERT
\u ASSERTE
\u ASSERT\u EXPR
,也可以使用,但它们仅在定义了
\u DEBUG
宏并且在与C运行时库的调试版本链接的代码中时,才计算传递给它们的表达式

因此,如果要禁用此特定弹出错误,您需要:

  • 找到错误的根本原因并修复它(或者联系Unity作者进行修复),因为它是一个代码错误

  • 编译
    masterserver.exe
    以供发布,而不是调试,因此
    RakAssert()
    是不可操作的

  • 在源代码中、在项目解决方案中或通过命令行上编译器的
    /D
    开关定义
    NDEBUG
    ,因此
    assert()
    是禁止的


  • 只需知道,如果错误再次发生,禁用断言将有应用程序崩溃或行为不正确的风险。

    如果有人出现此问题,则更新:
    正如Remy所说,我在发布模式下编译了它,问题完全解决了,应用程序现在运行正常,没有任何错误。

    由于脚本本身没有此类提示,因此必须由masterserver自己在退出之前进行提示。它有命令行参数来禁用提示吗?我从这里下载它并用visual studio编译,然后我用这个批启动exe,不知道命令行参数哇,谢谢。我已经在unity论坛上发布了,但正如我所看到的,代码来自raknet本身,而不是unity,raknet fórum似乎被禁用。由于修复代码不是一个选项,我想我需要暂时忍受错误,我正在尝试/d命令行,看看会发生什么。
    #ifndef RakAssert
    #if defined(_XBOX) || defined(X360)
                        
    #else
    #if defined(_DEBUG)
    #define RakAssert(x) assert(x);
    #else
    #define RakAssert(x) 
    #endif
    #endif
    #endif