[英]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.