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を追加することもできますが、それは私にとってのオプションではありません。
デバッグ構成でコンパイルされたプログラムのこのアサートエラーダイアログを超える方法はありますか?