2014-02-08 24 views
0

我的程序是一個用C編寫的多線程程序,可以在Solaris上運行。我可以知道哪個線程會從核心轉儲文件中更改全局變量的值嗎?

現在,一個變量(在堆malloced)有時從一個有效的值改變爲NULL,所以訪問時,核心轉儲發生。

我已經嘗試了所有我知道的方法:使用libumem進行,添加日誌,代碼演練,並沒有什麼可以發現。

所以,當我再次分析核心轉儲文件,我有一個奇妙的想法:我可以知道哪個線程改變全局變量(包括堆malloced)的主營轉儲文件的價值?任何人都可以從核心轉儲文件提供一些線索?

+0

沒有,真的沒有。您可以嘗試設置內存斷點以查看變量何時設置爲NULL? – NPE

+0

爲什麼不在訪問它之前檢查'NULL'? –

+0

@NPE:在接收到消息時,內存被打開,處理完消息後,內存將被釋放。這不總是一個問題,所以我不能設置內存斷點。 –

回答

2

我可以知道哪個線程會從核心轉儲文件中更改全局變量(包括從堆中刪除)的值嗎?在碰撞點的進程內存的

核心轉儲記錄當前的狀態,而不是它的歷史。就像在牆上看一張噴漆塗鴉的照片一樣,你不能分辨是誰畫的,在覈心轉儲處看着NULL不會告訴你誰把它放在那裏。

相關問題