2011-05-25 75 views
17

我渴望找到一種工具,該工具可以跟蹤我正在處理的程序中pthread的行爲。我知道在那裏有類似的問題,請參閱herehere用於Linux中pthread行爲的跟蹤和可視化工具

事實證明,推薦的工具不是我所需要的,或者似乎無法讓他們在我的機器上工作。在x86架構上,全是Debian 6,32位。

EZtrace結合ViTE似乎是我正在尋找。但不幸的是我無法讓它工作。 (工具無法在某些版本中編譯,其他版本崩潰,從未真正看到它的工作。不同的計算機(Ubuntu 10.04 x64)顯示其他錯誤)

是否有一個跟蹤解決方案,能夠可視化pthreaded程序的行爲Linux,這實際上已知工作?

回答

2

Valgrind's Tool Suite [Linux和OS/X]

我用MEMCHECK,它像宣傳的那樣。然而,我還沒有使用可視化工具。不確定Helgrind的輸出是否可以用於使用kCachegrind進行查看。

的Valgrind的分佈包括四個[原文如此]有用的調試和分析工具:

  • MEMCHECK檢測存儲器管理問題,並且在C和C++程序主要目的。當一個程序在Memcheck的監督下運行時,所有的內存讀寫都被檢查,並且malloc/new/free/delete的調用被攔截。因此,Memcheck可以檢測到您的程序:

    訪問內存不應該... 以危險的方式使用未初始化的值。 泄漏內存。 堆塊是否有問題(雙重釋放,不匹配的釋放)。 將重疊的源和目標內存塊傳遞給memcpy()及相關函數。 Memcheck報告這些錯誤一旦發生,給出它發生的源代碼行號...

  • Cachegrind是一個緩存分析器。它對CPU中的I1,D1和L2緩存進行了詳細的模擬,因此可以準確查明代碼中的緩存未命中源。

  • 由Josef Weidendorfer提供的Callgrind是Cachegrind的擴展。它提供了Cachegrind所做的所有信息,以及有關調用圖的額外信息。它在版本3.2.0中被摺疊爲主要的Valgrind發行版。單獨提供的是一個了不起的可視化工具,KCachegrind,它更好地概述了Callgrind收集的數據;它也可以用來顯示Cachegrind的輸出。

  • Massif是一個堆探查器。它通過定期獲取程序堆的快照來執行詳細的堆分析。它產生表示隨着時間的推移堆的使用情況,包括有關該程序的部分負責最存儲器分配的信息的曲線圖...

  • Helgrind是一個線程調試器,其發現在多線程程序數據爭用。它查找可以被多個(POSIX p-)線程訪問的內存位置,但是可以找到沒有一致使用(pthread_mutex_)鎖定的內存位置。這些位置表示線程之間缺少同步,並可能導致難以發現的與時間有關的問題。它對於任何使用pthread的程序都很有用。這是一個有點實驗性的工具,所以你的反饋在這裏特別受歡迎。

+1

+1對於'Helgrind',這是一個不錯的工具。要快速嘗試,請執行'valgrind --tool = helgrind ./myprogram --args'。我已經看到了種族條件和僵局的可能原因,但仍有一些令人討厭的錯誤沒有得到解決。特別是,我仍然沒有得到爲什麼一些程序維護無法在某些資源上獲得一個readlock的原因,但是沒有其他線程(我現在找不到)使用該資源 - 唯一可能的解釋...歡迎任何其他有用的工具/建議:-) – nemesisfixx 2012-06-14 07:19:27

0

DIVINE可以得出狀態空間的曲線圖,並檢查違反斷言。

+0

此答案中的鏈接是一個404 :( – blueshift 2017-02-22 00:44:17