On 4 October 2015 at 10:50, mads_bn <mad...@mail.dk> wrote:
> Can somebody try if e.g. backtrace_symbols () will show where the offending
> code was called from?

Included a backtrace test, pushed to github.

./test(_Z9backtracev+0xb)[0x10f28]
./test(_Z17backtrace_handleri+0x5)[0x10f4a]     <---- signal handler
./test[0x112b6]     <---- __default_rt_sa_restorer_v2 (my version)
./test(_Z9test_segvf+0xd)[0x10f6e]      <--- NULL dereference
...

It's a bit awkward that it can only show dynamic symbols and doesn't
demangle them. There are probably better backtrace-generators out
there.

An unpleasant surprise was that installing an std::terminate_handler
made an uncaught exception *less* informative rather than more:

./test(_Z9backtracev+0xb)[0x10f28]
./test(_Z15abort_backtracev+0x5)[0x10f3e]
/lib/libstdc++.so.6(+0x6f1c8)[0xf67121c8]
qemu: uncaught target signal 6 (Aborted) - core dumped

versus

terminate called after throwing an instance of 'IntendedUncaughtException'
qemu: uncaught target signal 6 (Aborted) - core dumped

I thought the whole idea behind two-phase unwinding was to leave the
stack intact for inspection on an uncaught exception. Oh well...

> I don't have access to such an ARM setup currently

As shown above, an ARM setup is one "apt-get install qemu-user" away ;-)

Matthijs

Reply via email to