簡體   English   中英

努力使用gdb調試帶有Ada庫的C ++代碼

[英]Struggling with using gdb to debug C++ code w/ Ada library

由於多種原因,我無法詳細說明問題,但這是我正在使用的基本架構

  • 我有一個C ++框架,該框架使用我構建的C ++目標文件執行動態仿真。
  • 除其他外,C ++庫調用以Ada編寫的共享(.so)庫。

盡我所知,Ada庫(大量的重要代碼)在附帶情況下生成異常,但是我在隔離生成異常的函數時遇到了麻煩。

這是我正在使用的:

  • CentOS 4.8(最終版)
  • gcc 3.4.6(w / gnat)
  • gdb 6.3.0.0-1.162.el4rh

這是我在正常執行下遇到的錯誤:

terminate called without an active exception
raised PROGRAM_ERROR : unhandled signal

只要gdb返回C ++,我就可以捕獲它,但是我無法在Ada代碼中捕獲它。 我確保使用-g編譯所有內容,但這似乎無濟於事。

當我嘗試捕獲/中斷gdb的signal / exception(禮貌地告訴我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

那時,它已經進入框架代碼。

我已經在線閱讀了一些指南,教程和手冊頁,但是我有點茫然。 我希望這里有人可以幫助我指出正確的方向。

聽起來您能夠編譯Ada源代碼。 假設是這種情況,在通過其執行引發異常的被調用子程序中,在末尾添加一個轉儲異常信息的異常處理程序:

when E : others =>
    Ada.Text_IO.Put_Line(Ada.Exceptions.Exception_Information(E));
    raise;

您還需要在包中添加Ada.Exceptions的“ with”。 還有Ada.Text_IO(如果尚未存在)。

我不確定您將從該版本的GNAT中得到什么,但是很可能是您可以使用addr2line對其進行解碼的調用地址。

您能從Ada主站啟動C ++框架嗎? 如果是這樣,則可以通過C ++框架將異常傳播到Ada主程序,它的最后機會處理程序應該為您提供一個相當不錯的報告,其中包含異常,發生的源文件和行以及addr2line的堆棧轉儲。 我的經驗是,此后通常不需要調試器。

我在這里可能會束手無策,因為我還沒有使用過和您一樣老的Gnat ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM