Hi all,

I am trying to understand what is so fundamentally wrong with the following
piece of code (taken from:
https://logging.apache.org/log4cxx/usage.html#Configuration).

If I compile it with (see attached file):

$ g++ -g -o logger log4cxx_crash.cpp -llog4cxx

Here is the crash I get [*]. I did check that this is a different crash
from the one explained in the FAQ:
https://logging.apache.org/log4cxx/faq.html

I've simply moved the initialisation from outside `main()` function to
inside `main()` function. I fail to understand why the order of
initialisation is so important (I could not find anything relevant in the
documentation).

Thanks for comments, my c++ knowledge would need a refresher.

Regards.

[*]
Using host libthread_db library "/lib64/libthread_db.so.1".
0 [0x7ffff7fb0780] INFO MyApp null - Entering application.
3 [0x7ffff7fb0780] INFO MyApp null - Exiting application.

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5f69dc9 in apr_pool_create_ex () from /lib64/libapr-1.so.0
Missing separate debuginfos, use: debuginfo-install apr-1.5.1-3.fc21.x86_64
apr-util-1.5.4-1.fc21.x86_64 cyrus-sasl-lib-2.1.26-19.fc21.x86_64
expat-2.1.0-10.fc21.x86_64 libdb-5.3.28-9.fc21.x86_64
libgcc-4.9.2-6.fc21.x86_64 libstdc++-4.9.2-6.fc21.x86_64
libuuid-2.25.2-3.fc21.x86_64 log4cxx-0.10.0-17.fc21.x86_64
nspr-4.10.8-1.fc21.x86_64 nss-3.19.1-1.0.fc21.x86_64
nss-softokn-freebl-3.19.1-1.0.fc21.x86_64 nss-util-3.19.1-1.0.fc21.x86_64
openldap-2.4.40-3.fc21.x86_64 zlib-1.2.8-7.fc21.x86_64
(gdb) bt
#0  0x00007ffff5f69dc9 in apr_pool_create_ex () from /lib64/libapr-1.so.0
#1  0x00007ffff7b26b58 in log4cxx::helpers::Pool::Pool() () from
/lib64/liblog4cxx.so.10
#2  0x00007ffff7ae06ea in
log4cxx::helpers::MutexException::formatMessage(int) () from
/lib64/liblog4cxx.so.10
#3  0x00007ffff7ae0786 in
log4cxx::helpers::MutexException::MutexException(int) () from
/lib64/liblog4cxx.so.10
#4  0x00007ffff7b4a310 in
log4cxx::helpers::synchronized::synchronized(log4cxx::helpers::Mutex
const&) () from /lib64/liblog4cxx.so.10
#5  0x00007ffff7b5d9c8 in log4cxx::WriterAppender::close() () from
/lib64/liblog4cxx.so.10
#6  0x00007ffff7ac979c in log4cxx::ConsoleAppender::~ConsoleAppender() ()
from /lib64/liblog4cxx.so.10
#7  0x00007ffff7ac98b9 in log4cxx::ConsoleAppender::~ConsoleAppender() ()
from /lib64/liblog4cxx.so.10
#8  0x00007ffff7aba247 in
log4cxx::helpers::AppenderAttachableImpl::~AppenderAttachableImpl() () from
/lib64/liblog4cxx.so.10
#9  0x00007ffff7b0494c in log4cxx::Logger::~Logger() () from
/lib64/liblog4cxx.so.10
#10 0x00007ffff7b388b4 in log4cxx::spi::RootLogger::~RootLogger() () from
/lib64/liblog4cxx.so.10
#11 0x00007ffff7b0429a in log4cxx::Logger::~Logger() () from
/lib64/liblog4cxx.so.10
#12 0x00007ffff7b04429 in log4cxx::Logger::~Logger() () from
/lib64/liblog4cxx.so.10
#13 0x00000000004017c4 in
log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::~ObjectPtrT (this=0x6031a0
<logger>, __in_chrg=<optimized out>) at
/usr/include/log4cxx/helpers/objectptr.h:100
#14 0x00007ffff6e38392 in __run_exit_handlers () from /lib64/libc.so.6
#15 0x00007ffff6e383e5 in exit () from /lib64/libc.so.6
#16 0x00007ffff6e1efe7 in __libc_start_main () from /lib64/libc.so.6
#17 0x0000000000401319 in _start ()


-- 
Mathieu
// include log4cxx header files.
#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/helpers/exception.h>

#include <cstdlib>

using namespace log4cxx;
using namespace log4cxx::helpers;

LoggerPtr logger;

int main(int argc, char **argv)
{
	int result = EXIT_SUCCESS;
  logger=Logger::getLogger("MyApp");
  try
	{
		// Set up a simple configuration that logs on the console.
    BasicConfigurator::configure();
    LOG4CXX_INFO(logger, "Entering application.");
		LOG4CXX_INFO(logger, "Exiting application.");
	}
	catch(...)
	{
		result = EXIT_FAILURE;
	}

	return result;
}

Reply via email to