我不能進入細節,對於各種各樣的原因,但這裏的就是我與使用GDB調試C++代碼W /阿達庫
- 工作,我有必要架構掙扎一個C++框架,它使用由我構建的C++對象文件來執行動態仿真。
- C++庫調用其中包含用Ada編寫的共享庫(.so)庫。
盡我所知,Ada庫(這是一個大集合的非平凡代碼)在邊緣情況下會產生異常,但我在隔離產生異常的函數時遇到了問題。
下面是我使用的是什麼:
- 的CentOS 4.8(最終)
- GCC 3.4.6(W /蚊蚋)
- GDB 6.3.0.0-1.162.el4rh
這是我在正常執行情況下得到的錯誤:
terminate called without an active exception
raised PROGRAM_ERROR : unhandled signal
I ca n一旦它返回到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 ([email protected]) at ExceptionBase.cpp:140
在這一點上,它的到框架的代碼。
我已經在線閱讀了幾篇指南和教程以及手冊頁,但是我有點不知所措。我希望有人能幫助我指出正確的方向。
你給gdb什麼命令來捕捉異常? – 2013-02-20 22:55:59
我嘗試了'捕獲信號SIGABRT',但是它回答了'Catch of signal not yet implemented.',所以我使用'handle SIGABRT stop'來嘗試捕獲信號,但是得到與上面類似的結果。 我認爲真正的問題,我不知道如何解決這個問題,是我不能打破Ada中未捕獲的異常。當我嘗試'catch exception'(基於某些我在網上找到的Ada特定gdb的東西)時,我得到一個錯誤,'爲catch指定的未知事件類型'。 – brightwellcd 2013-02-20 22:59:24
我相信你的GDB需要用Ada支持專門構建。我注意到在我自己的工作中,'catch exception'只適用於專門面向Ada的GDB安裝,例如由AdaCore分發的安裝。 – 2013-02-20 23:01:36