c + +升压read_json崩溃和我的#define BOOST_SPIRIT_THREADSAFE [英] C++ Boost read_json crash and I had #define BOOST_SPIRIT_THREADSAFE

查看:1719
本文介绍了c + +升压read_json崩溃和我的#define BOOST_SPIRIT_THREADSAFE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近其他人升级了Boost库,现在我看到这个信息转储当read_json功能在很大程度上被调用。以前从来没有见过这个。而且我在code的#define BOOST_SPIRIT_THREADSAFE,这就是为什么这并没有发生之前。真正需要帮助的!谢谢!

与信号11终止程序,分段错误。

 #0 0x00007f062ce0d094中的std :: mem_fun1_t&LT; INT, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &gt;中boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT * gt;对于/usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../ ::运算符()(在此= 0x7f06120f4c90,__P = 0x7f05f813faa0,__X = 0x7f06120f4df0)。 ./../include/c++/4.5.2/bits/stl_function.h:605
            在/usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/bits/stl_function.h
    性病#0 0x00007f062ce0d094 :: mem_fun1_t&LT; INT, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &gt;中boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT * gt;对于/usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../ ::运算符()(在此= 0x7f06120f4c90,__P = 0x7f05f813faa0,__X = 0x7f06120f4df0)。 ./../include/c++/4.5.2/bits/stl_function.h:605
    #1 0x00007f062ce0c66e中的std :: binder2nd&LT;的std :: mem_fun1_t&LT; INT, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &gt;中boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; * GT; &GT; ::运算符()(此= 0x7f06120f4c90,__X = @ 0x7f06001446e0)在/usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include /c++/4.5.2/backward/binders.h:154
    #2 0x00007f062ce0b87e在std::for_each<std::reverse_iterator<__gnu_cxx::__normal_iterator<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &GT; **, std::vector<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &GT; * std::allocator<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &GT; * GT; &GT; &GT; &gt;中的std :: binder2nd&LT;的std :: mem_fun1_t&LT; INT, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &gt;中boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; * GT; &GT; &GT; (__first = ...,__last = ...,__f = ...)在/usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../ .. /include/c++/4.5.2/bits/stl_algo.h:4185
    #3 0x00007f062ce0aa88在boost::spirit::classic::impl::grammar_destruct<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; &GT; (个体经营= 0x7f06120f4df0)在/usr/include/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:324
    #4 0x00007f062ce09c5f在boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::basic_string<char,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &gt;中的std :: basic_string的&LT;焦炭,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &gt;中的std ::以下&LT;的std :: basic_string的&LT;焦炭,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &GT; &GT; &GT; &gt;中提振精神:: ::经典:: parser_context&LT;的boost ::精神::经典:: nil_t&GT; &GT; ::〜语法(这= 0x7f06120f4df0,__in_chrg =&LT;优化掉了&GT;)在/usr/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp:52
    #5 0x00007f062ce093f7在boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::basic_string<char,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &gt;中的std :: basic_string的&LT;焦炭,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &gt;中的std ::以下&LT;的std :: basic_string的&LT;焦炭,的std :: char_traits&LT;焦炭&gt;中的std ::分配器&LT;&烧焦GT; &GT; &GT; &GT; &GT; ::〜json_grammar(此= 0x7f06120f4df0,__in_chrg =&LT;优化掉了&GT;)在/usr/include/boost/property_tree/detail/json_parser_read.hpp:162
    #6 0x00007f062ce0987f在boost::property_tree::json_parser::read_json_internal<boost::property_tree::basic_ptree<std::string,标准::字符串,性病::少&LT;标准::字符串&GT; &GT; &GT; (流= ...,PT = ...,文件名=)在/usr/include/boost/property_tree/detail/json_parser_read.hpp:310
    #7 0x00007f062ce08eb6在boost :: property_tree :: json_parser :: read_json&LT;提高:: property_tree :: basic_ptree&LT;的std ::字符串,性病::字符串的std ::以下&LT;标准::字符串&GT; &GT; &GT; (流= ...,PT = ...)在/usr/include/boost/property_tree/json_parser.hpp:45


