您的位置: 首頁 >商業(yè) >

Windows10如何用DTrace跟蹤那個(gè)煩人的bug

2020-04-08 16:25:25 編輯: 來源:
導(dǎo)讀 如果您一直使用Unix或Linux構(gòu)建復(fù)雜的應(yīng)用程序,那么您應(yīng)該熟悉DTrace。它最初是由Sun開發(fā)的,它是一個(gè)動(dòng)態(tài)跟蹤工具,允許您深入了解正在運(yùn)行的系統(tǒng)中發(fā)生的許多事情,從硬件到操作系統(tǒng),再到您的應(yīng)用程序。這個(gè)強(qiáng)大的工具為您提供了許多信息,可以幫助您調(diào)試和優(yōu)化代碼。 使用命令行和它自己的腳本語言D,您可以編寫跟蹤程序,將操作分配給插裝探測(cè)。您可以將DTrace探測(cè)器視為連接到操作系統(tǒng)或代碼的萬

如果您一直使用Unix或Linux構(gòu)建復(fù)雜的應(yīng)用程序,那么您應(yīng)該熟悉DTrace。它最初是由Sun開發(fā)的,它是一個(gè)動(dòng)態(tài)跟蹤工具,允許您深入了解正在運(yùn)行的系統(tǒng)中發(fā)生的許多事情,從硬件到操作系統(tǒng),再到您的應(yīng)用程序。這個(gè)強(qiáng)大的工具為您提供了許多信息,可以幫助您調(diào)試和優(yōu)化代碼。

使用命令行和它自己的腳本語言D,您可以編寫跟蹤程序,將操作分配給插裝探測(cè)。您可以將DTrace探測(cè)器視為連接到操作系統(tǒng)或代碼的萬用表連接,等待滿足某個(gè)條件,然后記錄適當(dāng)?shù)男畔?。DTrace的優(yōu)點(diǎn)之一是能夠使用多個(gè)探測(cè),提供了您需要的工具來理解事件之間的關(guān)系,并幫助您跟蹤傳統(tǒng)調(diào)試工具無法查明的復(fù)雜bug。

許多調(diào)試工具都會(huì)對(duì)代碼的性能產(chǎn)生影響,而DTrace的設(shè)計(jì)目標(biāo)是盡可能減少影響。這是一個(gè)重要的區(qū)別,它允許您擁有數(shù)百甚至數(shù)千個(gè)探測(cè)。這是一個(gè)可以很好地與現(xiàn)代分布式應(yīng)用程序一起工作的模型,因?yàn)樗故玖宋⒎?wù)是如何運(yùn)行的,并為您提供了您以前沒有的可觀察性。

DTrace的D語言被設(shè)計(jì)成類似于C語言,所以它并不難學(xué)。腳本中使用的語法與命令行調(diào)用中使用的語法相同,命令行調(diào)用提供了一種將探測(cè)放入特定操作的快速方法,可以在屏幕上顯示結(jié)果。命令行可以幫助測(cè)試和調(diào)試腳本;您可以在將探測(cè)添加到更復(fù)雜的集合之前交互式地嘗試探測(cè),了解可用于驅(qū)動(dòng)其他探測(cè)的輸出格式。

微軟現(xiàn)在已經(jīng)將DTrace移植到Windows上,構(gòu)建在開放的DTrace代碼和規(guī)范的基礎(chǔ)上,增加了特定的Windows特性,支持對(duì)Windows事件跟蹤(ETW)、Windows系統(tǒng)調(diào)用和Windows進(jìn)程id的跟蹤。雖然Windows具有與Unix和Unix派生的操作系統(tǒng)非常不同的體系結(jié)構(gòu)模型,但是您應(yīng)該發(fā)現(xiàn)DTrace可以很好地與Windows配合使用,特別是在使用特定于Windows的跟蹤功能時(shí)。

雖然Windows有自己的ETW跟蹤工具,但它們是靜態(tài)的,需要構(gòu)建到您的代碼中。DTrace是動(dòng)態(tài)的,它的優(yōu)點(diǎn)是能夠在運(yùn)行時(shí)工作,允許您快速地測(cè)試和跟蹤運(yùn)行中的代碼。甚至可以快速測(cè)試生產(chǎn)系統(tǒng),獲得調(diào)試問題所需的詳細(xì)信息,完成后刪除DTrace工具和配置。

用戶通過DTrace命令與DTrace交互,DTrace命令是DTrace引擎的通用前端。D腳本被發(fā)送到DTrace內(nèi)核組件執(zhí)行,有時(shí)稱為DIF虛擬機(jī)。Traceext。sys是微軟添加的一個(gè)新的內(nèi)核擴(kuò)展驅(qū)動(dòng)程序,它允許Windows公開DTrace提供跟蹤所依賴的功能。

