【发布时间】:2015-08-04 21:12:05
【问题描述】:
我有单元测试来测试我的功能是否不允许使用封闭的套接字。所以它看起来像这样:
closesocket(sock);
int result;
result = getsockopt(sock,SOL_SOCKET,SO_TYPE, type, len);
if(result == SOCKET_ERROR)
//write error etc.
在 Windows 平台上调用 getsockopt 不会引发异常“0xC0000008:指定了无效句柄。”。在 Windows Phone ARM 平台上,它会引发异常,虽然我可以关闭 First-chance 异常,但我不能真正关闭未捕获的异常。
尝试
try{
getsockopt();
}
catch(...)
{}
不起作用。有没有办法让这个异常静音?
编辑
我想指出我是故意先调用 closesocket(sock) 然后再调用 getsockopt() 因为我想测试我调用 getsockopt() 的函数是否会拒绝这种情况。在 Windows 上,我可以顺利地运行我的测试,因为 getsockopt 不会抛出异常,而在 Windows Phone ARM 上它会,让我坐下来等待这个调用,然后单击继续。
【问题讨论】:
-
首先,静默异常是一种糟糕的模式。找到问题并解决它。其次,我很确定 Window 的 SEH 或 .NET 异常与 C++ 的
catch(...)不兼容。
标签: c++ visual-studio