歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 教你如何馴服Linux系統中的Bug

教你如何馴服Linux系統中的Bug

日期:2017/2/28 17:52:37   编辑:Linux教程

調試zSeries上的Linux應用程序類似於調試其他體系結構上的Linux應用程序。對於有經驗的Linux開發人員,最大的挑戰是理解新的系統體系結構。對於剛接觸Linux的大型機開發人員,掌握新的調試工具似乎是一項令人畏懼的任務。不要害怕。本文將提供一些有用的提示來幫助您入門。

學問來自實踐,但是對於調試工具,在沒有出現問題而迫使您去修復它們之前,“實踐”是不會發生的。考慮到這點,下面將提供讓您入門的“速成”指南。

User Debug 日志記錄

調試一個崩潰的程序的第一步是弄清哪裡出了錯。zSeries 上的Linux內核具有這樣一個內置特性,它在用戶進程崩潰時記錄一些基本的調試信息。要啟用這個特性,請以 root 用戶身份執行如下命令:

echo 1 >> /proc/sys/kernel/userprocess_debug

當某個進程崩潰時,日志文件(/var/log/messages)中就會給出附加的信息,包括程序終止原因、故障地址,以及包含程序狀態字(PSW)、通用寄存器和訪問寄存器的簡要寄存器轉儲。

Mar 31 11:34:28 l02 kernel: User process fault: interruption code 0x10
Mar 31 11:34:28 l02 kernel: failing address: 0
Mar 31 11:34:28 l02 kernel: CPU:    1
Mar 31 11:34:28 l02 kernel: Process simple (pid: 30122, stackpage=05889000)
Mar 31 11:34:28 l02 kernel:
Mar 31 11:34:28 l02 kernel: User PSW:    070dc000 c00ab738
Mar 31 11:34:28 l02 kernel: task: 05888000 ksp: 05889f08 pt_regs: 05889f68
Mar 31 11:34:28 l02 kernel: User GPRS:
Mar 31 11:34:28 l02 kernel: 00000000  004019a0  004019a0  00000000
Mar 31 11:34:28 l02 kernel: 00000003  c00ab732  004008f8  00400338
Mar 31 11:34:28 l02 kernel: 40018ffc  0040061c  40018e34  7ffff800
Mar 31 11:34:28 l02 kernel: 00400434  80400624  8040066e  7ffff800
Mar 31 11:34:28 l02 kernel: User ACRS:
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000001  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: 00000000  00000000  00000000  00000000
Mar 31 11:34:28 l02 kernel: User Code:
Mar 31 11:34:28 l02 kernel: 44 40 50 00 07 fe a7 4a 00 01 18 54 18 43 18 35
a8 24 00 00

圖 1

圖 1 表明程序(名為“simple”)以一個程序中斷代碼 0x10 終止(操作系統原理表明這是一個段轉換錯誤),而故障地址為 0。毫無疑問,有人使用了空指針。現在我們知道發生了什麼,下面需要弄清它發生在何處。

Copyright © Linux教程網 All Rights Reserved