安裝DTrace不像安裝傳統(tǒng)的Windows應(yīng)用程序那么容易。這是一個(gè)非常低級(jí)的工具,需要重新啟動(dòng)幾次才能運(yùn)行。首先從Microsoft下載適當(dāng)版本的DTrace。目前支持的版本只在windows10 2004或更高版本上運(yùn)行;1904年和1909年的早期存檔版本仍然可以下載,但不再支持。

下載后,安裝DTrace應(yīng)用程序,然后使用BCDEdit將其添加到Windows啟動(dòng)配置中。你可能需要關(guān)閉BitLocker,如果你使用它來保護(hù)你的電腦的開機(jī)配置,否則你可能需要在下次開機(jī)時(shí)輸入你的BitLocker密鑰。

接下來,將您的Windows PATH環(huán)境變量設(shè)置為引用DTrace,并為任何調(diào)試符號(hào)添加一個(gè)新的環(huán)境變量。這些文件將在需要時(shí)從微軟下載。最后,確保您已經(jīng)設(shè)置了虛擬安全模式來跟蹤Windows內(nèi)核邊界。

參見:讓W(xué)indows 10以你想要的方式工作的20個(gè)專業(yè)提示(免費(fèi)PDF)(TechRepublic)

許多開發(fā)人員在虛擬機(jī)上進(jìn)行測(cè)試,只要DTrace支持嵌套虛擬化,它就會(huì)在VM中運(yùn)行。您可以在PowerShell中實(shí)現(xiàn)這一點(diǎn),啟用虛擬化擴(kuò)展,然后重新啟動(dòng)主機(jī)PC。

一個(gè)重要的警告是,為了讓DTrace正常工作,您需要以本地管理帳戶的身份運(yùn)行,所以如果您使用Microsoft帳戶登錄到Windows 10,請(qǐng)準(zhǔn)備好添加一個(gè)新的本地用戶。當(dāng)您更新Windows Insider構(gòu)建時(shí),請(qǐng)記住通過BCDEdit重新啟用DTrace。

準(zhǔn)備好運(yùn)行DTrace之后,您可以使用命令行單行工具查看可用的探測(cè)并嘗試簡(jiǎn)單的查詢,從而掌握D命令的結(jié)構(gòu)。一旦您熟悉了這些,您就可以開始構(gòu)建自己的腳本了。Microsoft在其DTrace GitHub頁面上提供了一節(jié)樣例腳本,它可以幫助您開始跨應(yīng)用程序的跟蹤。值得花點(diǎn)時(shí)間讀一本關(guān)于D的書,因?yàn)榫幊谈櫮_本可能很復(fù)雜,尤其是在很可能異步觸發(fā)探測(cè)的情況下。可以從dtrace.org網(wǎng)站上的免費(fèi)動(dòng)態(tài)跟蹤指南入手。雖然它在技術(shù)上是為illumos(一個(gè)基于Open Solaris的開源操作系統(tǒng))設(shè)計(jì)的,但是它的概念和過程可以被轉(zhuǎn)換成Windows。

示例腳本被分成多個(gè)組,查看常見的Windows跟蹤場(chǎng)景。您將發(fā)現(xiàn)一些用于查看磁盤操作,另一些用于文件、內(nèi)存和與ETW一起使用。下載代碼并在您的系統(tǒng)上運(yùn)行它,然后針對(duì)您的特定需求創(chuàng)建自己的版本。

結(jié)果可能很難分析,尤其是當(dāng)你面對(duì)充滿數(shù)字的文件時(shí)。使用Excel或PowerBI之類的工具來構(gòu)建可視化和探索跟蹤數(shù)據(jù),以幫助理解DTrace結(jié)果,這是一個(gè)好主意。

DTrace是一個(gè)強(qiáng)大的工具,很高興看到微軟將它引入Windows。但它顯然不適合初學(xué)者,安裝相對(duì)復(fù)雜,學(xué)習(xí)曲線陡峭。一旦您掌握了它的D語言,并學(xué)習(xí)了如何選擇和實(shí)現(xiàn)探測(cè),那么您就可以研究應(yīng)用程序之間以及與Windows之間的交互方式了。如果您試圖跟蹤一個(gè)棘手的錯(cuò)誤,這是一個(gè)工具,打開一個(gè)全新的窗口到窗口。

通過閱讀這些Windows和Office提示、技巧和備忘單,成為你公司的微軟內(nèi)部人。星期一和星期三送貨


免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章

精彩推薦

圖文推薦

點(diǎn)擊排行

2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082   備案號(hào):閩ICP備19027007號(hào)-6

本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。