本站小編為你精心準備了軟件跟蹤技術系統的有效性參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
DBX調試技術
dbx是一個交互式源碼級命令行調試工具。可用它以可控方式運行程序并檢查已停止程序的狀態。dbx使您能夠完全控制程序的動態執行過程,包括收集性能和內存使用數據、監視內存訪問及檢測內存泄漏。可使用dbx調試由C、C++或Fortran語言編寫的應用程序。
在UNIX操作系統中,當日志無法提供幫助時,可以使用truss來查看應用程序的運行情況,跟蹤顯示應用程序對外部庫和內核的調用情況。應用程序通過這些調用來訪問網絡、文件系統及顯示。通過觀察這些調用及其結果,可以了解應用程序需要什么,并由此找到解決方案。下面重點對truss動態跟蹤調試技術進行了研究。
動態跟蹤調試方法
1信號量互鎖引起程序掛起的跟蹤技術
在UNIX系統中,系統內部的信息都采用內存訪問的方式傳輸,這就必然會用到信號量的鎖機制。對鎖機制的使用,很有可能出現互鎖的情況。此時,應用程序并沒有死掉,只是掛起了而沒有退出,也不會產生核心文件core,不能使用dbx進行調試。這種行為通常是兩個進程爭用一個信號量鎖,引起死鎖。此時,用truss進行程序的跟蹤調試,就可以很快找出問題的原因。例如執行一個程序,該程序正常情況下是需要通過內存進行接收消息的,并且是阻塞方式。在正常情況下顯示如下信息最后一個調用,semop(),因為函數發生了阻塞,所以被標記為sleeping。這意味著該函數正在等待某個事件的發生,并且內核將這個進程置于睡眠狀態,直到發生了相應事件。查看semop()函數,發現是信號量鎖機制的函數,經過進一步地分析,因為收發程序的鎖沒有控制好,被鎖死引起的,關閉發送程序后,程序就可以正常運行了。通過使用truss跟蹤調試,可以很快找出信號量互鎖引起程序掛起的情況,同時也可以快速查找兩個進程爭用一個文件鎖的問題。這就需要在平時的調試中積累經驗。
2文件權限引起程序故障的跟蹤技術
還有一種對于文件權限,開發人員并不注意,經常出現文件不能打開或者不能訪問的情況。如果開發人員再忘記檢查函數的結果,那檢查問題的所在就比較困難,但使用truss可以很方便地找到問題。例如,下面是一個應用程序在打開操作失敗時的輸出:可以發現以open("/etc/nodename"...開始的一行,該行不僅看起來相關,并且還返回了錯誤Err#13EACCES。對/etc/nodename進行查看,則將顯示該用戶沒有讀取這個文件的權限。使用chmod命令來更改權限,該程序就可以正常地運行了。
3對正在運行的程序進行跟蹤調試技術
當應用程序正在運行,剛開始的時候,其CPU占用率比較正常,在某個特定的時間,突然就增加到100%,而當程序重新啟動后,又恢復正常,但運行一段時間后又出現了,此時使用truss,使用“-p”參數,調試正在運行的程序,可以快速地找到問題。通過man功能,還可以查看到truss還有其他參數,可以使用-t選項篩選系統調用。-e選項顯示每個exec系統調用中環境變量的通過情況,-o可以輸出到一個文件中,等等。
結束語
Truss命令是SolarisUNIX下的跟蹤調試技術,在其他UNIX操作系統中,都提供了相似的跟蹤命令。在Linux中,可以使用strace命令來執行跟蹤,其他UNIX版本中的應用程序跟蹤可能使用ptrace和ktrace等。當常規的程序調試方法失效時,用這些跟蹤調試技術是有效的排除故障的方法,可以觀察到程序對系統的所有調用。通過觀察這些調用及其結果,由此找到解決方案。
作者:李璋靜單位:中國電子科技集團公司第二十八研究所