解决方案

你到处包括json_parser.hpp或精神,BOOST_SPIRIT_THREADSAFE必须定义。它的定义在全球将是最安全的,如果提升的另一部分/ yourApp使用精神没有您的知识。

对于在此没有定义任何夹杂物,精神公司烦人使得该会精神的所有实例之间共享grammar.ipp一个静态变量。你grammar_destruct错误是因为精神丧失了这个定义你的模块之一。

Recently other people upgraded our boost library, now I see this coredump when a read_json function is called heavily. Never seen this before. And I have #define BOOST_SPIRIT_THREADSAFE in the code, that's why this didn't happen before. Really need help!Thanks!

Program terminated with signal 11, Segmentation fault.

    #0  0x00007f062ce0d094 in std::mem_fun1_t<int, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >, boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> >*>::operator() (this=0x7f06120f4c90, __p=0x7f05f813faa0, __x=0x7f06120f4df0) at /usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/bits/stl_function.h:605
            in /usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/bits/stl_function.h
    #0  0x00007f062ce0d094 in std::mem_fun1_t<int, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >, boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> >*>::operator() (this=0x7f06120f4c90, __p=0x7f05f813faa0, __x=0x7f06120f4df0) at /usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/bits/stl_function.h:605
    #1  0x00007f062ce0c66e in std::binder2nd<std::mem_fun1_t<int, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >, boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> >*> >::operator() (this=0x7f06120f4c90, __x=@0x7f06001446e0) at /usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/backward/binders.h:154
    #2  0x00007f062ce0b87e in std::for_each<std::reverse_iterator<__gnu_cxx::__normal_iterator<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >**, std::vector<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >*, std::allocator<boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >*> > > >, std::binder2nd<std::mem_fun1_t<int, boost::spirit::classic::impl::grammar_helper_base<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > >, boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> >*> > > (__first=..., __last=..., __f=...) at /usr/lib/gcc/x86_64-spcdn-linux-gnu/4.5.2/../../../../include/c++/4.5.2/bits/stl_algo.h:4185
    #3  0x00007f062ce0aa88 in boost::spirit::classic::impl::grammar_destruct<boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> > > (self=0x7f06120f4df0) at /usr/include/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:324
    #4  0x00007f062ce09c5f in boost::spirit::classic::grammar<boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::spirit::classic::parser_context<boost::spirit::classic::nil_t> >::~grammar (this=0x7f06120f4df0, __in_chrg=<optimized out>) at /usr/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp:52
    #5  0x00007f062ce093f7 in boost::property_tree::json_parser::json_grammar<boost::property_tree::basic_ptree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::~json_grammar (this=0x7f06120f4df0, __in_chrg=<optimized out>) at /usr/include/boost/property_tree/detail/json_parser_read.hpp:162
    #6  0x00007f062ce0987f in boost::property_tree::json_parser::read_json_internal<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > > (stream=..., pt=..., filename="") at /usr/include/boost/property_tree/detail/json_parser_read.hpp:310
    #7  0x00007f062ce08eb6 in boost::property_tree::json_parser::read_json<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > > (stream=..., pt=...) at /usr/include/boost/property_tree/json_parser.hpp:45

解决方案

Everywhere you include json_parser.hpp or Spirit, BOOST_SPIRIT_THREADSAFE must be defined. Defining it globally would be safest, in case another part of boost/yourApp uses Spirit without your knowledge.

For any inclusion where this isn't defined, Sprit annoyingly makes a static variable in grammar.ipp that'll be shared amongst all instances of Spirit. Your grammar_destruct error is because Spirit is missing this define in one of your modules.

这篇关于c + +升压read_json崩溃和我的#define BOOST_SPIRIT_THREADSAFE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