2012-02-09 37 views
4

我有一個C++二進制文件,大小爲190 MB。當我將此二進制文件放入dbx並嘗試創建斷點時,dbx掛起。雖然dbx掛起,但我發現其內存快速增長到10 GB以上。 TotalView允許我設置斷點;但是,它顯示的所有數據都是虛假的。我已經成功地調試了許多其他較小的二進制文件,所以我的預感是這個二進制文件的大尺寸問題。大的可執行文件導致調試器掛起

二進制:ELF 32位MSB可執行文件SPARC32PLUS版本1,V8 +必需,動態鏈接,未刪除。
編譯器:CC:Sun C++ 5.9 SunOS_sparc 2007/05/03。
Dbx:7.6 SunOS_sparc 2007/05/03。
TotalView軟件:8.2.0-0
操作系統:的Solaris 10

我如何使用DBX:

dbx mybinary 
stop at Something.cc:170 

DBX從來沒有從這個命令返回,我必須最終從一個單獨的終端殺DBX 。

我試過幾件事情沒有成功:
1.切換到動態鏈接大多數庫,這將二進制大小減少到19 MB。
2.在Solaris x86上嘗試。
3.將軟件編譯爲64位。

有誰知道什麼可能導致這種情況發生,以及如何解決這個問題?

+0

哪個版本的編譯器和哪個版本的dbx? dbx -V CC -V只需驗證一下:dbx掛起並開始增長以響應您輸入「stop」命令? 所以你甚至不必在調試器中運行程序? – 2012-02-10 05:10:04

+0

我通過澄清我原來的帖子回答了你的問題。 – Hitman 2012-02-10 16:42:35

+0

要嘗試的一件好事是下載最新版本的Solaris Studio並嘗試執行此操作。 http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.html 您使用的版本已有4.5年曆史。 – 2012-02-14 23:04:25

回答

2

嘗試使用其他調試器進行調試,以確定您的代碼是否導致問題。我在Solaris上最喜歡的調試器是mdb:

mdb ./yourapplicationname 
> your_c_fn_name::bp 
> ::run 

如果您使用C++進行編碼,請記住使用損壞的函數名稱。你管納米輸出到grep找出你的錯位函數的名字是什麼:

nm ./yourapplicationname | grep yourc++fnname 

如果MDB與dbx中的同樣的問題,那麼我建議你看看你的代碼。但是,如果mdb在沒有問題的情況下到達bp,那麼您可以使用mdb(據我所知,它不能用於源文件),或者您可以不斷調整應用程序以使dbx高興。

+0

謝謝@Mustafa。試過mdb和斷點工作。Mdb是使用打印進行調試的一個步驟;然而,我和我的團隊會在與源文件一起工作的調試器中找到更多價值。因此,我非常感謝獲取dbx或TotalView的任何信息。 – Hitman 2012-02-13 22:28:41

+0

你試過dbxtool嗎? – 2012-02-14 03:50:20

+0

我不認爲dbxtool在Sun Studio 12中可用。此外,它是使用下面的dbx引擎的GUI層。所以在dbxtool下可能會發生相同的錯誤。 – 2012-02-14 23:06:35