2011-07-13 51 views
7

我已經用Perl中的SWIG封裝了我的C/C++代碼。由於包裝的代碼,我有幾個分段錯誤。我試圖在Perl腳本中使用ddd,但不幸的是,即使我在腳本的一行(調用C/C++代碼的行)上設置了一個斷點,ddd也無法步入C/C++代碼。在perl中調試由swig封裝的共享庫

當我正在調試Perl代碼時,有什麼方法可以將斷點設置到我的C庫中,或者當我運行此Perl腳本時,是否知道調試C庫的好方法/工具?

我正在使用Linux/gcc。

回答

6

我做了一個簡單的事情。我在perl口譯員處直接打電話給gdb

gdb /usr/bin/perl 
    (gdb) r myscript 
    #block the script someway or rerun it 
    (gdb) b whatever_my_function 

似乎一旦scipt運行共享內存也加載到內存中。一旦發生這種情況,我可以獲得所有用於調試的信息,功能和斷點。

+0

如果我正在使用Komodo,該如何進行調試? – rpg

+0

嗨RPG。我不知道。我看了一眼,Komodo似乎是一個專門調試PERL腳本的IDE。我不知道在Perl調用共享庫時它是否能夠調試C/C++指令。對於GDB,起點是PERL解釋器的二進制文件。斷點設置在一行C/C++代碼中,而不是在Perl腳本的一行中。 –

0

我只使用SWIG從TCL調用C++,並使用Visual Studio進行調試,但同樣的想法也適用於您的情況。我將描述我所做的調試,希望您能弄清楚如何將其應用於您的情況。

  • 構建C的調試版本++模塊
  • 確保TCL腳本包括調試版本(在TCL load命令指向模塊的調試版本的路徑)
  • 將斷點C++代碼
  • 通過Visual Studio調試器調用TCL腳本;例如使用的命令是tclsh85.exe MyScript.tcl

HTH