1.å¦ä½è§£å³bus error
2.麒麟V10 SP2操作系统GDB多线程调试失败
3.一文分析DPDK跟踪库tracepoint源码
å¦ä½è§£å³bus error
ä¸ï¼Bus Error究ç«æ¯æä»ä¹
Bus Errorï¼å³æ»çº¿é误ã
å¼ååå ï¼
CPUå¤äºæ§è½æ¹é¢çèèï¼è¦æ±å¯¹æ°æ®è¿è¡è®¿é®æ¶é½å¿ é¡»æ¯å°å对é½çãå¦æåç°è¿è¡çä¸æ¯å°å对é½ç访é®ï¼å°±ä¼åéSIGBUSä¿¡å·ç»è¿ç¨ï¼ä½¿è¿ç¨äº§ç core dumpãRISCå æ¬SPARCï¼ä¸ç§å¾®å¤çå¨æ¶æï¼é½æ¯è¿ç§ç±»åçè¯çãxç³»åCPUé½æ¯æä¸å¯¹é½è®¿é®ï¼ä¹æä¾äºå¼å ³ç¦ç¨è¿ä¸ªæºå¶ãxæ¶æä¸è¦æ±å¯¹é½è®¿é®çæ¶åï¼å¿ å®ä¼ææ§è½ä»£ä»·ãä¾å¦ï¼å¯¹intç访é®åºè¯¥æ¯4åè对é½çï¼å³å°ååºè¯¥æ¯4çåæ°ï¼å¯¹shortåæ¯2åè对é½çï¼å°ååºè¯¥æ¯2çåæ°ã
Bus Errorä¹æå¯è½æ¯å 为æºå¨ç©çé®é¢æè 访é®æ æç©çå°åï¼ä½è¿ç§æ åµé常å°è§ã
Linuxå¹³å°ä¸æ§è¡malloc()ï¼å¦æ没æ足å¤çRAMï¼Linuxä¸æ¯è®©malloc()失败è¿åï¼èæ¯åå½åè¿ç¨ååSIGBUSä¿¡å·ã
注: 对该ç¹æ§æçæ度ï¼ææºä¼å¯èªè¡æµè¯ç¡®è®¤å½åç³»ç»ååºã
SIGBUSä¸SIGSEGVä¿¡å·çä¸è¬åºå«å¦ä¸:
1) SIGBUS(Bus error)æå³çæéæ对åºçå°åæ¯ææå°åï¼ä½æ»çº¿ä¸è½æ£å¸¸ä½¿ç¨è¯¥æéãé常æ¯æªå¯¹é½çæ°æ®è®¿é®æè´ã
2) SIGSEGV(Segment fault)æå³çæéæ对åºçå°åæ¯æ æå°åï¼æ²¡æç©çå å对åºè¯¥å°åã
äºï¼ä¾åç¨åºï¼
1 int main(){
2
3
4
5
6 #if defined(__GNUC__)
7 # if defined(__i__)
8
9 __asm__("pushf/norl $0x,sts导入源码(%esp)/npopf");
# elif defined(__x___)
__asm__("pushf/norl $0x,(%rsp)/npopf");
# endif
#endif
short array[];
int * p = (int *) &array[1];
*p = 1;
return 1;
}
shortç±»å大å°ä¸º2个åèï¼å ¶å°åå¿ æ¯2çåæ°ãè对äºintæéæ¥è¯´ï¼è½å¤ä½¿ç¨ä»¥è®¿é®æ°æ®çå°ååºè¯¥æ¯4çåæ°ï¼è½¬åarrary[1]çå°å为int *并访é®ï¼ç³»ç»ä¼ååºSIGBUSä¿¡å·ï¼å¯¼è´ç¨åºå´©æºã
wikiä¸çä¾åï¼
/NhKEJ