quill
quill copied to clipboard
segmentation fault in 1.7.0
I have a legacy application that is using the quill version 1.7.0 and is giving segmentation fault as soon as I try to log something.
My code:
ACE_INT32 main( ACE_INT32 argc, char * argv[] )
{
//Moved in Start Server function
////MA_20230511 - quill
quill::Handler* file_handler = quill::file_handler("Engine-Quill.log", "a", quill::FilenameAppend::Date);
file_handler->set_pattern(
QUILL_STRING("On %(ascii_time) by (%(process)|%(thread)) - %(message)"), // log recorder format
"%Y-%m-%d %H:%M:%S.%Qus", // timestamp format
/*quill::Timezone::GmtTime*/ quill::Timezone::LocalTime); // timestamp's timezone
// This line sets the default logger's handler to be the new handler with the custom format string
quill::set_default_logger_handler(file_handler);
quill::start();
// quill::Logger* logger = quill::get_logger();
// logger->set_log_level(quill::LogLevel::TraceL3);
// LOG_TRACE_L3(logger, "This is a log trace l3 example {}", 1);
while (1) {
sleep(1);
printf("yo\n");
LOG_INFO(quill::get_logger(), "yoyo");
}
}
It crashes as soon as the first statement is executed.
yo
Segmentation fault (core dumped)
Here is the stacktrace:
libc.so.6!__strlen_sse2 (Unknown Source:0)
std::char_traits<char>::length() (\usr\include\c++\8\bits\char_traits.h:329)
fmt::v8::basic_string_view<char>::basic_string_view() (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:476)
fmt::v8::detail::write<char, fmt::v8::appender>(fmt::v8::appender out, const char * value) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\format.h:2147)
fmt::v8::detail::default_arg_formatter<char>::operator()<char const*>(fmt::v8::detail::default_arg_formatter<char> * const this, const char * value) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\format.h:2196)
fmt::v8::visit_format_arg<fmt::v8::detail::default_arg_formatter<char>, fmt::v8::basic_format_context<fmt::v8::appender, char> >(const fmt::v8::basic_format_arg<fmt::v8::basic_format_context<fmt::v8::appender, char> > & arg, fmt::v8::detail::default_arg_formatter<char> && vis) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:1615)
fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler::on_replacement_field(int, char const*)(int id, fmt::v8::detail::format_handler * const this) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\format.h:2962)
fmt::v8::detail::parse_replacement_field<char, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&>(char const*, char const*, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&)(const char * begin, const char * end, fmt::v8::detail::format_handler & handler) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:2591)
fmt::v8::detail::parse_format_string<false, char, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler>(fmt::v8::basic_string_view<char>, fmt::v8::detail::vformat_to<char>(fmt::v8::detail::buffer<char>&, fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<std::conditional<std::is_same<fmt::v8::type_identity<char>::type, char>::value, fmt::v8::appender, std::back_insert_iterator<fmt::v8::detail::buffer<fmt::v8::type_identity<char>::type> > >::type, fmt::v8::type_identity<char>::type> >, fmt::v8::detail::locale_ref)::format_handler&&)(fmt::v8::detail::format_handler && handler, fmt::v8::basic_string_view<char> format_str) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:1788)
fmt::v8::detail::vformat_to<char>( buf, fmt::v8::basic_string_view<char> fmt, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> > args, fmt::v8::detail::locale_ref loc) (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\format.h:2988)
fmt::v8::vformat_to<std::back_insert_iterator<fmt::v8::basic_memory_buffer<char, 500ul, std::allocator<char> > >, 0>() (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:1674)
fmt::v8::format_to<std::back_insert_iterator<fmt::v8::basic_memory_buffer<char, 500ul, std::allocator<char> > >, char const*, char const*, char const*, 0>() (\home\umer\projects\third-party_dep\install\include\quill\bundled\fmt\core.h:3148)
_ZZNK5quill16PatternFormatter15FormatterHelperIKSt5tupleIJSt8functionIFPKcNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEES5_S5_S5_RKNS_16LogMacroMetadataEEESF_SF_EEE6formatERN3fmt2v819basic_memory_bufferIcLm500ESaIcEEESA_S5_S5_S5_SD_ENKUlDpT_E_clIJSF_SF_SF_EEEDaSQ_(const quill::PatternFormatter::FormatterHelper<const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > > * const this) (\home\umer\projects\third-party_dep\install\include\quill\PatternFormatter.h:123)
_ZN10invoke_hpp6invokeIRZNK5quill16PatternFormatter15FormatterHelperIKSt5tupleIJSt8functionIFPKcNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEES7_S7_S7_RKNS1_16LogMacroMetadataEEESH_SH_EEE6formatERN3fmt2v819basic_memory_bufferIcLm500ESaIcEEESC_S7_S7_S7_SF_EUlDpT_E_JRKSH_SW_SW_ELi0EEEDTclcl7forwardIT_Efp_Espcl7forwardIT0_Efp0_EEEOSX_DpOSY_(quill::PatternFormatter::FormatterHelper<const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > >::<lambda(auto:1 ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:147)
_ZN10invoke_hpp4impl10apply_implIRZNK5quill16PatternFormatter15FormatterHelperIKSt5tupleIJSt8functionIFPKcNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEES8_S8_S8_RKNS2_16LogMacroMetadataEEESI_SI_EEE6formatERN3fmt2v819basic_memory_bufferIcLm500ESaIcEEESD_S8_S8_S8_SG_EUlDpT_E_RSK_JLm0ELm1ELm2EEEEDcOT_OT0_St16integer_sequenceImJXspT1_EEE(const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > & args, quill::PatternFormatter::FormatterHelper<const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > >::<lambda(auto:1 ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:236)
_ZN10invoke_hpp5applyIRZNK5quill16PatternFormatter15FormatterHelperIKSt5tupleIJSt8functionIFPKcNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEES7_S7_S7_RKNS1_16LogMacroMetadataEEESH_SH_EEE6formatERN3fmt2v819basic_memory_bufferIcLm500ESaIcEEESC_S7_S7_S7_SF_EUlDpT_E_RSJ_EEDcOT_OT0_(const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > & args, quill::PatternFormatter::FormatterHelper<const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > >::<lambda(auto:1 ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:244)
quill::PatternFormatter::FormatterHelper<std::tuple<std::function<char const* (std::chrono::duration<long, std::ratio<1l, 1000000000l> >, char const*, char const*, char const*, quill::LogMacroMetadata const&)>, std::function<char const* (std::chrono::duration<long, std::ratio<1l, 1000000000l> >, char const*, char const*, char const*, quill::LogMacroMetadata const&)>, std::function<char const* (std::chrono::duration<long, std::ratio<1l, 1000000000l> >, char const*, char const*, char const*, quill::LogMacroMetadata const&)> > const>::format(fmt::v8::basic_memory_buffer<char, 500ul, std::allocator<char> >&, std::chrono::duration<long, std::ratio<1l, 1000000000l> >, char const*, char const*, char const*, quill::LogMacroMetadata const&) const(const quill::PatternFormatter::FormatterHelper<const std::tuple<std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)>, std::function<char const*(std::chrono::duration<long int, std::ratio<1, 1000000000> >, char const*, char const*, char const*, const quill::LogMacroMetadata&)> > > * const this, fmt::v8::memory_buffer & memory_buffer, std::chrono::nanoseconds timestamp, const char * thread_id, const char * thread_name, const char * logger_name, const quill::LogMacroMetadata & logline_info) (\home\umer\projects\third-party_dep\install\include\quill\PatternFormatter.h:127)
quill::PatternFormatter::format<>(std::chrono::duration<long, std::ratio<1l, 1000000000l> >, char const*, char const*, char const*, quill::LogMacroMetadata const&) const(const quill::PatternFormatter * const this, std::chrono::nanoseconds timestamp, const char * thread_id, const char * thread_name, const char * logger_name, const quill::LogMacroMetadata & logline_info) (\usr\include\c++\8\bits\unique_ptr.h:345)
quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::<lambda(const auto:2& ...)>::operator()<>(const quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> > * const this) (\usr\include\c++\8\array:238)
invoke_hpp::invoke<quill::detail::LogEvent<IsBacktraceLogRecord, TLogMacroMetadata, FmtArgs>::_write_record_to_handlers(char const*, char const*, std::chrono::nanoseconds, const quill::LogMacroMetadata&) const [with bool IsBacktraceLogRecord = false; TLogMacroMetadata = main(ACE_INT32, char**)::<unnamed struct>; FmtArgs = {}]::<lambda(const auto:2& ...)>&>(quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::<lambda(const auto:2& ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:147)
invoke_hpp::impl::apply_impl<quill::detail::LogEvent<IsBacktraceLogRecord, TLogMacroMetadata, FmtArgs>::_write_record_to_handlers(char const*, char const*, std::chrono::nanoseconds, const quill::LogMacroMetadata&) const [with bool IsBacktraceLogRecord = false; TLogMacroMetadata = main(ACE_INT32, char**)::<unnamed struct>; FmtArgs = {}]::<lambda(const auto:2& ...)>&, const std::tuple<>&>(const std::tuple<> & args, quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::<lambda(const auto:2& ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:236)
invoke_hpp::apply<quill::detail::LogEvent<IsBacktraceLogRecord, TLogMacroMetadata, FmtArgs>::_write_record_to_handlers(char const*, char const*, std::chrono::nanoseconds, const quill::LogMacroMetadata&) const [with bool IsBacktraceLogRecord = false; TLogMacroMetadata = main(ACE_INT32, char**)::<unnamed struct>; FmtArgs = {}]::<lambda(const auto:2& ...)>&, const std::tuple<>&>(const std::tuple<> & args, quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::<lambda(const auto:2& ...)> & f) (\home\umer\projects\third-party_dep\install\include\quill\bundled\invoke\invoke.h:244)
quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::_write_record_to_handlers(const quill::LogMacroMetadata & log_record_metadata, std::chrono::nanoseconds log_record_timestamp, const char * thread_name, const char * thread_id, const quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> > * const this) (\home\umer\projects\third-party_dep\install\include\quill\detail\events\LogEvent.h:187)
quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::_backend_process<>(const quill::detail::BaseEvent::GetRealTsCallbackT & timestamp_callback, const quill::detail::BaseEvent::GetHandlersCallbackT & obtain_active_handlers, const char * thread_name, const char * thread_id, quill::detail::BacktraceLogRecordStorage & backtrace_log_record_storage, const quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> > * const this) (\home\umer\projects\third-party_dep\install\include\quill\detail\events\LogEvent.h:128)
quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> >::backend_process(quill::detail::BacktraceLogRecordStorage &, const char *, const char *, const quill::detail::BaseEvent::GetHandlersCallbackT &, const quill::detail::BaseEvent::GetRealTsCallbackT &) const(const quill::detail::LogEvent<false, main(ACE_INT32, char**)::<unnamed struct> > * const this, quill::detail::BacktraceLogRecordStorage & backtrace_log_record_storage, const char * thread_id, const char * thread_name, const quill::detail::BaseEvent::GetHandlersCallbackT & obtain_active_handlers, const quill::detail::BaseEvent::GetRealTsCallbackT & timestamp_callback) (\home\umer\projects\third-party_dep\install\include\quill\detail\events\LogEvent.h:86)
quill::detail::BackendWorker::_process_transit_event(quill::detail::BackendWorker * const this) (\usr\include\c++\8\bits\basic_string.h:2306)
quill::detail::BackendWorker::_main_loop(quill::detail::BackendWorker * const this) (\home\umer\projects\third-party_dep\install\include\quill\detail\backend\BackendWorker.h:585)
quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const(const quill::detail::BackendWorker::<lambda()> * const __closure) (\home\umer\projects\third-party_dep\install\include\quill\detail\backend\BackendWorker.h:297)
libstdc++.so.6!execute_native_thread_routine (Unknown Source:0)
libpthread.so.0!start_thread (Unknown Source:0)
libc.so.6!clone (Unknown Source:0)
My system details are: OS: AlmaLinux release 8.9 (Midnight Oncilla) Compiler: g++ (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20)
Hi @odygrd could you please look at this ? Thank you!
I could not reproduce on my machine.
It is not possible for that simple example to crash in 1.7.0
that would mean the library is not working at all and there were many unit tests.
It should be something related with your system or specific OS.
This code is part of a huge legacy application that has a lot of other dependencies to it. The thing is when I run it separately it works alright as well but combined with the application it crashes instantly. In my application I have placed this code at the top of the main function so as to not affect it by other components but still it is giving me this error continuously.
are you linking your own version of lib fmt in your final application ? Just a suspicion
I am using bundled fmt of quill @odygrd
Are you also using your own libfmt outside the logger linking the whole program against?
Can you try to link the standalone example that you say it's working with the same libraries you're linking your application and see if it works ?