我在 MSVC++ 2010 中使用 CreateProcess 函数创建子进程,在此之前使用 SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); 设置错误级别;
任务是运行控制台程序并隐藏任何烦人的消息,如著名的“不要发送”对话框,防止程序在严重错误后正常完成。
所以,如果我创建包含一些错误的子进程(例如除以 0)它工作正常,但是当我创建带有矢量索引溢出的子进程时,它会导致不可避免的断言错误消息(当然在调试模式下)。这是这个程序的代码:
#include <stdlib.h>
#include <vector>
int main(int argc, char *argv[])
{
int index = atoi(argv[1]);
switch(index)
{
case 0:
{
int k = 3, j = 3;
j -= k;
k = k/j;//division by zero
}
case 1:
{
std::vector<int> k(2);
int i = k.at(2);//index is out of bounds and it causes assert failure
}
}
}
在发布配置中它工作正常,但在调试中 - 它会导致断言错误对话框。当然,我可以将_set_abort_behavior添加到子程序代码中,但这不是我的选择。
对于在 Debug 配置中编译的程序,有没有办法超越这个断言错误对话框?