0

我正面臨一個很難找到的錯誤。基本上發生的是,一個線程釋放一個內存塊,而另一個線程仍然有一個引用它(這不是我的代碼,這使得一切更難...)。在Visual Studio中是否存在與malloc_history等效的內容?

我是Windows平臺上的新成員,但我已嘗試使用Application Verifier和PageHeap啓用它 - 存在的問題是,錯誤不再發生(可能是因爲現在一切都比較慢 - 所以我正在處理與古典比賽條件)。在Linux下,我會嘗試使用Valgrind來處理這種錯誤 - 但這可能與Application Verifier具有相同的效果(不再看到錯誤..)。

在Mac OS X上,我會使用malloc_history來追蹤這個錯誤。那麼在Visual Studio或WinDbg中有沒有相同的東西?我想這樣做的是以下幾點:

  • 在調試器中運行該程序,直到其與段錯誤
  • 突破獲得釋放對象的地址,並從那裏得到其中塊居然刪除了堆棧跟蹤。

這可能與一些Windows/Visual Studio工具?

+0

我從來沒有使用過它,但是這個工具看起來有潛力:http://drmemory.org/ –

回答

-1

我會通過解決這個問題開始:

「一個線程釋放一個內存塊,而另一個線程仍然有它的一個引用」

+1

據我瞭解這個問題,他想跟蹤受影響的內存塊/參考。 – Pixelchemist

+0

如果這項工作有一個完美的工具,我認爲他仍然需要修復線程正在同步內存位而不同步的事實 –

+1

這是一個問題:我需要找到釋放內存的線程。告訴我「你應該修復bug修復bug」並不是很有幫助。我需要的是一個工具,可以跟蹤調用free()並告訴我是誰用一個特定的參數實際調用它。所以是的,我需要解決這樣的事實,即兩個線程在沒有同步的情況下在同一位內存上工作,但爲了做到這一點,我需要弄清楚這些線程在哪裏以及哪裏發生了這種情況。在Linux上,Valgrind會幫助我發現,在OSX malloc_history上 - Windows上有什麼東西? –

相關問題