久久综合精品无码一区二区三区|精品日韩一区二区视频播放|亚洲欧洲日韩国内高清|在线视频亚洲一区
問答
產品
|
公司
|
配件目錄
|
EPC底盤號查詢
下載手機汽配人
汽配人首頁 >
問答首頁
centos中出現(xiàn)sigsegv和sigbus錯誤,怎么辦
問
提問者:網友
|
2017-12-20
最佳回答
SIGBUS和SIGSEGV也許是我們在平時遇到的次數最多的兩個內存錯誤信號。內存問題一直是最令我們頭疼的事情,弄清楚兩個信號的發(fā)生緣由對我們很好的理解程序的運行是大有裨益的。我們來看兩段程序://testsigsegv.cint main() { char *pc = (char*)0x00001111; *pc = 17;}//testsigbus.cint main() { int *pi = (int*)0x00001111; *pi = 17;}上面的代碼那么的相似,我們也同樣用gcc編譯(加上-g選項,便于gdb調試;平臺Solaris Sparc),執(zhí)行結果也都是dump core。但通過GDB對core進行觀察,你會發(fā)現(xiàn)細微的不同。第一個例子出的core原因是:Program terminated with signal 11, Segmentation fault. 而第二個例子的core則提示:Program terminated with signal 10, Bus error. 兩者有什么不同呢?這兩段代碼的共同點都是將一個非法地址賦值給指針變量,然后試圖寫數據到這個地址。如果要說清楚這個問題,我們就要結合匯編碼和一些計算機的體系結構的知識來共同分析了。先來看testsigsegv.c的匯編碼:... ...main: !#PROLOGUE# 0 save %sp, -120, %sp !#PROLOGUE# 1 sethi %hi(4096), %i0 or %i0, 273, %i0 st %i0, [%fp-20] ld [%fp-20], %i1 mov 17, %i0 stb %i0, [%i1] nop ret restore... ...我們關注的是這句:stb %i0, [%i1]從計算機底層的執(zhí)行角度來說,過程是如何的呢?%i0寄存器里存儲的是立即數17,我們要將之存儲到寄存器%i1的值指向的內存地址。這一過程對于CPU來說其指揮執(zhí)行的正常過程是:將寄存器%i0中的值送上數據總線,將寄存器%i1的值送到地址總線,然后使能控制總線上的寫信號完成這一向內存寫1 byte數據的過程。我們再看testsigbus.c的匯編碼:... ...main: !#PROLOGUE# 0 save %sp, -120, %sp !#PROLOGUE# 1 sethi %hi(4096), %i0 or %i0, 273, %i0 st %i0, [%fp-20] ld [%fp-20], %i1 mov 17, %i0 st %i0, [%i1] nop ret restore... ...同樣最后一句:st %i0, [%i1],CPU執(zhí)行的過程與testsigsegv.c中的一致(只是要存儲數據長度是4字節(jié)),那為什么產生錯誤的原因不同呢?一個是SIGSEGV,而另一個是SIGBUS。這里涉及到的就是對內存地址的校驗的問題了,包括對內存地址是否對齊的校驗以及該內存地址是否合法的校驗。我們假設如果首先進行的內存地址是否合法的校驗(是否歸屬于用戶進程的地址空間),那么我們回顧一下,這兩個程序中的地址0x00001111顯然都不合法,按照這種流程,兩個程序都應該是SIGSEGV導致的core才對,但是事實并非如此。那難道是先校驗內存地址的對齊?我們再看這種思路是否合理?testsigsegv.c中,0x00001111這個地址值被賦給了char *pc;也就是告訴CPU通過這個地址我們要存取一個字節(jié)的值,對于一個字節(jié)長度的數據,無所謂對齊,所以該地址通過對齊校驗;并被放到地址總線上了。而在testsigbus.c里,0x00001111這個地址值被賦給了int *pi;也就是告訴CPU通過這個地址我們要存取一個起碼4個字節(jié)的值,那么對于長度4個字節(jié)的對象,其存放地址起碼要被4整除才可以,而0x00001111這個值顯然不能滿足要求,也就不能通過內存對齊的校驗。也就是說SIGBUS這個信號在地址被放到地址總線之后被檢查出來的不符合對齊的錯誤;而SIGSEGV則是在地址已經放到地址總線上后,由后續(xù)流程中的某個設施檢查出來的內存違法訪問錯誤。一般我們平時遇到SIGBUS時總是因為地址未對齊導致的,而SIGSEGV則是由于內存地址不合法造成的。1) SIGBUS(Bus error)意味著指針所對應的地址是有效地址,但總線不能正常使用該指針。通常是未對齊的數據訪問所致。2) SIGSEGV(Segment fault)意味著指針所對應的地址是無效地址,沒有物理內存對應該地址。 Linux的mmap(2)手冊頁使用映射可能涉及到如下信號SIGSEGV 試圖對只讀映射區(qū)域進行寫操作SIGBUS 試圖訪問一塊無文件內容對應的內存區(qū)域,比如超過文件尾的內存區(qū)域,或者以前有文件內容對應,現(xiàn)在為另一進程截斷過的內存區(qū)域。調試方法:gcc -g 編譯 ulimit -c 20000 之后運行程序,等core dump 最后gdb -c core
回答者:網友
產品精選
我來回答
看不清?換一個
提交答案
相關已解答問題
車載輪胎充氣泵怎么用
汽車安全帶怎么清洗
奧迪A4 Allroad quattro和A5 Sportback是混型車嗎?
A4 allroad 二代EA888發(fā)動機燒機油嗎
什么牌子的越野車好?
壓力傳感器安裝在什么位置?
重型半掛牽引車疲勞駕駛扣幾分
長城哈弗h6coupe車身自重
1.8噸貨車年檢都需要什么 需要多少錢
2橋的集裝箱半掛車多少錢?
在移動端查看:
centos中出現(xiàn)sigsegv和sigbus錯誤,怎么辦
搜索問答
還沒有汽配人賬號?
立即注冊
我要提問
精彩推薦
1
鋼板彈簧懸架和霍奇基斯懸架哪個好
2
奧迪A6L 換防凍液之后怎么排空氣?
3
奧迪Q7車身車架號在哪?
4
奧迪a6電瓶正負極在哪
5
車輛類型(車輛類型K21、K31、K32、H32各代表什么意思?)
6
東風天錦,凸輪軸與曲軸轉速傳感器不匹配
7
奧迪245/40/R18是什么意思
8
東風天龍駕駛座椅氣囊怎么沒反應
9
東風天龍汽車儀表未收到EECU報文是什么原因呢
10
東風天錦儀表中顯示STOP在閃爍是代表什么意思!只要閃爍了車儀表故障碼就顯示不出來,但是車就是打不著火!
周邊商家推薦
周邊產品推薦
相關問答
機戰(zhàn)中防護罩的原理
奧迪A8W12,寶馬760li,奔馳S600,哪個綜合起來最好
歐洲之星客車和青年客車哪個好點
雪佛蘭克魯斯汽車發(fā)動機有敲缸聲音怎么辦
物流學生去超市好啊還是去汽車配件流水線好啊
哈力愛俊達的150CC-250CC的仿跑摩托車怎么樣?
群達1000合一 萬能空調遙控器 壞了,急求!!
你好 請問你下 按結 要有些什么明細的東西
拜求大神解答皇冠轉速表正常但速度表不轉怎么回事
產品精選
倍耐力輪胎
河北半掛車
撥動開關
高壓清洗管道
開封隨車吊
南京軸承
VG1560130064
DZ1642690021
電纜線
雨刷器電機
優(yōu)勢廠家
無油軸承廠家
法士特取力器廠家
寶馬空氣流量計廠家
大運六角頭螺栓廠家
佩特來開關廠家
PI5130SMX6廠家
SZ955001028廠家
奇瑞t11廠家
汽油泵廠家
指示燈廠家
圖片大全
風神曲軸圖片
浙江發(fā)電機圖片
東風新車圖片
康明斯拆裝器圖片
5001040圖片
81.96121.0056圖片
集濾器圖片
剪刀圖片
螺栓圖片
示廓燈圖片
推薦主題
發(fā)電機組
解放車橋
三菱8DC
濰柴JX0818
蓄電池
河北空氣濾芯
HFF24102038CK1
C3782374
Bravo
汽車噴油器
本頁是網友提供的關于“centos中出現(xiàn)sigsegv和sigbus錯誤,怎么辦”的解答,僅供您參考,汽配人網不保證該解答的準確性。
協(xié)議規(guī)則
服務協(xié)議
交易規(guī)則
注冊新用戶
幫助中心
網站服務
汽配旺鋪
網價查詢
商用車EPC查詢
營銷寶
特色市場
商用車市場
乘用車市場
東風市場
重汽市場
陜汽市場
一汽市場
北汽市場
江淮市場
專用汽車
地方分站
江蘇分站
廣東分站
山東分站
吉林分站
專用車分站
河南分站
十堰產業(yè)帶
云南分站
陜西市場
移動端
手機登錄:m.qipeiren.com
iPhone
Android
關于我們
|
友情鏈接
|
汽車配件批發(fā)
|
汽車配件圖片
|
汽車配件大全
|
汽配問答
|
汽配廠家
|
汽配品牌
|
汽配主題
|
汽配城
|
鄂ICP備14009261號
經營許可證編號:鄂B2-20250371
服務熱線:0719-8311727
Copyright © 2005-2025 十堰億脈科技有限公司 版權所有
鄂公網安備 42030202000345號
西乡县
|
自贡市
|
虞城县
|
仪陇县
|
福贡县
|
石泉县
|
浦东新区
|
石林
|
阜宁县
|
偏关县
|
华蓥市
|
阿勒泰市
|
孟州市
|
项城市
|
元江
|
涿州市
|
蓝山县
|
汤原县
|
石棉县
|
海口市
|
中山市
|
建德市
|
朝阳县
|
高淳县
|
广汉市
|
尚志市
|
昂仁县
|
新绛县
|
嘉定区
|
鸡泽县
|
盐池县
|
那坡县
|
黄大仙区
|
冀州市
|
石门县
|
同江市
|
沅江市
|
玉环县
|
衡东县
|
大连市
|
铁力市
|