DTrace บน Windows ได้รับการอัพเดต 20H1 พร้อมรองรับ ARM64
DTrace เป็นเครื่องมือแก้ไขจุดบกพร่องและวินิจฉัยโอเพ่นซอร์สยอดนิยม เดิมสร้างขึ้นสำหรับ Solaris และพร้อมใช้งานสำหรับ Linux, FreeBSD, NetBSD และ macOS Microsoft ได้ย้ายไปยัง Windows และเพิ่มส่วนหนึ่งของการอัปเดตด้วยการอัปเดตคุณลักษณะ 20H1
DTrace เป็นเฟรมเวิร์กการติดตามแบบไดนามิกที่ช่วยให้ผู้ดูแลระบบหรือนักพัฒนาสามารถดูระบบแบบเรียลไทม์ได้ทั้งในโหมดผู้ใช้หรือโหมดเคอร์เนล DTrace มีภาษาการเขียนโปรแกรมระดับสูงและทรงพลังสไตล์ C ที่ให้คุณแทรกจุดติดตามแบบไดนามิกได้ เมื่อใช้จุดติดตามที่แทรกแบบไดนามิกเหล่านี้ คุณสามารถกรองเงื่อนไขหรือข้อผิดพลาด เขียนโค้ดเพื่อวิเคราะห์รูปแบบการล็อก ตรวจจับการชะงักงัน ฯลฯ
บน Windows DTrace ขยาย Event Tracing สำหรับ Windows (ETW) ซึ่งเป็นสแตติกและไม่ให้ความสามารถในการแทรกจุดการติดตามโดยทางโปรแกรมขณะรันไทม์
API และการทำงานทั้งหมดที่ใช้โดย dtrace.sys เป็นการเรียกเอกสาร
Microsoft ได้ใช้ไดรเวอร์พิเศษสำหรับ Windows 10 ที่อนุญาตให้ดำเนินการตรวจสอบระบบได้หลายบทบาท ไดรเวอร์ถูกสร้างขึ้นใน Windows 10 โดยเริ่มในเวอร์ชัน 1903
เริ่มต้นใน Windows 10 Insider build 19041.21 DTrace มาพร้อมกับการปรับปรุงต่อไปนี้
ดูตัวอย่าง ARM64
ใช่มันเป็นสิ่งที่ถูก! DTrace รองรับ ARM64 ในโหมดแสดงตัวอย่างแล้ว ARM64 MSI มีอยู่ในลิงค์ดาวน์โหลดที่แสดงด้านบน
คุณสามารถใช้บนของคุณ Surface Pro X รัน Windows 10 Insider Preview (20H1) รุ่นล่าสุด โดยเริ่มด้วย 19041.21.
โหมดผู้ใช้ Stackwalk
ในการแสดงตัวอย่าง สิ่งอำนวยความสะดวก stackwalk ใน DTrace จำกัดเฉพาะโหมดเคอร์เนล (สแต็ก) โปรแกรมปรับปรุงนี้เพิ่มการสนับสนุนสำหรับ usermode stackwalk สิ่งอำนวยความสะดวก (อุสแต็ค). เช่นเดียวกับสแต็ค สิ่งอำนวยความสะดวก ustack เข้ากันได้กับข้อกำหนดโอเพ่นซอร์ส DTrace อย่างสมบูรณ์ สามารถเรียกใช้ได้สามวิธีโดยระบุเฟรม (ความลึก) & ขนาด (ละเว้นสำหรับตอนนี้) หรือเป็นโมฆะ
- Ustack (nframes ขนาด)
- Ustack (nframes)
- Ustack()
ในขณะที่ ustack () สามารถกำหนดที่อยู่ของเฟรมการโทรเมื่อโพรบเริ่มทำงาน เฟรมสแต็กจะ ไม่ถูกแปลเป็นสัญลักษณ์จนกว่าการดำเนินการ ustack () จะได้รับการประมวลผลที่โหมดผู้ใช้โดย DTrace Consumer การดาวน์โหลดสัญลักษณ์อาจทำให้การส่งออกช้าลง ดังนั้นจึงควรใช้สิ่งอำนวยความสะดวกนี้ด้วยสัญลักษณ์แคชในเครื่องดังด้านล่าง
dtrace -n "profile-1ms /arg1/ {ustack (50, 0); ทางออก (0);} " -y C:\symbols. dtrace: คำอธิบาย 'profile-1ms' ตรงกับ 1 โพรบ CPU ID ฟังก์ชัน: NAME 0 3802 :profile-1ms ntdll`ZwAllocateVirtualMemory+0x14 ntdll`RtlAllocateHeap+0x3ded ntdll`RtlAllocateHeap+0x763 ucrtbase`malloc_base+0x44
รองรับการถ่ายโอนข้อมูลสด
Windows มักใช้สิ่งที่เรียกว่า การถ่ายโอนข้อมูลสด เพื่อช่วยวินิจฉัยปัญหาได้อย่างรวดเร็ว การถ่ายโอนข้อมูลแบบสดช่วยแก้ไขปัญหาที่เกี่ยวข้องกับหลายกระบวนการหรือปัญหาทั่วทั้งระบบโดยไม่มีการหยุดทำงาน ในครึ่งปีแรก DTrace บน Windows สามารถใช้เพื่อดักจับดัมพ์สดจากภายในสคริปต์ D โดยใช้ lkd() สิ่งอำนวยความสะดวก DTrace กรณีใช้งานทั่วไปของเครื่องมืออำนวยความสะดวกนี้คือเส้นทางข้อผิดพลาดของเครื่องมือ (เช่น รหัสส่งคืนบ่งชี้ความล้มเหลว) และดักข้อมูลสดที่จุดความล้มเหลวสำหรับการวินิจฉัยขั้นสูง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสนับสนุนไลฟ์ดัมพ์ โปรดดูที่ DTrace การถ่ายโอนข้อมูลสด.
dtrace -wn "syscallreturn { ถ้า (arg0 != 0xc0000001UL) { lkd (0); printf(\" ทริกเกอร์การถ่ายโอนข้อมูลสด \n \");ออก (0); }}" dtrace: คำอธิบาย 'syscallreturn' ตรงกับโพรบ 1411 ตัว dtrace: อนุญาตให้มีการกระทำที่ทำลายล้าง ฟังก์ชันรหัส CPU: NAME 0 181 NtDeviceIoControlFile: return Triggering Live dump dir c:\Windows\LiveKernelReports Volume ในไดรฟ์ C ไม่มีป้ายกำกับ Volume Serial Number คือ 70F4-B9F6 Directory ของ c:\Windows\LiveKernelReports 11/05/2019 05:20 PM<DIR>. 11/05/2019 05:20 น. <DIR>.. 11/05/2019 05:19 น. <DIR> ดีเทรซ 11/05/2019 05:20 น. 53,395,456 DTRACE-20191105-1720.dmp.
การติดตาม ETW
การติดตาม ETW เป็นเครื่องมือที่ใช้บ่อยที่สุดสำหรับการดีบักบน Windows ในการดูตัวอย่าง DTrace บน Windows 19H1 เราได้เพิ่มการรองรับสำหรับเครื่องมือติดตามเหตุการณ์และเหตุการณ์ที่ปรากฎโดยใช้ ผู้ให้บริการ ETW.
ในครึ่งปีแรก เราได้ปรับปรุงสิ่งอำนวยความสะดวกนี้เพิ่มเติมเพื่อสร้างกิจกรรม ETW ใหม่ได้ทันทีจากภายในสคริปต์ D โดยใช้ ETW_Trace() สิ่งอำนวยความสะดวก. ซึ่งช่วยในสถานการณ์ที่เหตุการณ์ ETW ที่มีอยู่ไม่เพียงพอ และคุณต้องการเพิ่มจุดติดตาม ETW เพิ่มเติมโดยไม่ต้องแก้ไขรหัสการผลิต
ข้อมูลเพิ่มเติมเกี่ยวกับ ETW_Trace สิ่งอำนวยความสะดวกและ ผู้ให้บริการ ETW ดู DTrace ETW.
/* เรียกใช้ตัวอย่างผู้ให้บริการ GitHub ETW (ลิงก์ด้านล่าง) เพื่อพิมพ์เหตุการณ์ข้อมูลหน่วยความจำของโหนด https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. */ dtrace -qs numamemstats.d ID พาร์ติชัน: 0 จำนวน: 1 หมายเลขโหนด: 1 m_nodeinfo { uint64_t TotalPageCount = 0x1fb558 uint64_t SmallFreePageCount = 0x41 uint64_t SmallZeroPageCount = 0 uint64_t MediumFreePageCount = 0 uint64_t MediumZeroPageCount = 0 uint64_t LargeFreePageCount = 0 uint64_t LargeZeroPageCount = 0 uint64_t HugeFreePageCount = 0 uint64_t HugeZeroPageCount = 0 }
สนใจติดตั้ง DTrace ดูวิธีทำ ที่นี่.
คุณสามารถดาวน์โหลดแพ็คเกจ DTrace MSI ที่อัปเดตได้ จากที่นี่.
นี่แหละ รหัสแหล่งที่มา และ สคริปต์ขั้นสูง.
แหล่งที่มา