簡體   English   中英

當一個線程有訪問沖突時c ++程序終止 - 如何在linux中捕獲 - 對於win32我在vs2010中得到棧跟蹤

[英]c++ program terminating when one thread has access violation - how to catch this in linux - for win32 I get stacktraces in vs2010

c ++程序終止,沒有異常或堆棧跟蹤

我有一個多線程的應用程序

如果我的一個線程有讀取超出數組的訪問沖突(或任何seg故障條件),我的整個應用程序立即終止。

如果在使用visual studio的我的Windows計數器部件上發生這種情況,我會得到一個很好的堆棧跟蹤,其中包含錯誤的位置,以及問題所在。

我迫切需要這種類型的調試環境才能在我的項目中取得成功。 我有太多的線程和太多的開發人員運行項目的不同部分,讓一個人沒有正確處理異常,它會破壞整個項目。

我正在運行Fedora Core 14我正在用gcc編譯4.5.1 gdb是fedora 7.2-16.fc14我的IDE是eclipse Juno我正在使用CDT構建器我的工具鏈是交叉GCC而我的構建器是CDT內部構建器

是否有任何gdb或gcc或eclipse的設置可以幫助我檢測這些類型的情況?

這就是應該發生的事情。 在Unix下,只要您授權,就可以獲得完整的核心轉儲(您可以在調試器中查看)。 ulimits -c -c-傳統上,它們默認是授權的,但Linux似乎已經改變了這一點。)

當然,要從核心轉儲中獲取任何有用的信息,您需要使用符號信息編譯代碼,而不是在以后刪除它。 (另一方面,您可以將用戶計算機上的核心轉儲復制到開發計算機上,看看那里發生了什么。)

詹姆斯坎澤寫道,你肯定在尋找核心轉儲。

我只想補充說,核心轉儲將顯示程序崩潰的位置,這不一定與問題(內存損壞等)發生的位置相同。 當然,一些超出范圍的讀/寫可能不會立即崩潰。

您可以通過在glibc中檢查錯誤的內存分配/解除分配來縮小搜索范圍。 最簡單的方法是設置環境變量MALLOC_CHECK_ 將其設置為2並且glibc將檢查每次內存分配/釋放時的堆損壞,並在發現任何問題時中止程序(如果啟用則生成核心轉儲)。 這通常有助於更接近真正的問題。

http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html

暫無
暫無

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

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