- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试让 googletest 在我的 C++ 项目上运行,其中一部分涉及使用 EXPECT_THROW(statement, expected_exception);
。我正在使用选择了“Apple LLVM Compiler 3.0”的 XCode。所有这些都在 Snow Leopard 10.6.8、XCode 4.2 上进行。
即使使用显式虚拟案例 EXPECT_THROW(throw std::runtime_error(), std::runtime_error);
自己展开宏(from gtest/internal/gtest-internal.h:1114 GTEST_TEST_THROW_)后
bool gtest_caught_expected = false;
try {
// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);
throw std::runtime_error("sigh");
}
// catch (expected_exception const&) {
catch (std::runtime_error const& e){
std::cout << "const ref caught" << std::endl;
gtest_caught_expected = true;
}
// added by me to check it wasn't a const& issue
catch (std::runtime_error e){
std::cout << "type caught" << std::endl;
gtest_caught_expected = true;
}
catch (...) {
//gtest_msg.value =
// "Expected: " #statement " throws an exception of type "
//#expected_exception ".\n Actual: it throws a different type.";
//goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__);
std::cout << "unknown caught" << std::endl;
}
然后使用 catch catch
在 gdb 中设置一个断点并单步执行,我可以看到 catch(runtime_errors)
被跳过,而 catch( ...)
正在执行。如果我注释掉 catch(...)
block ,则会执行正确的 catch(std::runtime_error const& e)
语句。
将我的编译器设置为“LLVM GCC 4.2”解决了这个问题,但我想以 clang++ 为目标。
我单独的 EXPECT_THROW 测试用例在命令行上使用 clang++ 手动编译时有效,所以我认为它一定是一些深奥的 xcode 或 llvm 设置?或者也许 LLVM 是如何将我的 runtime_error 变成其他类型的?我尝试了 catch throw
但可以在该上下文中获取任何类型信息。
有没有人以前遇到过这种情况或有任何想法?
编辑:
所以我还链接了 libprofile_rt.dylib,以及编译器标志 -fprofile-arcs -fprofile-coverage
。删除编译器标志 -fprofile-arcs
解决了这个问题。很烦人,因为它破坏了我的报道报告。
(与 librpofile_rt.a 的链接有同样的问题)
当然,我不是唯一看到这一点的人,因为 LLVM 据说使用 googletest 作为他们的测试用例?!
不确定我是否应该将此作为答案发布,或者是否会有更有知识的人出现并提供真正的解决方案。
最佳答案
稍等片刻后,似乎没有已知的修复方法,所以我将按照上面的方式发布我的答案。它可能在 Xcode 4.3 中得到修复
所以我还链接了 libprofile_rt.dylib,以及编译器标志 -fprofile-arcs -fprofile-coverage。删除编译器标志 -fprofile-arcs 解决了这个问题。很烦人,因为它破坏了我的报道报告。
(与 librpofile_rt.a 的链接有同样的问题)
当然,我不是唯一看到这一点的人,因为 LLVM 据说使用 googletest 作为他们的测试用例?!
关于c++ - catch(...) 吞下 xcode llvm 3.0 中的所有其他捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919500/
我需要浏览一个文件,然后将捆绑包与另一个文件连接起来。我尝试了下面的 gulp 代码,但它无法正常工作。 当我在 mymodule.js 中进行更改并运行 gulp 时,这些更改会出现在包文件中,但不
尝试创建 Flux 存储。当我运行 gulp 并检查我的 index.html 时,出现错误“Uncaught TypeError:监听器必须是函数” var AppDispatcher = requ
我在提醒自己“关键字”时偶然发现了这篇文章 http://effbot.org/zone/python-with-statement.htm 。我只是有一个小问题,可能是显而易见的问题。文章指出,这“
我正在使用 Oracle 11g(瘦驱动程序)和 Java 6 在 Windows 上的 Tomcat 7 中开发一个应用程序。我正在开发一个页面,让用户验证存储在 Oracle 数据库中的 SQL
除了向每个回调添加 try..catch block 之外,是否有任何方法可以处理从 jQuery 中的 AJAX 回调抛出的异常?在这种情况下不会调用错误函数。 $.ajax( { url:
我已经编写了代码(如下),以便能够将输入字段拖到另一个输入字段上,但似乎可拖动的燕子 input[text].onfocus . 这会导致问题,即所有可拖动的输入字段都被禁用(firefox)并且单击
在 jQuery 中,如果您在 ajax 回调方法中出错,您将收到正确的控制台错误消息和堆栈跟踪。 $.get("https://api.github.com/users/octocat/orgs",
我正在使用 Apache PdfBox 库,我注意到几乎所有东西都会抛出 IOException,考虑到大多数 IOException 实际上应该是非法状态异常,处理起来非常烦人,但似乎 apache
嘿,我是原型(prototype)的新手。问题是 dom:loaded 回调函数中的 javascript 错误不会在 firefox (webconsole/errorconsole/firebug
我有一个文本框,里面有这个: 问题是它吞下了 Tab 而不是跳转到下一个控件。如何捕获文本框的 Tab 键并仍然按 Tab 键顺序保留到下一个控件的 Tab 键?编辑:我也在使用 MVVM 并且 M
我正在尝试让 googletest 在我的 C++ 项目上运行,其中一部分涉及使用 EXPECT_THROW(statement, expected_exception);。我正在使用选择了“Appl
我不明白为什么原型(prototype)会抑制 dom:loaded 事件和 AJAX 处理程序中的错误消息。 给定以下 HTML 片段: Conforming XHTM
我是一名优秀的程序员,十分优秀!