【发布时间】:2018-05-19 16:37:14
【问题描述】:
当我定义一个像这样的 boost 测试套件时,我遇到了一个非常奇怪的错误:
BOOST_AUTO_TEST_SUITE(zerocoin_implementation_tests)
错误如下所示:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
这是相关的回溯:
#5 0x00007ffff5ce6fe8 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff5ce2875 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff5d7c949 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007ffff70afe15 in boost::unit_test::test_unit::test_unit(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::test_unit_type) () from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
#9 0x00007ffff70b0456 in boost::unit_test::test_suite::test_suite(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) () from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
#10 0x00007ffff70b0612 in boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::decorator::collector&) ()
from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
据我所知,这与 Boost 尝试创建最大长度字符串有关。我想看看它到底在做什么。扩展 boost 宏以查看预编译版本的最佳方法是什么?
旁注
奇怪的是,如果我将这一行稍微更改为:
BOOST_AUTO_TEST_SUITE(zerocsoin_implementation_tests)
我收到以下错误:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
和回溯:
#6 0x00007ffff5ce7594 in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff70afe15 in boost::unit_test::test_unit::test_unit(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::test_unit_type) () from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
#8 0x00007ffff70b0456 in boost::unit_test::test_suite::test_suite(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) () from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
#9 0x00007ffff70b0612 in boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::decorator::collector&) ()
from /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.65.1
文件的源代码(以及项目的其余部分)可以在这里找到:https://github.com/phoreproject/Phore/blob/segwit/src/test/zerocoin_implementation_tests.cpp
可能导致该错误的差异:https://github.com/phoreproject/phore/compare/master...segwit#diff-bb4f094cc636d668944ed6af9b72c0d9
【问题讨论】:
-
你能把整个测试的.cpp文件贴出来吗?
-
@skeller 已更新
-
我还添加了一个导致该错误的差异。
-
我猜你最终会得到一个未签名的
-1溢出,但你应该能够使用调试器来检查这种事情。 -
@meyer9
-g3选项保留了更多的宏信息......也一定要使用-O0(通常,更高的优化级别只会对调试造成一点伤害,但在这里很重要)。另外,试试-E选项。