歡迎來到 常識詞典網 , 一個專業(yè)的常識知識學習網站!
[ Ctrl + D 鍵 ]收藏本站
答案 1:
Core Dump通常是操作系統(tǒng)提供的調試輔助操作。用于當程序崩潰——通常是不得不調用abort()——時將程序當時的內存快照保留在一個文件里。程序員可以用調試器分析其中的內容從而推斷究竟是什么原因引起了崩潰。Windows和傳統(tǒng)UNIX都提供了這樣的選項,允許程序崩潰時內核自動介入并創(chuàng)建dump。通常內核和用戶態(tài)程序都可以保存dump。傳統(tǒng)上C/C++程序很多錯誤都能造成程序崩潰,一個常見的例子是內存訪問違例,不只是空指針,也包括很多其他的情形。對Windows而言,它也允許通過AppVerifier和Gflags強制在更多的情況讓程序崩潰,比如內存泄漏或不當訪問(野指針)時。Linux下我一般只用log,用工具調試的經驗不多,如有專家不妨賜教。Dump這東西往往很討人厭,因為它只是程序崩潰瞬間的快照,而很多程序錯誤并不是出錯即停的,從這個快照里推導出程序的bug,就像福爾摩斯要從兇殺現場還原出沼地蝰蛇如何爬到隔壁咬死受害人的過程,充滿了謎題、猜測和推理,而且破案的成功率也難以保證。我幸運地有過兩次成功地從dump分析bug的經歷,每次分析幾乎都歷時一月以上。整體上在過去五年里,我遇到的情況都是以分析失敗居多。相對地,我所合作過的程序員往往也不愿意調試這樣的bug。最近十年來由于托管程序興起(Java/.NET/Pyt-on/...),我們的實際程序生活中已經很少出現程序崩潰的情形了,取而代之的是以程序拋出異常的形式退出。這種情況下由于其運行時并無調用abort()之虞,程序往往不會有dump產生,因為操作系統(tǒng)并不負責管理那些異常,在它的角度上看它只能看到運行時系統(tǒng)(比如Pyt-on解釋器或Java虛擬機)給出了某個非0的退出碼然后退出執(zhí)行。這其中比較特別一點的是.NET。我曾經聽說過Windows下可以通過Visual Studio在.NET程序拋出異常時強制介入并斷下程序執(zhí)行,然后程序員可以選擇是否保存dump。因為.NET和Windows系統(tǒng)的緊密關系,微軟可以做到這一點。而如果某個解釋執(zhí)行的程序能讓解釋器崩潰,那么問題可大了:這說明這個解釋器可能被-作為攻擊的目標。至于寫下那篇FAQ的那位“圣哲”所言的Strong Typing means no core dumps,又是一條夢囈一般的宣傳。這根本是風馬牛不相及的兩個東西。沒有core dump的充分條件是我們的程序運行在某個運行時之上,而當程序出錯時運行時能正確處理錯誤而沒有abort(),通常也就沒有core dump。我接觸Haskell的時間雖然很短,但至少也知道GHC和Hugs98都有解釋執(zhí)行的能力,GHC雖然可以編譯代碼,但它的程序也有一個厚厚的運行時。這才是Haskell沒有core dump的真正原因。=====最后個人吐槽。話比較難聽。如有喜愛Haskell的知友不適,請見諒。對于能在Haskell社區(qū)的公開場合看到這樣毫無常識的發(fā)言,我一點都不意外。就我開始接觸Haskell以來,這也不是第一次遇到了。它完全符合我對Haskell社區(qū)一部分吹鼓手的印象:對形式邏輯毫無理性的迷戀和對計算機工程和歷史非一般的無知,并且以一知半解為榮。最要命的是,恰恰是這幫迷戀邏輯和推理的人,說起話來毫無邏輯。我想,恐怕這位FAQ作者所見過的最牛的所謂程序bug大概也就是編譯錯誤。這樣很好,就像我之前無數次說的,就讓他們繼續(xù)做他們的千秋大夢吧。答案 2:
我不是很了解Haskell,但是根據字面上理解,FAQ里面說的"No core dumps"是指它可以完全防止空指針的訪問。一般來說,在C/C++中,對空指針的任何調用或者說訪問非法內存地址的時候會導致程序崩潰,從而生成core dump。答案 3:
我不太明白什么叫“Haskell 沒有 core dumps”。至于別的語言,Pyt-on/Ruby/Perl/S-ell/PHP/Erlang/Lua/Javascript/Java/C#/etc 和 Haskell 都一樣的,包了層虛擬機或者解釋器,錯誤都被它們處理了。至于什么叫“core dump”,請自行查閱-。答案 4:
"core dump"就是傳說中的“吐核”。。。答案 5:
Haskell能保證自己不出core dump?哈哈下一篇:最近豆瓣的收藏、推薦等功能很卡? 下一篇 【方向鍵 ( → )下一篇】
上一篇:網站原型設計工具有哪些? 上一篇 【方向鍵 ( ← )上一篇】
快搜