さまざまな理由から詳細には触れられませんが、私が使用している基本的なアーキテクチャは次のとおりです。
- 私が作成した C++ オブジェクト ファイルを使用してダイナミック シミュレーションを実行する C++ フレームワークがあります。
- C++ ライブラリは、とりわけ、Ada で書かれた共有 (.so) ライブラリを呼び出します。
私が知る限り、Ada ライブラリ (自明ではないコードの大規模なコレクション) は例外的なケースで例外を生成していますが、例外を生成している関数を特定するのに問題があります。
これが私が使用しているものです:
- CentOS 4.8 (最終版)
- gcc 3.4.6 (ブヨ付き)
- gdb 6.3.0.0-1.162.el4rh
これは、通常の実行で発生するエラーです。
terminate called without an active exception
raised PROGRAM_ERROR : unhandled signal
C++ に戻るとすぐに gdb に例外をキャッチさせることはできますが、Ada コード内で例外をキャッチさせることはできません。すべてを でコンパイルするようにしまし-g
たが、問題は解決していないようです。
シグナル/例外をキャッチ/ブレークしようとするとgdb
(丁寧に教えてくれますCatch of signal not yet implemented
)、次のようになります:
[Thread debugging using libthread_db enabled]
[New thread -1208371520 (LWP 14568)]
terminate called without an active exception
Program received signal SIGABRT, Aborted.
[Switching to thread -1208371520 (LWP 14568)]
0x001327a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
terminate called [...]
線はフレームワークからのものだと思います。そのブレークをキャプチャしてからバックトレース ( ) を実行しようとすると、次のbt
ような結果が得られます。
#0 0x001327a2 in gdb makes me want to flip tables.
#1 0x00661825 in raise () from /lib/tls/libc.so.6
#2 0x00663289 in abort () from /lib/tls/libc.so.6
#3 0x0061123e in __gnu_cxx: __verbose_terminate_handler () from /usr/lib/libstdc++.so.6
#4 0x0060eed1 in __xac_call_unexpected () from /usr/lib/libstdc++.so.6
#5 0x0060ef06 in std::terminate () from /usr/lib/libstdc++.so.6
#6 0x0060f0a3 in __xax_rethrow () from /usr/lib/libstdc++.so.6
#7 0x001fe526 in cpputil::ExceptionBase::Rethrow (scope=@0xbfe67470) at ExceptionBase.cpp:140
その時点で、それはフレームワーク コードに入ります。
オンラインでいくつかのガイド、チュートリアル、およびマニュアル ページを読みましたが、少し腑に落ちません。ここの誰かが私を正しい方向に向けるのを手伝ってくれることを願っています.