What is the recommended way to deal with exceptions from C++?
I don't really need to trap them, but I'd at least like to see them. I compiled the C++ lib with -g and I am using the cpp backend with importcpp` wrappers. With ``lldb, I see the line of C++ which throws the exception:
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
frame #0: 0x0000000100010437 foo.exe`colonanonymous__wRTldVNfvmb9aFVVqjJYXRw() + 199
frame #1: 0x00007fff6b4d3dfe libc++abi.dylib`std::__terminate(void (*)()) + 8
frame #2: 0x00007fff6b4d3be2 libc++abi.dylib`__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 27
frame #3: 0x00007fff6b4c6bb9 libc++abi.dylib`__cxa_throw + 113
* frame #4: 0x0000000100124b89 libpbbam.0.22.0.dylib`PacBio::BAM::BamFile::BamFilePrivate::RawOpen(this=0x0000000100f02f60) const at BamFile.cpp:93
frame #5: 0x0000000100123bf7 libpbbam.0.22.0.dylib`PacBio::BAM::BamFile::BamFilePrivate::BamFilePrivate(this=0x0000000100f02f60, fn="") at BamFile.cpp:38
...
(lldb) up
frame #4: 0x0000000100124b89 libpbbam.0.22.0.dylib`PacBio::BAM::BamFile::BamFilePrivate::RawOpen(this=0x0000000100f02f60) const at BamFile.cpp:93
92 if (f->format.format != bam)
-> 93 throw std::runtime_error{"BamFile: expected BAM, encountered un supported format: " +
94 filename_};
(lldb) p filename_
(std::__1::string) $0 = "foo"
$ ./foo.exe
bam:foo
hi
then:foo
now:foo
Traceback (most recent call last)
foo.nim(55) foo
foo.nim(49) main
system.nim(4341) :anonymous
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
See? It does not tell me the exception. In fact, there seems to be an error in the actual throwing of the exception, even though the string seems to be valid.
https://github.com/bio-nim/pbbam/blob/f5a659e9fbed4b675f4458734fdfc9fe8162b2ac/nim/foo.nim
Use this syntax
except ImportedExeception as ex