quill icon indicating copy to clipboard operation
quill copied to clipboard

segmentation fault in 1.7.0

Open aumer-logiciel opened this issue 3 months ago • 6 comments

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)

aumer-logiciel avatar Mar 19 '24 08:03 aumer-logiciel

Hi @odygrd could you please look at this ? Thank you!

aumer-logiciel avatar Mar 19 '24 08:03 aumer-logiciel

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.

image

odygrd avatar Mar 19 '24 11:03 odygrd

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.

aumer-logiciel avatar Mar 19 '24 12:03 aumer-logiciel

are you linking your own version of lib fmt in your final application ? Just a suspicion

odygrd avatar Mar 20 '24 01:03 odygrd

I am using bundled fmt of quill @odygrd

aumer-logiciel avatar Mar 20 '24 08:03 aumer-logiciel

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 ?

odygrd avatar Mar 20 '24 13:03 odygrd