在Visual C++ 2008中,我要“捕获”生成的异常,如下所示:

try {
    int foo = 20;
    ::fgetpos(0, (fpos_t*)&foo);
}
//...

以下是为成功捕获而进行的调整:
  • SEH已激活(/ eha)
  • 我添加了一个catch(...)
  • 我添加了_set_se_translator vector 。
  • 我已添加/调整了SEH语法:__try / __except(EXCEPTION_EXECUTE_HANDLER)

  • 简而言之,我已经尝试过“书中的所有内容”,但仍然无法捕捉到异常。如果我用::fgetpos替换对int hey = foo / 0的调用,那么突然上述所有技术都能按预期工作。因此,我从::fgetpos处理的异常在某种程度上“特别”。

    有人可以解释为什么:: fgetpos错误似乎无法捕获,以及如何解决该错误吗?

    更新在VS IDE中执行时,输出窗口不会命名异常。它说的全部是这样的:



    不是很有帮助。当我从命令行运行控制台应用程序时,出现崩溃对话框。对话框的“问题详细信息”部分包含以下信息:

    最佳答案

    由于转储中的代码与STATUS_INVALID_CRUNTIME_PARAMETER相对应,请尝试 _set_invalid_parameter_handler

    10-06 11:30