2012-01-07 37 views
3

這是我的核心文件的一部分:核心文件中的地址是什麼?

[New Thread 30385] 
[New Thread 30383] 
[New Thread 30381] 
[New Thread 30379] 
[New Thread 30378] 
[New Thread 30270] 
[New Thread 30268] 
Core was generated by `test'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x001cd1a6 in ??() 

這是否意味着在0x001cd1a6我的程序崩潰或程序崩潰嘗試讀取/寫入該地址?
該地址沒有可執行代碼。
另一件事是它每次崩潰都會給出不同的地址。

回答

3

這是否意味着我的程序崩潰的0x001cd1a6

是。

該地址沒有可執行代碼。

那麼,這肯定會導致崩潰(由於非法指令)。

另一件事是它每次崩潰都會給出不同的地址。

你的程序有線程,所以每次運行它的分配模式都可能不同,因爲線程的調度方式不同。另外,Linux使用地址隨機化,所以如果你連續多次運行非線程化程序,你最終會得到不同的地址。另一方面,GDB會禁用該隨機化,因此如果您在GDB下運行非線程化程序,它應該每次都在同一個地方崩潰。

您很可能會調用已經失效(例如已刪除)的對象的虛擬功能。使用where GDB命令查找如何最終導致無效地址。

另外,不要永遠呼籲UNIX可執行test:這個衝突與/usr/bin/test,其中許多shell腳本將使用。

+0

只要他不安裝它,它不在'PATH'中,這沒什麼大不了的。而且,誰會這樣做一個測試程序?另外,'test'通常是shell內建的。 – Dave 2012-01-07 23:17:58

+0

+1。如果我可以提及'/ usr/bin/test'的命名衝突,我會再次投票。這是意想不到的事情,導致無休止的調試沒有任何好處。 – jmkeyes 2012-01-08 00:48:25

+0

就業俄羅斯,我認爲你應該寫一本調試書。我一定會購買它。我一直在這裏觀察你的答案,我可以說他們沒什麼優秀的。非常感謝你。 – 2012-01-08 16:04:22

相關問題