คอมพิวเตอร์ Windows อินเทอร์เน็ต

การติดตั้งเครื่องมือดีบักสำหรับ Windows เครื่องมือแก้ไขจุดบกพร่องของ Windows: วินิจฉัยและแก้ไขเครื่องมือแก้จุดบกพร่อง BSOD สำหรับ windows use

วันที่ 22 มิถุนายน 2553

ก่อนหน้านี้ Windbg มีให้ดาวน์โหลดแยกต่างหาก แต่สำหรับเวอร์ชันล่าสุด Microsoft จะเก็บเวอร์ชันนี้ไว้เป็นส่วนหนึ่งของ Windows SDK กรุณาค้นหาลิงค์ดาวน์โหลดด้านล่าง

Windows 10

Windbg เวอร์ชันล่าสุดสำหรับ Windows 7 สามารถดาวน์โหลดได้จากลิงค์ https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

วินโดว 7

ดาวน์โหลดตัวติดตั้งจากลิงค์ด้านบน โปรดทราบว่านี่ไม่ได้ดาวน์โหลด SDK ทั้งหมด แต่เป็นเพียงตัวติดตั้ง เมื่อคุณเรียกใช้ไฟล์ คุณสามารถเลือกเครื่องมือที่คุณต้องการให้ดาวน์โหลด หากคุณสนใจเฉพาะ Windbg คุณสามารถยกเว้นทุกอย่างและเลือกเฉพาะ 'เครื่องมือดีบั๊ก' ใต้ 'ยูทิลิตี้ทั่วไป'

แพ็คเกจด้านบนติดตั้งรุ่น windbg 6.12 หากคุณต้องการติดตั้ง windbg อย่างรวดเร็ว คุณสามารถไปที่เวอร์ชันเก่า (6.11) ซึ่งสามารถดาวน์โหลดได้จาก
ลิงค์ที่ให้ไว้ท้ายโพสต์นี้

เมื่อคุณทำการติดตั้งแล้ว คุณจะพบโปรแกรมใน Start Menu -> All Programs -> Debugging Tools for Windows -> Windbg

ในช่วงเวลาที่เกิดความผิดพลาดร้ายแรง ระบบปฏิบัติการ Windows จะขัดจังหวะและแสดงหน้าจอสีน้ำเงินแห่งความตาย (BSOD) เนื้อหา หน่วยความจำเข้าถึงโดยสุ่มและข้อมูลทั้งหมดเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นจะถูกเขียนไปยังไฟล์เพจ ตอนต่อไป บูต Windowsดัมพ์ข้อขัดข้องพร้อมข้อมูลการดีบักจะถูกสร้างขึ้นตามข้อมูลที่บันทึกไว้ รายการข้อผิดพลาดที่สำคัญถูกสร้างขึ้นในบันทึกเหตุการณ์ของระบบ

ความสนใจ!ดัมพ์ความผิดพลาดจะไม่ถูกสร้างขึ้นหากระบบย่อยของดิสก์ล้มเหลวหรือ ข้อผิดพลาดที่สำคัญปรากฏขึ้นในช่วงเริ่มต้นของการบูต Windows

ประเภทของดัมพ์การแครชของ Windows

โดยใช้ตัวอย่างของระบบปฏิบัติการปัจจุบัน Windows 10 (Windows Server 2016) เราจะพิจารณาประเภทหลักของการถ่ายโอนข้อมูลหน่วยความจำที่ระบบสามารถสร้างได้:

  • การถ่ายโอนข้อมูลหน่วยความจำขนาดเล็ก(256 KB). ไฟล์ประเภทนี้มีข้อมูลจำนวนน้อยที่สุด ประกอบด้วยเฉพาะข้อความแสดงข้อผิดพลาด BSOD ข้อมูลเกี่ยวกับไดรเวอร์ กระบวนการที่ทำงานอยู่ในขณะที่เกิดการขัดข้อง และกระบวนการหรือเธรดเคอร์เนลใดที่ทำให้เกิดการขัดข้อง
  • การถ่ายโอนข้อมูลหน่วยความจำเคอร์เนล... โดยทั่วไปมีขนาดเล็ก - หนึ่งในสามของหน่วยความจำกายภาพ ดัมพ์หน่วยความจำเคอร์เนลนั้นละเอียดกว่ามินิดัมพ์ ประกอบด้วยข้อมูลเกี่ยวกับไดรเวอร์และโปรแกรมในโหมดเคอร์เนล รวมถึงหน่วยความจำที่จัดสรรให้กับเคอร์เนล Windows และเลเยอร์ที่เป็นนามธรรมของฮาร์ดแวร์ (HAL) และหน่วยความจำที่จัดสรรให้กับไดรเวอร์และโปรแกรมอื่นๆ ในโหมดเคอร์เนล
  • ดัมพ์หน่วยความจำที่สมบูรณ์... ปริมาณมากที่สุดและต้องใช้หน่วยความจำเท่ากับ RAM ของระบบของคุณบวก 1MB หน้าต่างที่จำเป็นเพื่อสร้างไฟล์นี้
  • การถ่ายโอนข้อมูลหน่วยความจำอัตโนมัติ... สอดคล้องกับดัมพ์หน่วยความจำเคอร์เนลในแง่ของข้อมูล มันแตกต่างกันเฉพาะในเนื้อที่ที่ใช้ในการสร้างไฟล์ดัมพ์ ไฟล์ประเภทนี้ไม่มีอยู่ใน Windows 7 มันถูกเพิ่มใน Windows 8
  • การถ่ายโอนข้อมูลหน่วยความจำที่ใช้งานอยู่... ประเภทนี้กรองรายการที่ไม่สามารถระบุสาเหตุของความล้มเหลวของระบบ สิ่งนี้ถูกเพิ่มเข้ามาใน Windows 10 และมีประโยชน์อย่างยิ่งหากคุณใช้เครื่องเสมือนหรือหากระบบของคุณเป็นโฮสต์ Hyper-V

ฉันจะเปิดใช้งานการถ่ายโอนข้อมูลหน่วยความจำบน Windows ได้อย่างไร

ใช้ Win + Pause เพื่อเปิดหน้าต่างการตั้งค่าระบบ เลือก " พารามิเตอร์ระบบเพิ่มเติม"(การตั้งค่าระบบขั้นสูง). ในแท็บ “ นอกจากนี้"(ขั้นสูง) ส่วน" "(การเริ่มต้นและการกู้คืน) คลิก" ตัวเลือก"(การตั้งค่า). ในหน้าต่างที่เปิดขึ้น ให้กำหนดค่าการดำเนินการในกรณีที่ระบบล้มเหลว ทำเครื่องหมายที่ช่อง " เขียนเหตุการณ์ลงในบันทึกของระบบ(เขียนเหตุการณ์ลงในบันทึกของระบบ) เลือกประเภทของการถ่ายโอนข้อมูลที่จะสร้างเมื่อระบบล่ม หากในช่องกาเครื่องหมาย “ แทนที่ไฟล์ดัมพ์ที่มีอยู่"(เขียนทับไฟล์ที่มีอยู่) ทำเครื่องหมายที่ช่อง จากนั้นไฟล์จะถูกเขียนทับในทุกความล้มเหลว เป็นการดีกว่าที่จะลบช่องทำเครื่องหมายนี้ออก แล้วคุณจะมีข้อมูลเพิ่มเติมสำหรับการวิเคราะห์ ปิดใช้งานการรีสตาร์ทระบบอัตโนมัติด้วย (รีสตาร์ทอัตโนมัติ)

ในกรณีส่วนใหญ่ ดัมพ์หน่วยความจำขนาดเล็กจะเพียงพอที่จะวิเคราะห์สาเหตุของ BSOD

ตอนนี้ เมื่อ BSOD เกิดขึ้น คุณสามารถวิเคราะห์ไฟล์ดัมพ์และค้นหาสาเหตุของการขัดข้องได้ มินิดัมพ์จะถูกบันทึกไว้ในโฟลเดอร์ % systemroot% \ minidump โดยค่าเริ่มต้น ในการวิเคราะห์ไฟล์ดัมพ์ ผมแนะนำให้ใช้โปรแกรม WinDBG(Microsoft Kernel Debugger).

การติดตั้ง WinDBG บน Windows

คุณประโยชน์ WinDBGรวมอยู่ใน " Windows 10 SDK"(Windows 10 SDK) ...

ไฟล์นี้มีชื่อว่า winsdksetup.exe, ขนาด 1.3 MB.

เรียกใช้การติดตั้งและเลือกสิ่งที่คุณต้องการทำ - ติดตั้งแพ็คเกจบนคอมพิวเตอร์เครื่องนี้หรือดาวน์โหลดเพื่อติดตั้งบนคอมพิวเตอร์เครื่องอื่น ติดตั้งแพ็คเกจลงในเครื่องคอมพิวเตอร์ของคุณ

คุณสามารถติดตั้งทั้งแพ็คเกจได้ แต่หากต้องการติดตั้งเฉพาะเครื่องมือดีบั๊ก ให้เลือก เครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows.

เมื่อติดตั้งแล้ว จะพบทางลัด WinDBG ในเมนูเริ่ม

การกำหนดค่าการเชื่อมโยงของไฟล์ .dmp กับ WinDBG

ในการเปิดไฟล์ดัมพ์ด้วยการคลิกง่ายๆ ให้จับคู่นามสกุล .dmp กับยูทิลิตี้ WinDBG

  1. เปิดออก บรรทัดคำสั่งในฐานะผู้ดูแลระบบและเรียกใช้คำสั่งสำหรับระบบ 64 บิต: cd C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x64
    windbg.exe –IA
    สำหรับระบบ 32 บิต:
    C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x86
    windbg.exe –IA
  2. ด้วยเหตุนี้ ประเภทไฟล์: .DMP, .HDMP, .MDMP, .KDMP, .WEW - จะเชื่อมโยงกับ WinDBG

การตั้งค่า Debug Symbol Server ใน WinDBG

สัญลักษณ์การดีบัก (สัญลักษณ์ดีบักหรือไฟล์สัญลักษณ์) คือบล็อกของข้อมูลที่สร้างขึ้นระหว่างการรวบรวมโปรแกรมพร้อมกับไฟล์ปฏิบัติการ บล็อคข้อมูลดังกล่าวมีข้อมูลเกี่ยวกับชื่อของตัวแปร ฟังก์ชันที่เรียกว่า ไลบรารี ฯลฯ ข้อมูลนี้ไม่จำเป็นเมื่อรันโปรแกรม แต่มีประโยชน์เมื่อทำการดีบั๊ก คอมโพเนนต์ของ Microsoft ถูกคอมไพล์ด้วยสัญลักษณ์ที่แจกจ่ายผ่าน Microsoft Symbol Server

กำหนดค่า WinDBG เป็น การใช้งาน Microsoftเซิร์ฟเวอร์สัญลักษณ์:

  • เปิด WinDBG;
  • ไปที่เมนู ไฟล์ –> เส้นทางไฟล์สัญลักษณ์;
  • เพิ่มบรรทัดที่มี URL สำหรับดาวน์โหลดสัญลักษณ์การดีบักจากเว็บไซต์ Microsoft และโฟลเดอร์สำหรับบันทึกแคช: SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols ในตัวอย่าง แคชถูกโหลด ในโฟลเดอร์ E: \ Sym_WinDBG คุณสามารถระบุใด ๆ
  • อย่าลืมบันทึกการเปลี่ยนแปลงของคุณในเมนู ไฟล์–>บันทึกพื้นที่ทำงาน;

WinDBG จะค้นหาสัญลักษณ์ในโฟลเดอร์ภายในเครื่อง และหากไม่พบสัญลักษณ์ที่จำเป็นในนั้น ระบบจะดาวน์โหลดสัญลักษณ์จากไซต์ที่ระบุโดยอัตโนมัติ หากคุณต้องการเพิ่มโฟลเดอร์ของคุณเองที่มีสัญลักษณ์ คุณสามารถทำได้ดังนี้:

SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols; c: \ Symbols

หากคุณไม่มีการเชื่อมต่ออินเทอร์เน็ต ให้ดาวน์โหลดชุดสัญลักษณ์จากทรัพยากร Windows Symbol Packages ก่อน

การวิเคราะห์การถ่ายโอนข้อมูลการแครชใน WinDBG

ดีบักเกอร์ WinDBG เปิดไฟล์ดัมพ์และดาวน์โหลดสัญลักษณ์การดีบักที่จำเป็นจากโฟลเดอร์ในเครื่องหรือจากอินเทอร์เน็ต ในระหว่างกระบวนการนี้ คุณไม่สามารถใช้ WinDBG ได้ ที่ด้านล่างของหน้าต่าง (ในบรรทัดคำสั่งดีบักเกอร์) จะมีข้อความจารึก ดีบักไม่ได้เชื่อมต่อ

คำสั่งจะถูกป้อนลงในบรรทัดคำสั่งที่อยู่ด้านล่างสุดของหน้าต่าง

สิ่งสำคัญที่สุดที่ต้องใส่ใจคือรหัสข้อผิดพลาดซึ่งระบุด้วยค่าเลขฐานสิบหกเสมอและมีลักษณะดังนี้ 0xXXXXXXX(ระบุไว้ในตัวเลือกใดตัวเลือกหนึ่ง - STOP:, 02.07.2019 0008F, 0x8F) ในตัวอย่างของเรา รหัสข้อผิดพลาดคือ 0x139

ดีบักเกอร์จะแจ้งให้คุณรันคำสั่ง! Analyze -v เพียงวางเมาส์เหนือลิงก์แล้วคลิก คำสั่งนี้มีไว้เพื่ออะไร?

  • มันทำการวิเคราะห์เบื้องต้นของการถ่ายโอนข้อมูลหน่วยความจำและให้ รายละเอียดข้อมูลเพื่อเริ่มการวิเคราะห์
  • คำสั่งนี้จะแสดงรหัส STOP และชื่อสัญลักษณ์ของข้อผิดพลาด
  • มันแสดง call stack ของคำสั่งที่ส่งผลให้มีการยกเลิกอย่างผิดปกติ
  • นอกจากนี้ ข้อผิดพลาดในที่อยู่ IP กระบวนการ และการลงทะเบียนจะแสดงที่นี่
  • ทีมงานสามารถให้คำแนะนำพร้อมแก้ไขปัญหาได้

ประเด็นหลักที่คุณควรใส่ใจเมื่อวิเคราะห์หลังจากรันคำสั่ง! Analyze –v (รายการไม่สมบูรณ์)

1: kd>! วิเคราะห์ -v


* *
* วิเคราะห์จุดบกพร่อง *
* *
*****************************************************************************
ชื่อสัญลักษณ์ของข้อผิดพลาด STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
คำอธิบายของข้อผิดพลาด (ส่วนประกอบเคอร์เนลทำให้โครงสร้างข้อมูลที่สำคัญเสียหาย ความเสียหายนี้อาจอนุญาตให้ผู้โจมตีเข้าควบคุมเครื่องนี้):

คอมโพเนนต์เคอร์เนลทำให้โครงสร้างข้อมูลที่สำคัญเสียหาย การทุจริตอาจทำให้ผู้ใช้ที่ประสงค์ร้ายเข้าควบคุมเครื่องนี้ได้
อาร์กิวเมนต์ข้อผิดพลาด:

อาร์กิวเมนต์:
Arg1: 0000000000000003, LIST_ENTRY เสียหาย (เช่น ลบสองครั้ง)
Arg2: ffffd0003a20d5d0, ที่อยู่ของเฟรมกับดักสำหรับข้อยกเว้นที่ทำให้เกิดการตรวจสอบจุดบกพร่อง
Arg3: ffffd0003a20d528 ที่อยู่ของบันทึกข้อยกเว้นสำหรับข้อยกเว้นที่ทำให้เกิดการตรวจสอบจุดบกพร่อง
Arg4: 0000000000000000, สงวนไว้
รายละเอียดการดีบัก:
------------------

ตัวนับแสดงจำนวนครั้งที่ระบบหยุดทำงานโดยมีข้อผิดพลาดที่คล้ายกัน:

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

รหัสข้อผิดพลาด STOP ในรูปแบบย่อ:

BUGCHECK_STR: 0x139

กระบวนการระหว่างการดำเนินการซึ่งเกิดความล้มเหลว (ไม่จำเป็นต้องเป็นสาเหตุของข้อผิดพลาด ในเวลาที่เกิดความล้มเหลวในหน่วยความจำกระบวนการนี้กำลังทำงานอยู่):

PROCESS_NAME: sqlservr.exe

การถอดรหัสรหัสข้อผิดพลาด: ระบบตรวจพบบัฟเฟอร์ล้นสแต็กในแอปพลิเคชันนี้ ซึ่งอาจอนุญาตให้ผู้โจมตีเข้าควบคุมแอปพลิเคชันนี้

ERROR_CODE: (NTSTATUS) 0xc0000409 - ระบบตรวจพบการโอเวอร์รันบัฟเฟอร์แบบสแต็กในแอปพลิเคชันนี้ การบุกรุกนี้อาจอนุญาตให้ผู้ใช้ที่เป็นอันตรายเข้าควบคุมแอปพลิเคชันนี้ได้
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - ระบบตรวจพบการโอเวอร์รันบัฟเฟอร์แบบสแต็กในแอปพลิเคชันนี้ การบุกรุกนี้อาจอนุญาตให้ผู้ใช้ที่ประสงค์ร้ายเข้าควบคุมแอปพลิเคชันนี้ได้

การโทรครั้งสุดท้ายบนสแต็ก:

LAST_CONTROL_TRANSFER: จาก fffff8040117d6a9 ถึง fffff8040116b0a0

Call stack ในขณะที่เกิดความล้มเหลว:

STACK_TEXT:
ffffd000`3a20d2a8 fffff804'0117d6a9: 00000000`00000139 00000000`00000003 ffffd000'3a20d5d0 ffffd000'3a20d528: nt! KeBugCheckEx
ffffd000`3a20d2b0 fffff804'0117da50: ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804'0116e2a2: nt! KiBugCheckDispatch + 0x69
ffffd000'3a20d3f0 fffff804'0117c150: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: nt! KiFastFailDispatch + 0xd0
ffffd000'3a20d5d0 fffff804'01199482: ffffc000'701ba270 ffffc000'00000001 000000ea'73f68040 fffff804'000006f9: nt! KiRaiseSecurityCheckFailure + 0x3d0
ffffd000`3a20d760 fffff804'014a455d: 00000000`00000001 ffffd000'3a20d941 ffffe000`fcacb000 ffffd000'3a20d951: nt! ?? :: FNODOBFM :: `สตริง" + 0x17252
ffffd000'3a20d8c0 fffff804'013a34ac: 00000000'00000004 00000000'00000000 ffffd000'3a20d9d8 ffffe001'0a34c600: nt! IopSynchronousServiceTail + 0x379
ffffd000'3a20d990 fffff804'0117d313: ffffffff'ffffffffe 00000000'00000000 00000000'00000000 000000eb'a0cf1380: nt! NtWriteFile + 0x694
ffffd000'3a20da90 00007ffb'475307da: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: nt! KiSystemServiceCopyEnd + 0x13
000000ee`f25ed2b8 00000000'00000000: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: 0x00007ffb'475307da

ส่วนของรหัสที่เกิดข้อผิดพลาด:

FOLLOWUP_IP:
nt! KiFastFailDispatch + d0
fffff804'0117da50 c644242000 mov ไบต์ ptr, 0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt! KiFastFailDispatch + d0
FOLLOWUP_NAME: เจ้าของเครื่องจักร

ชื่อของโมดูลในตารางวัตถุเคอร์เนล หากตัววิเคราะห์ตรวจพบไดรเวอร์ที่มีปัญหา ชื่อจะแสดงในช่อง MODULE_NAME และ IMAGE_NAME:

MODULE_NAME: ไม่
IMAGE_NAME: ntkrnlmp.exe

1: kd> lmvm nt
เรียกดูรายการโมดูลทั้งหมด
ไฟล์ภาพสัญลักษณ์ที่โหลด: ntkrnlmp.exe
ไฟล์อิมเมจหน่วยความจำที่แมป: C: \ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
เส้นทางของรูปภาพ: ntkrnlmp.exe
ชื่อภาพ: ntkrnlmp.exe
InternalName: ntkrnlmp.exe
ชื่อไฟล์เดิม: ntkrnlmp.exe
รุ่นผลิตภัณฑ์: 6.3.9600.18946
เวอร์ชันไฟล์: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

ในตัวอย่างข้างต้น การวิเคราะห์ชี้ไปที่ไฟล์เคอร์เนล ntkrnlmp.exe เมื่อการวิเคราะห์การถ่ายโอนข้อมูลหน่วยความจำชี้ไปที่ไดรเวอร์ระบบ (เช่น win32k.sys) หรือไฟล์เคอร์เนล (เช่น ntkrnlmp.exe ในตัวอย่างของเรา) เป็นไปได้มากที่สุด ไฟล์นี้ไม่ใช่สาเหตุของปัญหา บ่อยครั้งที่ปรากฎว่าปัญหาอยู่ในไดรเวอร์อุปกรณ์ การตั้งค่าไบออสหรือฮาร์ดแวร์ทำงานผิดปกติ

หากคุณเห็นว่า BSOD เกิดจากไดรเวอร์ของบริษัทอื่น ชื่อนั้นจะถูกระบุในค่า MODULE_NAME และ IMAGE_NAME

ตัวอย่างเช่น:

เส้นทางของรูปภาพ: \ SystemRoot \ system32 \ drivers \ cmudaxp.sys
ชื่อภาพ: cmudaxp.sys

เปิดไฟล์ไดรเวอร์ของคุณและตรวจสอบเวอร์ชัน ในกรณีส่วนใหญ่ ปัญหาของไดรเวอร์จะแก้ไขได้ด้วยการอัปเดต

เครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows- การดีบักเครื่องมือรหัสปฏิบัติการ ระบบ Windows... เป็นชุดซอฟต์แวร์ฟรีจาก Microsoft ที่ออกแบบมาเพื่อดีบักโหมดผู้ใช้และโค้ดโหมดเคอร์เนล: แอปพลิเคชัน ไดรเวอร์ บริการ โมดูลเคอร์เนล ชุดเครื่องมือประกอบด้วยตัวดีบักคอนโซลและ GUI ยูทิลิตี้สำหรับการทำงานกับสัญลักษณ์ ไฟล์ กระบวนการ และยูทิลิตี้สำหรับการจัดเตรียมการดีบักระยะไกล ชุดเครื่องมือประกอบด้วยยูทิลิตี้ที่คุณสามารถค้นหาสาเหตุของความล้มเหลวในส่วนประกอบต่างๆ ของระบบ เครื่องมือแก้ไขจุดบกพร่องสำหรับ Windowsในช่วงเวลาหนึ่ง จะไม่มีให้ดาวน์โหลดในรูปแบบของชุดการแจกจ่ายแบบสแตนด์อโลนและรวมอยู่ใน Windows SDK (Windows Software Development Kit) ชุดเครื่องมือ เครื่องมือ Windowsในทางกลับกัน SDK มีให้ใช้งานโดยเป็นส่วนหนึ่งของโปรแกรมการสมัคร MSDN หรือสามารถดาวน์โหลดได้อย่างอิสระในรูปแบบการแจกจ่ายแบบสแตนด์อโลนจาก msdn.microsoft.com ตามที่นักพัฒนาล่าสุดและมากที่สุด เวอร์ชั่นปัจจุบันเครื่องมือดีบักสำหรับ Windows มีอยู่ใน Windows SDK

เครื่องมือแก้ไขข้อบกพร่องสำหรับ Windows ได้รับการอัปเดตและเผยแพร่ต่อสาธารณะค่อนข้างบ่อย และกระบวนการนี้ไม่ได้ขึ้นอยู่กับการเปิดตัวระบบปฏิบัติการแต่อย่างใด ดังนั้นให้ตรวจสอบเวอร์ชันใหม่เป็นระยะ

ตอนนี้เรามาดูกันว่าเครื่องมือดีบักสำหรับ .โดยเฉพาะคืออะไร Microsoft Windows:

  • ดีบักแอปพลิเคชันท้องถิ่น บริการ (บริการ) ไดรเวอร์และเคอร์เนล
  • ดีบักแอปพลิเคชันระยะไกล บริการ (บริการ) ไดรเวอร์ และเคอร์เนลบนเครือข่าย
  • ดีบักแอปพลิเคชันที่ทำงานอยู่แบบเรียลไทม์
  • วิเคราะห์ไฟล์ดัมพ์ของหน่วยความจำแอปพลิเคชัน เคอร์เนล และระบบโดยรวม
  • ทำงานกับระบบที่ใช้สถาปัตยกรรม x86 / x64 / Itanium
  • ดีบักโปรแกรมโหมดผู้ใช้และโหมดเคอร์เนล

Debugging Tools สำหรับ Windows รุ่นต่อไปนี้มีให้ใช้งาน: 32-bit x86, Intel Itanium, 64-bit x64 เราต้องการสองตัว: x86 หรือ x64

มีหลายวิธีในการติดตั้ง Debugging Tools สำหรับ Windows ในบทความนี้เราจะพิจารณาเฉพาะวิธีหลักเท่านั้น:

  • การติดตั้งผ่านเว็บตัวติดตั้ง
  • การติดตั้งเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows จาก ISO อิมเมจของ Windowsเอสดีเค.
  • การติดตั้งเครื่องมือดีบักสำหรับ Windows โดยตรงจากแพ็คเกจ dbg_amd64.msi /dbg_x86.msi

ยังคงไม่ชัดเจน ณ จุดใด เหตุใดฉันจึงควรติดตั้งชุดเครื่องมือการดีบักบนคอมพิวเตอร์ของฉัน บ่อยครั้ง คุณต้องเผชิญกับสถานการณ์ที่แทรกแซงใน สภาพแวดล้อมในการทำงานไม่พึงปรารถนาอย่างยิ่ง! นอกจากนี้ การติดตั้งผลิตภัณฑ์ใหม่ ซึ่งก็คือการเปลี่ยนแปลงไฟล์รีจิสตรี / ระบบ อาจไม่เป็นที่ยอมรับโดยสิ้นเชิง ตัวอย่างคือเซิร์ฟเวอร์ภารกิจสำคัญ เหตุใดนักพัฒนาจึงไม่คิดเกี่ยวกับตัวเลือกที่มีแอพพลิเคชั่นเวอร์ชันพกพา (พกพา) ที่ไม่ต้องติดตั้ง
ขั้นตอนการติดตั้งสำหรับแพ็คเกจเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows ได้รับการเปลี่ยนแปลงบางอย่างจากเวอร์ชันหนึ่งไปอีกเวอร์ชันหนึ่ง มาดูขั้นตอนการติดตั้งกันเลยดีกว่า และดูวิธีการติดตั้งชุดเครื่องมือกัน

การติดตั้งเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows โดยใช้ตัวติดตั้งเว็บ

ไปที่หน้า Windows SDK Archive และค้นหาส่วนภายใต้ ชื่อวินโดว์ 10 และต่ำกว่า โปรดดู "Windows 10 SDK (10586) และ Microsoft Windows 10 Mobile Device Emulator (เวอร์ชัน 10586.11)"

เราคลิกที่รายการ ติดตั้ง SDK... หลังจากคลิกแล้ว ให้ดาวน์โหลดและเรียกใช้ไฟล์ sdksetup.exe ซึ่งจะเริ่มการติดตั้ง Windows SDK แบบออนไลน์ ในระยะเริ่มต้น โปรแกรมติดตั้งจะตรวจสอบว่ามีการติดตั้งแพ็คเกจ .NET Framework ในระบบหรือไม่ รุ่นล่าสุด(ปัจจุบัน 4.5) หากแพ็คเกจขาดหายไป จะมีการเสนอการติดตั้งและสถานีจะรีบูตเมื่อเสร็จสิ้น ทันทีหลังจากการรีบูต ในขั้นตอนของการอนุญาตผู้ใช้ กระบวนการติดตั้งจะเริ่มโดยตรงจาก Windows SDK

บ่อยครั้งเมื่อเลือกส่วนประกอบทั้งหมดของแพ็คเกจโดยไม่มีข้อยกเว้น ข้อผิดพลาดอาจเกิดขึ้นระหว่างกระบวนการติดตั้ง ในกรณีนี้ ขอแนะนำให้ติดตั้งส่วนประกอบแบบเลือกสรร ชุดขั้นต่ำที่ต้องการ

หลังจากการติดตั้ง Debugging Tools สำหรับ Windows เสร็จสมบูรณ์ ตำแหน่งของไฟล์ debug สำหรับวิธีการติดตั้งนี้จะเป็นดังนี้:

  • รุ่น 64 บิต: C: \ Program Files (x86) \ Windows Kits \ x.x \ Debuggers \ x64
  • รุ่น 32 บิต: C: \ Program Files (x86) \ Windows Kits \ x.x \ Debuggers \ x86

* โดยที่ x.x เป็นเวอร์ชันเฉพาะของชุดพัฒนา
เราสังเกตเห็นว่าเวอร์ชัน 8 ขึ้นไป เส้นทางการติดตั้งแตกต่างจากเวอร์ชันคลาสสิกสำหรับทุกคนอย่างเห็นได้ชัด เวอร์ชันก่อนหน้าเครื่องมือดีบัก?

ข้อดีอย่างมาก วิธีนี้การติดตั้ง Debigging Tools สำหรับ Windows คือการติดตั้งเวอร์ชันของเครื่องมือดีบั๊กสำหรับสถาปัตยกรรมทั้งหมดในคราวเดียว

การติดตั้งเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows จากอิมเมจ ISO SDK ของ Windows

วิธีนี้เกี่ยวข้องกับการติดตั้งเครื่องมือดีบักสำหรับ Windows โดยใช้อิมเมจการติดตั้งที่สมบูรณ์ของ Windows SDK (Software Developers Kit) จนกว่าจะถึงเวลาหนึ่ง ดาวน์โหลด อิมเมจ ISOสำหรับระบบที่เกี่ยวข้องอาจอยู่ในหน้า Windows SDK Archive อย่างไรก็ตาม ในขณะนี้ คุณสามารถรับอิมเมจ ISO ของ SDK ได้โดยเรียกใช้ตัวติดตั้งเว็บ sdksetup.exe และเลือกรายการ ดาวน์โหลด Windows Software Development Kitในหน้าต่างเริ่มต้นของตัวติดตั้ง:

ตามที่พบ วิธีการติดตั้งก่อนหน้านี้โดยใช้โปรแกรมติดตั้งเว็บนั้นค่อนข้างไม่แน่นอนและมักจะล้มเหลว ในระบบสะอาด ติดตั้งโดยไม่มีปัญหา อย่างไรก็ตาม ในระบบโหลดเพียงพอ ปัญหามากมายเกิดขึ้น หากคุณมีกรณีเช่นนี้ให้ใช้วิธีนี้

ดังนั้นในหน้าจำเป็นต้องเลือกชุดการแจกจ่ายที่จำเป็นสำหรับฉัน (และฉันคิดว่าสำหรับหลาย ๆ คน) ในขณะนี้คือ "Windows SDK สำหรับ Windows 7 และ. NET Framework 4" และคลิกที่ลิงค์ด้านล่าง "รับ อิมเมจ ISO ของแผ่น DVD" ...

เมื่อทำงานกับไซต์ msdn.microsoft.com ฉันแนะนำให้คุณใช้เบราว์เซอร์ Internet Explorerเนื่องจากเคยมีกรณีที่ผลิตภัณฑ์ของคู่แข่งใช้งานไม่ได้!

ดังนั้นจึงจำเป็นต้องเลือกเมื่อจำเป็นเท่านั้น โดยปกติความบิตของ Debugging Tools สำหรับ Windows จะเหมือนกับ bitness ของระบบ ระบบของฉันที่อยู่ระหว่างการตรวจสอบส่วนใหญ่เป็น 64 บิต ดังนั้นในกรณีส่วนใหญ่ ฉันจะดาวน์โหลดอิมเมจสำหรับระบบ 64 บิต GRMSDKX_EN_DVD.iso
จากนั้น หลังจากดาวน์โหลดอิมเมจ เราจำเป็นต้องทำงานกับอิมเมจ ISO ที่มีอยู่ วิธีดั้งเดิมคือการเบิร์นซีดี แต่วิธีนี้ค่อนข้างยาวและมีราคาแพงในบางครั้ง ฉันแนะนำให้ใช้ยูทิลิตี้ฟรีเพื่อสร้างอุปกรณ์ดิสก์เสมือนในระบบ โดยส่วนตัวแล้ว ฉันชอบที่จะใช้โปรแกรม DEAMON Tools Lite เพื่อจุดประสงค์นี้ บางคนอาจมีความชอบอื่น ๆ ยูทิลิตี้โดยตรงหรือน้ำหนักเบามากขึ้นรสชาติและสีอย่างที่พวกเขาพูด .. หลังจากการติดตั้ง เครื่องมือภูต Lite ฉันเพียงแค่ดับเบิลคลิกที่ไฟล์รูปภาพ GRMSDKX_EN_DVD.iso และซีดีเสมือนใหม่จะปรากฏบนระบบ:

แล้ว ดับเบิลคลิกฉันเปิดใช้งานการทำงานอัตโนมัติและเริ่มการติดตั้ง Windows SDK:

เมื่อถึงเวลาเลือกส่วนประกอบที่จะติดตั้งจากรายการ เราจะปิดการใช้งานตัวเลือกทั้งหมดยกเว้นตัวเลือกที่ทำเครื่องหมายไว้ในภาพหน้าจอ ซึ่งจะช่วยหลีกเลี่ยงข้อผิดพลาดที่ไม่จำเป็นสำหรับเราในตอนนี้


ทุกอย่างเป็นเช่นนั้น ในภาพหน้าจอมีสองตัวเลือก: "Windows Performance Toolkit" และ "Debugging Tools for Windows" เลือกทั้งสองอย่าง เพราะ Windows Performance Toolkit จะมีประโยชน์สำหรับงานของคุณอย่างแน่นอน! นอกจากนี้ หลังจากคลิกปุ่ม "ถัดไป" การติดตั้งจะดำเนินต่อไปตามปกติ และในตอนท้ายคุณจะเห็นข้อความว่า "การติดตั้งเสร็จสมบูรณ์"
เมื่อสิ้นสุดการติดตั้ง ไดเร็กทอรีการทำงานของชุดเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows จะเป็นดังนี้:

  • สำหรับรุ่น x86:
  • สำหรับรุ่น x64:

การติดตั้ง Debugging Tools สำหรับ Windows เสร็จสมบูรณ์

การติดตั้งเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows ผ่านไฟล์ .msi

ในกรณีที่เกิดปัญหาระหว่างการติดตั้ง Debugging Tools สำหรับ Windows ในสองวิธีก่อนหน้านี้ เรายังมีอีกวิธีหนึ่งที่น่าเชื่อถือที่สุดและผ่านการทดสอบตามเวลา ซึ่งช่วยได้มากกว่าหนึ่งครั้ง กาลครั้งหนึ่ง ก่อนการรวมเข้ากับ Windows SDK เครื่องมือดีบักสำหรับ Windows มีให้ใช้งานเป็นโปรแกรมติดตั้ง .msi แยกต่างหาก ซึ่งยังสามารถพบได้ในขณะนี้ แต่อยู่ในส่วนลึกของชุดการแจกจ่าย Windows SDK แล้ว เนื่องจากเรามีอิมเมจ ISO ของ Windows SDK อยู่ในมือแล้ว เราจึงไม่สามารถเมาต์อิมเมจดังกล่าวลงในระบบได้ แต่เพียงเปิดมันโดยใช้ตัวเก็บถาวร WinRAR ที่รู้จักกันดี หรือผลิตภัณฑ์อื่นๆ ที่ทำงานกับเนื้อหาของดิสก์ ISO

หลังจากเปิดรูปภาพ เราต้องไปที่ไดเร็กทอรี "ตั้งค่า" ที่อยู่ในรูทแล้วเลือกหนึ่งในไดเร็กทอรี:

  • ในการติดตั้งเวอร์ชัน 64 บิต: \ Setup \ WinSDKDebuggingTools_amd64และแตกไฟล์ dbg_amd64.msi จากไดเร็กทอรีนี้
  • ในการติดตั้งเวอร์ชัน 32 บิต: \ Setup \ WinSDKDebuggingTools และแตกไฟล์ dbg_x86.msi จากไดเร็กทอรีนี้

เมื่อสิ้นสุดการติดตั้ง ไดเร็กทอรีการทำงานของชุดเครื่องมือแก้ไขจุดบกพร่องสำหรับ Windows จะเป็นดังนี้:

  • สำหรับรุ่น x86: C: \ Program Files (x86) \ Debugging Tools สำหรับ Windows (x86)
  • สำหรับรุ่น x64: C: \ Program Files \ Debugging Tools สำหรับ Windows (x64)

ณ จุดนี้ การติดตั้ง Debugging Tools สำหรับ Windows เสร็จสมบูรณ์

ข้อมูลเพิ่มเติม

ฉันไม่รู้ว่ามันเชื่อมต่อกับอะไร บางทีอาจเป็นเพราะความประมาทของฉัน แต่หลังจากติดตั้งเครื่องมือดีบั๊กสำหรับ Windows โปรแกรมติดตั้งจะไม่ลงทะเบียนพาธไปยังไดเร็กทอรีด้วยดีบักเกอร์ในตัวแปรระบบพาธ สิ่งนี้กำหนดข้อจำกัดบางประการในการรันงานการดีบักต่างๆ โดยตรงจากคอนโซล ดังนั้นในกรณีที่ไม่มีเส้นทางฉันจึงเขียนในหน้าต่าง ตัวแปรสภาพแวดล้อมเส้นทางไปยังเครื่องมือแก้ไขข้อบกพร่อง:

  • C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x86
  • C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x64

* ในกรณีของคุณ เส้นทางอาจแตกต่างกันเนื่องจากการใช้ OS ที่แตกต่างกัน และเนื่องจากการใช้ SDK ของเวอร์ชันอื่น

ยูทิลิตี้แพ็คเกจเครื่องมือแก้ไขข้อบกพร่องสำหรับ Windows สามารถทำงานเป็นแอปพลิเคชั่นแบบพกพาได้ คุณเพียงแค่ต้องคัดลอกไดเรกทอรีจากระบบปฏิบัติการ ชุดเครื่องมือประสิทธิภาพของ Microsoft Windowsและใช้เป็นเวอร์ชันพกพาบนเซิร์ฟเวอร์ที่ใช้งานจริง แต่อย่าลืมคำนึงถึงความจุของระบบด้วย !! แม้ว่าคุณจะติดตั้งแพ็คเกจบนระบบที่สำคัญโดยสมบูรณ์แล้ว คุณสามารถเริ่มทำงานได้ทันทีหลังการติดตั้ง โดยไม่จำเป็นต้องรีบูต

เครื่องมือดีบักสำหรับองค์ประกอบของ Windows

และสุดท้ายนี้ เราขอนำเสนอองค์ประกอบของ Debugging Tools สำหรับ Windows:

ไฟล์ การนัดหมาย
adplus.doc เอกสารประกอบสำหรับยูทิลิตี้ ADPlus
adplus.exe แอปพลิเคชันคอนโซลที่ทำให้ดีบักเกอร์ cdb เป็นอัตโนมัติเพื่อสร้างดัมพ์ ล็อกไฟล์สำหรับกระบวนการตั้งแต่หนึ่งกระบวนการขึ้นไป
agestore.exe ยูทิลิตีสำหรับการลบไฟล์ที่ล้าสมัยออกจากที่เก็บที่ใช้โดยเซิร์ฟเวอร์สัญลักษณ์หรือเซิร์ฟเวอร์ต้นทาง
breakin.exe ยูทิลิตีที่ให้คุณส่งชุดค่าผสมที่ผู้ใช้กำหนดไปยังกระบวนการ คล้ายกับการกด CTRL + C
cdb.exe ดีบักเกอร์คอนโซลโหมดผู้ใช้
convertstore.exe ยูทิลิตี้สำหรับการแปลงสัญลักษณ์จาก 2 ระดับเป็น 3 ระดับ
dbengprx.exe Reaper (พร็อกซีเซิร์ฟเวอร์) สำหรับการดีบักระยะไกล
dbgrpc.exe ยูทิลิตี้สำหรับแสดงข้อมูลเกี่ยวกับสถานะของการโทร RPC
dbgsrv.exe กระบวนการของเซิร์ฟเวอร์ที่ใช้สำหรับการดีบักระยะไกล
dbh.exe ยูทิลิตี้สำหรับแสดงข้อมูลเกี่ยวกับเนื้อหาของไฟล์สัญลักษณ์
dumpchk.exe ยูทิลิตี้ตรวจสอบการถ่ายโอนข้อมูล ยูทิลิตี้สำหรับตรวจสอบไฟล์ดัมพ์อย่างรวดเร็ว
dumpexam.exe ยูทิลิตี้สำหรับวิเคราะห์การถ่ายโอนข้อมูลหน่วยความจำ ผลลัพธ์จะแสดงใน% SystemRoot% \ MEMORY.TXT
gflags.exe ตัวแก้ไขแฟล็กส่วนกลางของระบบ ยูทิลิตีนี้จัดการรีจิสตรีคีย์และการตั้งค่าอื่นๆ
i386kd.exe กระดาษห่อสำหรับ kd. เมื่อใดที่เรียกว่า kd สำหรับระบบที่ใช้ Windows NT / 2000 สำหรับเครื่อง x86 อาจทิ้งไว้ด้วยเหตุผลด้านความเข้ากันได้
ia64kd.exe กระดาษห่อสำหรับ kd. เมื่อใดที่เรียกว่า kd สำหรับระบบที่ใช้ Windows NT / 2000 สำหรับเครื่อง ia64 อาจทิ้งไว้ด้วยเหตุผลด้านความเข้ากันได้
kd.exe ดีบักเกอร์คอนโซลโหมดเคอร์เนล
kdbgctrl.exe เครื่องมือจัดการดีบักเคอร์เนล ยูทิลิตี้สำหรับจัดการและกำหนดค่าการเชื่อมต่อการดีบักเคอร์เนล
kdsrv.exe เซิร์ฟเวอร์การเชื่อมต่อสำหรับ KD ยูทิลิตี้เป็นแอปพลิเคชั่นขนาดเล็กที่เริ่มต้นและรอ การเชื่อมต่อระยะไกล... kd ทำงานบนไคลเอนต์และเชื่อมต่อกับเซิร์ฟเวอร์นั้นสำหรับการดีบักระยะไกล ทั้งเซิร์ฟเวอร์และไคลเอ็นต์ต้องมาจากแอสเซมบลีเครื่องมือตรวจแก้จุดบกพร่องเดียวกัน
kill.exe ยูทิลิตี้สำหรับการยุติกระบวนการ
list.exe ยูทิลิตี้สำหรับแสดงเนื้อหาของไฟล์บนหน้าจอ ยูทิลิตี้ขนาดเล็กนี้มาพร้อมกับจุดประสงค์เดียว - การดูข้อความขนาดใหญ่หรือไฟล์บันทึก ใช้พื้นที่หน่วยความจำเพียงเล็กน้อยเมื่อโหลดข้อความเป็นชิ้นๆ
logger.exe ดีบักเกอร์ขนาดเล็กที่สามารถทำงานกับกระบวนการเดียวเท่านั้น ยูทิลิตีจะฉีด logexts.dll ลงในพื้นที่กระบวนการ ซึ่งบันทึกการเรียกใช้ฟังก์ชันทั้งหมดและการดำเนินการอื่น ๆ ของโปรแกรมภายใต้การตรวจสอบ
logviewer.exe ยูทิลิตี้สำหรับการดูบันทึกที่เขียนโดยดีบักเกอร์ logger.exe
ntsd.exe ดีบักเกอร์สัญลักษณ์ Microsoft NT (NTSD) Debugger เหมือนกับ cdb ยกเว้นว่าจะสร้างกล่องข้อความเมื่อเริ่มต้น เช่นเดียวกับ cdb ntsd สามารถดีบักทั้งแอปพลิเคชันคอนโซลและแอปพลิเคชันกราฟิก
pdbcopy.exe ยูทิลิตี้สำหรับการลบสัญลักษณ์ส่วนตัวออกจากไฟล์สัญลักษณ์ ควบคุมสัญลักษณ์สาธารณะที่รวมอยู่ในไฟล์สัญลักษณ์
remote.exe ยูทิลิตี้สำหรับการดีบักระยะไกลและการควบคุมระยะไกลของดีบักเกอร์คอนโซล KD, CDB และ NTSD ช่วยให้คุณสามารถเรียกใช้ดีบักเกอร์คอนโซลเหล่านี้ได้จากระยะไกล
rtlist.exe โปรแกรมดูงานระยะไกล ยูทิลิตีนี้ใช้เพื่อแสดงรายการกระบวนการที่ทำงานอยู่ผ่านกระบวนการเซิร์ฟเวอร์ DbgSrv
symchk.exe ยูทิลิตี้เพื่อดาวน์โหลดสัญลักษณ์จากเซิร์ฟเวอร์สัญลักษณ์ของ Microsoft และสร้างแคชสัญลักษณ์ในเครื่อง
symstore.exe ยูทิลิตี้สำหรับสร้างเครือข่ายหรือการจัดเก็บสัญลักษณ์ในเครื่อง (2-tier / 3-tier) ที่เก็บสัญลักษณ์เป็นไดเร็กทอรีพิเศษบนดิสก์ที่สร้างขึ้นตามโครงสร้างบางอย่างและมีสัญลักษณ์ ในไดเร็กทอรีรากของสัญลักษณ์ โครงสร้างของโฟลเดอร์ย่อยจะถูกสร้างขึ้นด้วยชื่อที่เหมือนกับชื่อของส่วนประกอบ ในทางกลับกัน แต่ละโฟลเดอร์ย่อยเหล่านี้มีโฟลเดอร์ย่อยที่ซ้อนกันซึ่งมีชื่อพิเศษที่ได้รับจากการแฮชไฟล์ไบนารี ยูทิลิตี symstore จะสแกนโฟลเดอร์คอมโพเนนต์และเพิ่มส่วนประกอบใหม่ไปยังที่เก็บสัญลักษณ์ซึ่งไคลเอ็นต์สามารถเรียกค้นข้อมูลได้ มีการกล่าวถึง Symstore เพื่อรับสัญลักษณ์จากที่เก็บข้อมูลระดับ 0 และวางไว้ในที่เก็บข้อมูล 2 ระดับ / 3 ระดับ
tlist.exe โปรแกรมดูงาน ยูทิลิตี้สำหรับการแสดงรายการกระบวนการทำงานทั้งหมด
umdh.exe ยูทิลิตีฮีปดัมพ์โหมดผู้ใช้ ยูทิลิตี้สำหรับวิเคราะห์ฮีป (ฮีป) ของกระบวนการที่เลือก ให้คุณแสดงตัวเลือกต่างๆ สำหรับฮีป
usbview.exe โปรแกรมดู USB ยูทิลิตี้สำหรับการดูอุปกรณ์ USB ที่เชื่อมต่อกับคอมพิวเตอร์
vmdemux.exe ดีมัลติเพล็กเซอร์ เครื่องเสมือน... สร้างไพพ์ที่มีชื่อหลายรายการสำหรับการเชื่อมต่อ COM เดียว ช่องสัญญาณใช้เพื่อดีบักส่วนประกอบต่างๆ ของเครื่องเสมือน
windbg.exe โหมดผู้ใช้ GUI และดีบักเกอร์โหมดเคอร์เนล

แนะนำ WinDBG - ตอนที่ 1

Alexander Antipov

WinDBG เป็นโปรแกรมแก้ไขข้อบกพร่องที่ยอดเยี่ยม อาจไม่มีอินเทอร์เฟซที่ใช้งานง่ายและไม่มีพื้นหลังสีดำตามค่าเริ่มต้น แต่เป็นหนึ่งในโปรแกรมแก้ไขข้อบกพร่องที่ทรงพลังและเสถียรที่สุดใน Windows ในขณะนี้ ในบทความนี้ ผมจะแนะนำคุณเกี่ยวกับพื้นฐานของ WinDBG เพื่อให้คุณเริ่มต้นใช้งานได้


WinDBG เป็นโปรแกรมแก้ไขข้อบกพร่องที่ยอดเยี่ยม อาจไม่มีอินเทอร์เฟซที่ใช้งานง่ายและไม่มีพื้นหลังสีดำตามค่าเริ่มต้น แต่เป็นหนึ่งในโปรแกรมแก้ไขข้อบกพร่องที่ทรงพลังและเสถียรที่สุดใน Windows ในขณะนี้ ในบทความนี้ ผมจะแนะนำคุณเกี่ยวกับพื้นฐานของ WinDBG เพื่อให้คุณเริ่มต้นใช้งานได้

นี่เป็นบทความแรกในซีรีส์เกี่ยวกับ WinDBG รายชื่อบทความทั้งหมดที่รวมอยู่ในรอบนี้:

  • ส่วนที่ 1 - การติดตั้ง, อินเตอร์เฟส, สัญลักษณ์, การดีบักระยะไกล / โลคัล, ระบบช่วยเหลือ, โมดูล, การลงทะเบียน
  • ส่วนที่ 2 - เบรกพอยต์
  • ส่วนที่ 3 - การตรวจสอบหน่วยความจำ การดีบักโปรแกรมทีละขั้นตอน คำแนะนำและเคล็ดลับ

ในบทความนี้ เราจะครอบคลุมถึงการติดตั้งและการเชื่อมต่อกับกระบวนการ และในต่อไปนี้ เราจะครอบคลุมจุดสั่งหยุด การดีบักทีละขั้นตอน และการตรวจสอบหน่วยความจำ

การติดตั้ง WinDBG

เมื่อเทียบกับ Windows 7 กระบวนการติดตั้งสำหรับ WinDBG ใน Windows 8 มีการเปลี่ยนแปลงเล็กน้อย ในส่วนนี้ เราจะแนะนำคุณตลอดการติดตั้งดีบักเกอร์สำหรับระบบปฏิบัติการทั้งสอง

การติดตั้ง WinDBG บน Windows 8

ใน Windows 8 WinDBG จะรวมอยู่ใน Windows Driver Kit (WDK) คุณสามารถติดตั้ง Visual Studio และ WDK หรือติดตั้งแพ็คเกจเครื่องมือดีบักสำหรับ Windows 8.1 ซึ่งรวมถึง WinDBG แยกต่างหาก

โปรแกรมติดตั้งจะถามว่าคุณต้องการติดตั้ง WinDBG ในเครื่องหรือดาวน์โหลดแพ็คเกจนักพัฒนาทั้งหมดสำหรับคอมพิวเตอร์เครื่องอื่น อย่างหลังนั้นเทียบเท่ากับตัวติดตั้งออฟไลน์ ซึ่งดีมากหากคุณต้องการติดตั้งแพ็คเกจบนระบบอื่นในอนาคต

รูปที่ 1: การเลือกประเภทการติดตั้ง

ในหน้าต่างถัดไป คุณต้องยกเลิกการเลือกรายการทั้งหมด ยกเว้น "เครื่องมือแก้ไขข้อบกพร่องสำหรับ Windows" และคลิกที่ปุ่ม "ดาวน์โหลด"

ทันทีที่ตัวติดตั้งทำงานเสร็จ ให้ไปที่ไดเร็กทอรีที่ดาวน์โหลดแพ็คเกจ (โดยค่าเริ่มต้นคือ c: \ Users \ ชื่อผู้ใช้ \ ดาวน์โหลด \ Windows Kits \ 8.1 \ StandaloneSDK) และทำตามขั้นตอนการติดตั้ง

การติดตั้ง WinDBG บน Windows 7 และรุ่นก่อนหน้า

สำหรับ Windows 7 และรุ่นก่อนหน้านั้น WinDBG จะรวมอยู่ในแพ็คเกจเครื่องมือดีบักสำหรับ Windows ซึ่งรวมอยู่ใน Windows SDK และ .Net Framework คุณจะต้องดาวน์โหลดตัวติดตั้ง จากนั้นเลือก "Debugging Tools for Windows" ระหว่างขั้นตอนการติดตั้ง

ระหว่างการติดตั้ง ฉันเลือกตัวเลือก Debugging Tools ในส่วน Redistributable Packages เพื่อสร้างตัวติดตั้งแบบสแตนด์อโลนเพื่ออำนวยความสะดวกในการติดตั้งในภายหลัง

รูปที่ 2: การเลือกตัวเลือกการติดตั้งเพื่อสร้างตัวติดตั้งแบบสแตนด์อโลน

เมื่อการติดตั้งเสร็จสิ้น คุณควรมีตัวติดตั้ง WinDBG สำหรับแพลตฟอร์มต่างๆ (ในไดเร็กทอรี c: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools สำหรับ Windows \)

รูปที่ 3: โฟลเดอร์ที่มีโปรแกรมติดตั้ง WinDBG สำหรับแพลตฟอร์มต่างๆ

อินเทอร์เฟซ WinDBG

รูปที่ 4: ลักษณะที่ปรากฏของ WinDBG

ทันทีที่เห็นครั้งแรก รูปร่าง WinDGB คุณจะพบว่าดีบักเกอร์นั้นเรียบง่ายอย่างน่ากลัว คุณสมบัติส่วนใหญ่ของ WinDBG นั้นเรียนรู้ในขณะที่ทำการดีบักกระบวนการ แทนที่จะเสียเวลาอธิบายอินเทอร์เฟซ ในส่วนต่อไปนี้ เราจะครอบคลุมเฉพาะประเด็นที่สำคัญที่สุดเท่านั้น

สิ่งพื้นฐานที่สุดที่คุณต้องรู้เกี่ยวกับอินเทอร์เฟซดีบักเกอร์คือหน้าต่างคำสั่ง ซึ่งมีสองส่วน พื้นที่แรก: หน้าต่างที่แสดงผลลัพธ์ของการดำเนินการคำสั่ง พื้นที่ที่สอง: ช่องข้อความขนาดเล็กสำหรับป้อนคำสั่ง

รูปที่ 5: หน้าต่างคำสั่ง WinDBG

สัญลักษณ์

ในกรณีส่วนใหญ่ WinDBG ไม่ต้องการการตั้งค่าพิเศษใดๆ และทำงานได้อย่างถูกต้องเมื่อนำออกจากกล่อง แต่สิ่งสำคัญอย่างหนึ่งที่ต้องปรับแต่งคือสัญลักษณ์ สัญลักษณ์คือไฟล์ที่สร้างขึ้นด้วยไฟล์เรียกทำงานในระหว่างการคอมไพล์โปรแกรมและมีข้อมูลการดีบัก (ฟังก์ชันและชื่อตัวแปร) ข้อมูลการดีบักช่วยให้คุณสำรวจการทำงานของแอปพลิเคชันของคุณในขณะที่ทำการดีบักหรือถอดแยกชิ้นส่วน คอมโพเนนต์ของ Microsoft จำนวนมากถูกคอมไพล์ด้วยสัญลักษณ์ที่แจกจ่ายผ่าน Microsoft Symbol Server สำหรับไฟล์ปฏิบัติการที่เหลือ ทุกอย่างไม่ได้เป็นสีดอกกุหลาบ - ไฟล์ที่มีข้อมูลการดีบักมักมาพร้อมกับแอปพลิเคชันน้อยมาก ในกรณีส่วนใหญ่ บริษัทจำกัดการเข้าถึงข้อมูลดังกล่าว

ในการกำหนดค่า WinDBG ให้ใช้ Microsoft Symbol Server ให้ไปที่ File: Symbol File Path และตั้งค่า SRV * C: \ Symbols * http: //msdl.microsoft.com/download/symbols แน่นอนว่าการใช้ดอกจันเป็นตัวคั่นก็ค่อนข้างแปลก หลังจากที่คุณตั้งค่า Microsoft Symbol Server สัญลักษณ์จะถูกดาวน์โหลดไปยังโฟลเดอร์ C: \ Symbols

รูปที่ 6: การกำหนดค่าเซิร์ฟเวอร์สัญลักษณ์ของ Microsoft

WinDBG จะโหลดสัญลักษณ์สำหรับไบนารีโดยอัตโนมัติเมื่อจำเป็น คุณยังสามารถเพิ่มโฟลเดอร์สัญลักษณ์ของคุณเองได้ดังนี้:

SRV * C: \ Symbols * http: //msdl.microsoft.com/download/symbols; c: \ SomeOtherSymbolFolder

การเพิ่มสัญลักษณ์ขณะดีบัก

หากคุณต้องการนำเข้าสัญลักษณ์ขณะแก้ไขจุดบกพร่อง คุณสามารถทำได้ด้วย .sympath (หน้าต่างคำสั่งจะปรากฏขึ้นเมื่อคุณขอเข้าสู่กระบวนการ) ตัวอย่างเช่น ในการเพิ่มโฟลเดอร์ c: \ SomeOtherSymbolFolder ให้ป้อนคำสั่งต่อไปนี้:

0: 025> .sympath + c: \ SomeOtherSymbolFolder
เส้นทางการค้นหาสัญลักษณ์คือ: SRV * C: \ Symbols * http: //msdl.microsoft.com/download/symbols; c: \ SomeOtherSymbolFolder
เส้นทางการค้นหาสัญลักษณ์แบบขยายคือ: srv * c: \ symbols * http: //msdl.microsoft.com/download/symbols; c: \ someothersymbolfolder

มันจะไม่ฟุ่มเฟือยที่จะโหลดสัญลักษณ์ใหม่หลังจากเพิ่มหรือเปลี่ยนเส้นทาง:

0: 025> .reload
กำลังโหลดโมดูลปัจจุบัน
................................................................
...............................................

กำลังตรวจสอบสัญลักษณ์ที่โหลด

หากต้องการดูว่าโมดูลใดมีสัญลักษณ์โหลด คุณสามารถใช้คำสั่ง x *! แม้ว่า WinDBG จะโหลดเฉพาะสัญลักษณ์เท่าที่จำเป็น แต่ตัว x *! จะแสดงสัญลักษณ์ที่สามารถโหลดได้ คุณสามารถบังคับให้โหลดสัญลักษณ์ด้วยคำสั่ง ld * (อาจใช้เวลาสักครู่ และคุณสามารถหยุดกระบวนการนี้ได้โดยไปที่ Debug: Break)

ตอนนี้เราเห็นสัญลักษณ์ของแต่ละโมดูลแล้ว

รูปที่ 8: รายการสัญลักษณ์

การดีบักกระบวนการภายในเครื่อง

เมื่อทำการดีบักกระบวนการโลคัล คุณมีสองพาธ:

  1. ขอเกี่ยวกับกระบวนการที่กำลังทำงานอยู่แล้ว
  2. เริ่มกระบวนการผ่าน WinDBG

แต่ละวิธีมีข้อดีและข้อเสียของตัวเอง ตัวอย่างเช่น หากคุณเรียกใช้โปรแกรมผ่าน WinDBG แสดงว่าคุณมีตัวเลือกการดีบักพิเศษ (เช่น การดีบักฮีป) ที่สามารถหยุดแอปพลิเคชันได้ ในทางกลับกัน ยังมีโปรแกรมที่หยุดทำงานเมื่อคุณขอโปรแกรมแก้ไขข้อบกพร่อง แอปพลิเคชั่นบางตัว (โดยเฉพาะมัลแวร์) จะตรวจสอบการมีอยู่ของดีบักเกอร์ในระบบระหว่างการเริ่มต้นระบบ และในกรณีนี้ คุณควรยึดติดกับกระบวนการที่กำลังทำงานอยู่แล้ว บางครั้ง คุณดีบักบริการที่ทำงานภายใต้ระบบปฏิบัติการ Windows ซึ่งตั้งค่าพารามิเตอร์บางอย่างในระหว่างการเริ่มต้น ดังนั้นเพื่อให้กระบวนการดีบักง่ายขึ้น ขอแนะนำให้เชื่อมต่อกับกระบวนการที่ทำงานอยู่ แทนที่จะเริ่มบริการผ่านตัวดีบั๊ก บางคนโต้แย้งว่าการเรียกใช้กระบวนการผ่านโปรแกรมดีบั๊กมีผลกระทบต่อประสิทธิภาพการทำงานอย่างร้ายแรง กล่าวโดยสรุป ให้ลองทั้งสองอย่างแล้วเลือกสิ่งที่ดีที่สุดสำหรับคุณ หากคุณชอบวิธีการใดวิธีการหนึ่ง แบ่งปันความคิดของคุณในความคิดเห็น!

เริ่มกระบวนการ

หากคุณกำลังดีบักแอปพลิเคชันแบบสแตนด์อโลนที่ทำงานอยู่ในเครื่องและไม่ใช่ระบบเครือข่าย คุณอาจต้องการเรียกใช้ผ่าน WinDBG อย่างไรก็ตาม นี่ไม่ได้หมายความว่าคุณไม่สามารถเชื่อมต่อกับกระบวนการที่กำลังทำงานอยู่แล้วได้ เลือกวิธีที่สะดวกที่สุดสำหรับคุณ

เริ่มต้นกระบวนการได้ไม่ยาก ไปที่ "ไฟล์: เปิดปฏิบัติการ" และเลือกไฟล์ปฏิบัติการที่คุณต้องการแก้ไขข้อบกพร่อง คุณยังสามารถระบุอาร์กิวเมนต์หรือตั้งค่าไดเร็กทอรีเริ่มต้น:

รูปที่ 9: การเลือกไฟล์ปฏิบัติการสำหรับการดีบัก

กระบวนการเชื่อมต่อ

การเชื่อมต่อกับกระบวนการที่กำลังทำงานอยู่นั้นก็ไม่ใช่เรื่องยากเช่นกัน อย่างไรก็ตาม โปรดทราบว่าในบางกรณีอาจใช้เวลาสักครู่เพื่อค้นหากระบวนการที่คุณต้องการแก้ไขข้อบกพร่อง ตัวอย่างเช่น เบราว์เซอร์บางตัวสร้างกระบวนการหลักหนึ่งกระบวนการ และจากนั้นหลายกระบวนการสำหรับแต่ละแท็บ ดังนั้น ขึ้นอยู่กับดัมพ์การแครชที่คุณกำลังดีบัก คุณอาจต้องการขอไม่เกี่ยวข้องกับกระบวนการหลัก แต่กับกระบวนการที่เกี่ยวข้องกับแท็บ

หากต้องการเชื่อมต่อกับกระบวนการที่กำลังทำงานอยู่แล้ว ให้ไปที่ "ไฟล์: แนบกับกระบวนการ" จากนั้นเลือก PID หรือชื่อของกระบวนการ จำไว้ว่าคุณต้องมีสิทธิ์ที่เหมาะสมจึงจะสามารถดำเนินการได้

รูปที่ 10: การเลือกกระบวนการที่จะเชื่อมต่อ

หากหลังจากเชื่อมต่อ แอปพลิเคชันได้ระงับการทำงาน คุณสามารถใช้โหมด "Noninvaise" โดยทำเครื่องหมายที่ช่องทำเครื่องหมายที่เกี่ยวข้อง

การดีบักกระบวนการระยะไกล

บางครั้งคุณอาจต้องดีบักกระบวนการบนระบบระยะไกล การทำเช่นนี้กับดีบักเกอร์ในเครื่องจะสะดวกกว่ามาก แทนที่จะใช้เครื่องเสมือนหรือ RDP หรือบางทีคุณกำลังดีบักกระบวนการ LoginUI.exe ซึ่งใช้ได้เฉพาะเมื่อระบบถูกล็อค ในสถานการณ์เช่นนี้ คุณสามารถใช้ WinDBG เวอร์ชันโลคัลและเชื่อมต่อกับกระบวนการจากระยะไกลได้ มีสองวิธีที่พบบ่อยที่สุดในการทำงานเหล่านี้ให้สำเร็จ

เซสชันการแก้ไขข้อบกพร่องที่มีอยู่

หากคุณได้เริ่มต้นการดีบักโปรแกรมของคุณในเครื่องแล้ว (โดยการเชื่อมต่อหรือเริ่มกระบวนการผ่าน WinDBG) คุณสามารถป้อนคำสั่งเฉพาะและ WinDBG จะเปิดฟังซึ่งตัวดีบั๊กระยะไกลสามารถเชื่อมต่อได้ เมื่อต้องการทำสิ่งนี้ ให้ใช้คำสั่ง .server:

เซิร์ฟเวอร์ tcp: พอร์ต = 5005

หลังจากรันคำสั่งข้างต้นแล้ว คุณอาจเห็นคำเตือนดังนี้:

รูปที่ 11: ข้อความเตือนที่อาจปรากฏขึ้นหลังจากรันคำสั่งเพื่อสร้าง "ผู้ฟัง"

จากนั้น WinDBG จะรายงานว่าเซิร์ฟเวอร์กำลังทำงาน:

0: 005> .server tcp: พอร์ต = 5005
0: -remote tcp: พอร์ต = 5005, เซิร์ฟเวอร์ = USER-PC

ตอนนี้คุณสามารถเชื่อมต่อจากโฮสต์ระยะไกลไปยังเซสชันการดีบักที่มีอยู่ได้โดยไปที่ "ไฟล์: เชื่อมต่อกับเซสชันระยะไกล" และป้อนสิ่งนี้ในช่องข้อความ: tcp: พอร์ต = 5005, เซิร์ฟเวอร์ = 192.168.127.138

รูปที่ 12: การเชื่อมต่อระยะไกลกับเซสชันการดีบัก

เมื่อเชื่อมต่อแล้ว คุณจะได้รับการยืนยันจากไคลเอนต์ระยะไกล:


เซิร์ฟเวอร์เริ่มทำงาน ลูกค้าสามารถเชื่อมต่อกับบรรทัดคำสั่งเหล่านี้ได้
0: -remote tcp: พอร์ต = 5005, เซิร์ฟเวอร์ = USER-PC
MACHINENAME \ ผู้ใช้ (tcp 192.168.127.138:13334) เชื่อมต่อเมื่อวันจันทร์ที่ 16 ธันวาคม 09:03:03 2013

และข้อความถึง เวอร์ชันท้องถิ่นดีบักเกอร์:

MACHINENAME \ ผู้ใช้ (tcp 192.168.127.138:13334) เชื่อมต่อเมื่อวันจันทร์ที่ 16 ธันวาคม 09:03:03 2013

การสร้างเซิร์ฟเวอร์ระยะไกล

คุณยังสามารถสร้างเซิร์ฟเวอร์แยกต่างหากด้วย WinDBG เชื่อมต่อจากระยะไกล และเลือกกระบวนการที่จะดีบัก ซึ่งสามารถทำได้โดยใช้ไฟล์ dbgsrv.exe ที่คุณวางแผนที่จะดีบักกระบวนการ ในการเริ่มเซิร์ฟเวอร์ดังกล่าว ให้รันคำสั่งต่อไปนี้:

dbgsrv.exe -t tcp: พอร์ต = 5005

รูปที่ 13: การเริ่มรีโมตเซิร์ฟเวอร์

อีกครั้ง คุณอาจได้รับคำเตือนด้านความปลอดภัยว่าคุณควรยอมรับ:

รูปที่ 14: ข้อความความปลอดภัยที่อาจปรากฏขึ้นระหว่างการเริ่มต้นเซิร์ฟเวอร์ดีบั๊ก

คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ดีบักได้หากคุณไปที่ไฟล์ "ไฟล์: เชื่อมต่อกับ Remote Stub" และป้อนบรรทัดต่อไปนี้ในฟิลด์ข้อความ: tcp: พอร์ต = 5005, เซิร์ฟเวอร์ = 192.168.127.138

รูปที่ 15: การเชื่อมต่อกับเซิร์ฟเวอร์ดีบัก

หลังจากเชื่อมต่อ คุณจะไม่ได้รับสัญญาณใด ๆ ที่คุณเชื่อมต่อ แต่ถ้าคุณไปที่ "ไฟล์: แนบกับกระบวนการ" คุณจะเห็นรายการกระบวนการเซิร์ฟเวอร์ดีบัก (ที่ dbgsrv.exe กำลังทำงานอยู่) ตอนนี้คุณสามารถเชื่อมต่อกับกระบวนการราวกับว่าคุณกำลังทำในเครื่อง

ระบบช่วยเหลือ

ระบบช่วยเหลือใน WinDBG นั้นยอดเยี่ยม นอกเหนือจากการเรียนรู้สิ่งใหม่ คุณควรจะได้รับข้อมูลพื้นฐานเกี่ยวกับคำสั่ง ใช้คำสั่ง .hh เพื่อเข้าถึงวิธีใช้ WinDBG:

คุณยังสามารถรับข้อมูลความช่วยเหลือสำหรับคำสั่งเฉพาะได้อีกด้วย ตัวอย่างเช่น หากต้องการความช่วยเหลือเกี่ยวกับคำสั่ง .reload ให้ใช้คำสั่งต่อไปนี้:

windbg> .hh .reload

หรือเพียงแค่ไปที่ส่วนช่วยเหลือ: สารบัญ

โมดูล

ในขณะที่โปรแกรมกำลังทำงานอยู่ โมดูลต่างๆ จะถูกนำเข้าซึ่งมีฟังก์ชันการทำงานของแอปพลิเคชัน ดังนั้น หากคุณทราบว่าแอปพลิเคชันนำเข้าโมดูลใด คุณจะเข้าใจวิธีการทำงานได้ดีขึ้น ในหลายกรณี คุณจะทำการดีบักโมดูลเฉพาะที่โหลดโดยโปรแกรม ไม่ใช่ตัวเรียกทำงานเอง

หลังจากเชื่อมต่อกับกระบวนการ WinDBG จะแสดงโมดูลที่โหลดโดยอัตโนมัติ ตัวอย่างเช่น โมดูลด้านล่างจะแสดงขึ้นหลังจากที่ฉันเชื่อมต่อกับ calc.exe:

Microsoft (R) Windows Debugger เวอร์ชัน 6.12.0002.633 X86
ลิขสิทธิ์ (c) Microsoft Corporation สงวนลิขสิทธิ์.

*** รอด้วยไฟล์แนบที่รอดำเนินการ
เส้นทางการค้นหาสัญลักษณ์คือ: SRV * C: \ Symbols * http: //msdl.microsoft.com/download/symbols
เส้นทางการค้นหาที่ดำเนินการได้คือ:
ModLoad: 00a70000 00b30000 C: \ Windows \ system32 \ calc.exe
ModLoad: 77630000 7776c000 C: \ Windows \ SYSTEM32 \ ntdll.dll
ModLoad: 77550000 77624000 C: \ Windows \ system32 \ kernel32.dll
ModLoad: 75920000 7596a000 C: \ Windows \ system32 \ KERNELBASE.dll
ModLoad: 76410000 77059000 C: \ Windows \ system32 \ SHELL32.dll
ModLoad: 77240000 772ec000 C: \ Windows \ system32 \ msvcrt.dll
ModLoad: 76300000 76357000 C: \ Windows \ system32 \ SHLWAPI.dll
ModLoad: 75cd0000 75d1e000 C: \ Windows \ system32 \ GDI32.dll
ModLoad: 75fa0000 76069000 C: \ Windows \ system32 \ USER32.dll
ModLoad: 777b0000 777ba000 C: \ Windows \ system32 \ LPK.dll
ModLoad: 774b0000 7754d000 C: \ Windows \ system32 \ USP10.dll
ModLoad: 73110000 732a0000 C: \ Windows \ WinSxS \ x86_microsoft.windows.gdiplus_
6595b64144ccf1df_1.1.7600.16385_none_72fc7cbf861225ca \ gdiplus.dll
ModLoad: 75a80000 75bdc000 C: \ Windows \ system32 \ ole32.dll
ModLoad: 76360000 76401000 C: \ Windows \ system32 \ RPCRT4.dll
ModLoad: 777c0000 77860000 C: \ Windows \ system32 \ ADVAPI32.dll
ModLoad: 75be0000 75bf9000 C: \ Windows \ SYSTEM32 \ sechost.dll
ModLoad: 76270000 762ff000 C: \ Windows \ system32 \ OLEAUT32.dll
ModLoad: 74590000 745d0000 C: \ Windows \ system32 \ UxTheme.dll
ModLoad: 74710000 748ae000 C: \ Windows \ WinSxS \ x86_microsoft.windows.common-
ModLoad: 703d0000 70402000 C: \ Windows \ system32 \ WINMM.dll
ModLoad: 74c80000 74c89000 C: \ Windows \ system32 \ VERSION.dll
ModLoad: 77770000 7778f000 C: \ Windows \ system32 \ IMM32.DLL
ModLoad: 75c00000 75ccc000 C: \ Windows \ system32 \ MSCTF.dll
ModLoad: 74130000 7422b000 C: \ Windows \ system32 \ WindowsCodecs.dll
ModLoad: 74260000 74273000 C: \ Windows \ system32 \ dwmapi.dll
ModLoad: 756d0000 756dc000 C: \ Windows \ system32 \ CRYPTBASE.dll
ModLoad: 75e60000 75ee3000 C: \ Windows \ system32 \ CLBCatQ.DLL
ModLoad: 6ef10000 6ef4c000 C: \ Windows \ system32 \ oleacc.dll

ภายหลังในกระบวนการดีบัก คุณสามารถแสดงรายการนี้อีกครั้งด้วยคำสั่ง lmf:

0: 005> lmf
เริ่มต้นชื่อโมดูลสิ้นสุด
00a70000 00b30000 calc C: \ Windows \ system32 \ calc.exe
6ef10000 6ef4c000 oleacc C: \ Windows \ system32 \ oleacc.dll
703d0000 70402000 WINMM C: \ Windows \ system32 \ WINMM.dll
73110000 732a0000 gdiplus C: \ Windows \ WinSxS \ x86_microsoft.windows.gdiplus_6595b64144ccf1df_
1.1.7600.16385_none_72fc7cbf861225ca \ gdiplus.dll
74130000 7422b000 WindowsCodecs C: \ Windows \ system32 \ WindowsCodecs.dll
74260000 74273000 dwmapi C: \ Windows \ system32 \ dwmapi.dll
74590000 745d0000 UxTheme C: \ Windows \ system32 \ UxTheme.dll
74710000 748ae000 COMCTL32 C: \ Windows \ WinSxS \ x86_microsoft.windows.common-
controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc \ COMCTL32.dll
74c80000 74c89000 เวอร์ชัน C: \ Windows \ system32 \ VERSION.dll
756d0000 756dc000 CRYPTBASE C: \ Windows \ system32 \ CRYPTBASE.dll
75920000 7596a000 KERNELBASE C: \ Windows \ system32 \ KERNELBASE.dll
75a80000 75bdc000 ole32 C: \ Windows \ system32 \ ole32.dll
75be0000 75bf9000 sechost C: \ Windows \ SYSTEM32 \ sechost.dll
75c00000 75ccc000 MSCTF C: \ Windows \ system32 \ MSCTF.dll
75cd0000 75d1e000 GDI32 C: \ Windows \ system32 \ GDI32.dll
75e60000 75ee3000 CLBCatQ C: \ Windows \ system32 \ CLBCatQ.DLL
75fa0000 76069000 USER32 C: \ Windows \ system32 \ USER32.dll
76270000 762ff000 OLEAUT32 C: \ Windows \ system32 \ OLEAUT32.dll
76300000 76357000 SHLWAPI C: \ Windows \ system32 \ SHLWAPI.dll
76360000 76401000 RPCRT4 C: \ Windows \ system32 \ RPCRT4.dll
76410000 77059000 SHELL32 C: \ Windows \ system32 \ SHELL32.dll
77240000 772ec000 msvcrt C: \ Windows \ system32 \ msvcrt.dll
774b0000 7754d000 USP10 C: \ Windows \ system32 \ USP10.dll
77550000 77624000 kernel32 C: \ Windows \ system32 \ kernel32.dll
77630000 7776c000 ntdll C: \ Windows \ SYSTEM32 \ ntdll.dll
77770000 7778f000 IMM32 C: \ Windows \ system32 \ IMM32.DLL
777b0000 777ba000 LPK C: \ Windows \ system32 \ LPK.dll
777c0000 77860000 ADVAPI32 C: \ Windows \ system32 \ ADVAPI32.dll

คุณยังสามารถค้นหาที่อยู่ดาวน์โหลดสำหรับโมดูลเฉพาะโดยใช้คำสั่ง "lmf m":

0: 005> lmf m kernel32
เริ่มต้นชื่อโมดูลสิ้นสุด
77550000 77624000 kernel32 C: \ Windows \ system32 \ kernel32.dll

คุณยังสามารถรับข้อมูลเกี่ยวกับส่วนหัวของรูปภาพของโมดูลเฉพาะโดยใช้! Dh ( เครื่องหมายอัศเจรีย์ระบุส่วนขยาย):

0: 005>! Dh kernel32

ประเภทไฟล์: DLL
ค่าหัวไฟล์
เครื่อง 14C (i386)
4 จำนวนส่วน
4A5BDAAD ประทับวันที่ จันทร์ ก.ค. 13 21:09:01 2009

0 ตัวชี้ไฟล์ไปยังตารางสัญลักษณ์
0 จำนวนสัญลักษณ์
ขนาด E0 ของส่วนหัวเสริม
2102 ลักษณะ
ปฏิบัติการได้
เครื่องคำ 32 บิต
DLL

ค่าส่วนหัวเสริม
มายากล 10B #
9.00 ตัวเชื่อมโยงเวอร์ชัน
ขนาดรหัส C4600
ขนาด C800 ของข้อมูลที่เริ่มต้น
ขนาด 0 ของข้อมูลที่ยังไม่ได้กำหนดค่า
ที่อยู่ 510C5 ของจุดเริ่มต้น
รหัส 1,000 ฐาน
----- ใหม่ -----
77550000 ฐานภาพ
การจัดตำแหน่ง 1,000 ส่วน
200 การจัดตำแหน่งไฟล์
3 ระบบย่อย (Windows CUI)
เวอร์ชันระบบปฏิบัติการ 6.01
เวอร์ชันรูปภาพ 6.01
เวอร์ชันระบบย่อย 6.01
ขนาดภาพ D4000
ขนาดส่วนหัว 800
D5597 เช็คซัม
00040000 ขนาดของกองสำรอง
00001000 ขนาดของสแต็กคอมมิชชัน
00100000 ขนาดของกองสำรอง
00001000 ขนาดของการคอมมิตฮีป
ลักษณะ 140 DLL
ฐานแบบไดนามิก
รองรับ NX
B4DA8 [A915] ที่อยู่ของไดเรกทอรีส่งออก
ที่อยู่ BF6C0 [1F4] ของไดเรกทอรีนำเข้า
C7000 [520] ที่อยู่ของไดเรกทอรีทรัพยากร
0 [0] ที่อยู่ของ Exception Directory
0 [0] ที่อยู่ของ Security Directory
C8000 [B098] ที่อยู่ของ Base Relocation Directory
C5460 [38] ที่อยู่ของ Debug Directory
0 [0] ที่อยู่ของ Description Directory
0 [0] ที่อยู่ของไดเรกทอรีพิเศษ
0 [0] ที่อยู่ของ Thread Storage Directory
ที่อยู่ 816B8 [40] ของ Load Configuration Directory
278 [408] ที่อยู่ของ Bound Import Directory
ที่อยู่ 1000 [DE8] ของไดเรกทอรีตารางที่อยู่นำเข้า
0 [0] ที่อยู่ของ Delay Import Directory
0 [0] ที่อยู่ของ COR20 Header Directory
0 [0] ที่อยู่ของ Reserved Directory

ส่วนหัว # 1
.ข้อความชื่อ
ขนาดเสมือน C44C1
1,000 ที่อยู่เสมือน
ขนาด C4600 ของข้อมูลดิบ
800 ตัวชี้ไฟล์ไปยังข้อมูลดิบ

0 จำนวนการย้ายที่ตั้ง
0 จำนวนบรรทัด
600000020 ธง
รหัส
(ไม่ได้ระบุการจัดตำแหน่ง)
ดำเนินการอ่าน

ไดเรกทอรีแก้ไขข้อบกพร่อง (2)
พิมพ์ ขนาด ที่อยู่ ตัวชี้
cv 25 c549c c4c9c รูปแบบ: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

ส่วนหัว # 2
.data ชื่อ
ขนาดเสมือน FEC
ที่อยู่เสมือน C6000
ขนาด E00 ของข้อมูลดิบ
ตัวชี้ไฟล์ C4E00 ไปยังข้อมูลดิบ
0 ตัวชี้ไฟล์ไปยังตารางการย้ายตำแหน่ง
0 ตัวชี้ไฟล์ไปยังหมายเลขบรรทัด
0 จำนวนการย้ายที่ตั้ง
0 จำนวนบรรทัด
C0000040 ธง
ข้อมูลเบื้องต้น
(ไม่ได้ระบุการจัดตำแหน่ง)
อ่านเขียน

ส่วนหัว # 3
.rsrc ชื่อ
520 ขนาดเสมือน
ที่อยู่เสมือน C7000
ข้อมูลดิบขนาด 600
ตัวชี้ไฟล์ C5C00 ไปยังข้อมูลดิบ
0 ตัวชี้ไฟล์ไปยังตารางการย้ายตำแหน่ง
0 ตัวชี้ไฟล์ไปยังหมายเลขบรรทัด
0 จำนวนการย้ายที่ตั้ง
0 จำนวนบรรทัด
400000040 ธง
ข้อมูลเบื้องต้น
(ไม่ได้ระบุการจัดตำแหน่ง)
อ่านเท่านั้น

ส่วนหัว # 4
.reloc ชื่อ
B098 ขนาดเสมือน
ที่อยู่เสมือน C8000
ขนาดข้อมูลดิบ B200
ตัวชี้ไฟล์ C6200 ไปยังข้อมูลดิบ
0 ตัวชี้ไฟล์ไปยังตารางการย้ายตำแหน่ง
0 ตัวชี้ไฟล์ไปยังหมายเลขบรรทัด
0 จำนวนการย้ายที่ตั้ง
0 จำนวนบรรทัด
42000040 ธง
ข้อมูลเบื้องต้น
ทิ้งได้
(ไม่ได้ระบุการจัดตำแหน่ง)
อ่านเท่านั้น

ข้อความและข้อยกเว้น

หลังจากเชื่อมต่อกับกระบวนการ รายการของโมดูลจะปรากฏขึ้นก่อน จากนั้นข้อความอื่นๆ อาจปรากฏขึ้น ตัวอย่างเช่น เมื่อเรายึดติดกับ calc.exe WinDBG จะตั้งค่าเบรกพอยต์โดยอัตโนมัติ (ซึ่งเป็นเพียงเครื่องหมายที่ใช้เพื่อหยุดแอปพลิเคชัน) ข้อมูลจุดพักจะปรากฏขึ้น:

(da8.b44): ข้อยกเว้นคำสั่งหยุด - รหัส 80000003 (โอกาสแรก)

ข้อความนี้เป็นข้อยกเว้น กล่าวคือ ข้อยกเว้นในโอกาสแรก โดยพื้นฐานแล้ว ข้อยกเว้นคือเงื่อนไขพิเศษที่เกิดขึ้นระหว่างการทำงานของโปรแกรม ข้อยกเว้นในโอกาสแรกหมายความว่าโปรแกรมหยุดทำงานทันทีหลังจากส่งข้อยกเว้นออกไป ข้อยกเว้นในโอกาสที่สองหมายความว่าหลังจากเกิดข้อยกเว้นขึ้น การดำเนินการบางอย่างจะถูกดำเนินการ จากนั้นโปรแกรมจะหยุดทำงาน

ทะเบียน

หลังจากแสดงข้อความและข้อยกเว้น ดีบักเกอร์จะพิมพ์สถานะของการลงทะเบียนโปรเซสเซอร์ รีจิสเตอร์เป็นตัวแปรพิเศษภายในโปรเซสเซอร์ที่เก็บข้อมูลชิ้นเล็กๆ หรือติดตามสถานะของบางสิ่งในหน่วยความจำ โปรเซสเซอร์สามารถประมวลผลข้อมูลในรีจิสเตอร์เหล่านี้ได้อย่างรวดเร็ว เร็วกว่าการรับข้อมูลบนบัสจาก RAM ทุกครั้ง

หลังจากเชื่อมต่อกับ calc.exe แล้ว WinDBG จะแสดงข้อมูลเกี่ยวกับการลงทะเบียนต่อไปนี้โดยอัตโนมัติ:

eax = 7ffd9000 ebx = 00000000 ecx = 00000000 edx = 776cd23d esi = 00000000 edi = 00000000
cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00000246

หลังจากนั้น คุณสามารถทำซ้ำข้อมูลนี้อีกครั้งโดยใช้คำสั่ง r:

0: 005> r
eax = 7ffd9000 ebx = 00000000 ecx = 00000000 edx = 776cd23d esi = 00000000 edi = 00000000
eip = 77663540 esp = 02affd9c ebp = 02affdc8 iopl = 0 nv ขึ้น ei pl zr na pe nc
cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00000246
ntdll!
77663540 cc int 3

หากเราต้องการรับค่าของการลงทะเบียนเฉพาะ เราสามารถรันคำสั่งต่อไปนี้:

0: 005> ตกลง
eax = 7ffd9000

สามารถรับข้อมูลจากทะเบียนหลายรายการพร้อมกันได้ดังนี้

0: 005> r eax, ebp
eax = 7ffd9000 ebp = 02affdc8

ตัวชี้เพื่อการเรียนการสอน

คำสั่งสุดท้ายมีไว้สำหรับคำสั่งปฏิบัติการ ข้อมูลนี้จะแสดงบนหน้าจอเช่นกัน เช่นเดียวกับคำสั่ง r ซึ่งมีการลงทะเบียน EIP EIP คือรีจิสเตอร์ที่มีตำแหน่งของคำสั่งถัดไปสำหรับโปรเซสเซอร์ที่จะดำเนินการ สิ่งที่ WinDBG แสดงนั้นเทียบเท่ากับคำสั่ง u eip L1 หลังจากนั้น WinDBG ไปยังที่อยู่ที่ระบุในการลงทะเบียน EIP แปลงส่วนนี้เป็นรหัสแอสเซมบลีและแสดงบนหน้าจอ

ntdll!
77663540 cc int 3

อยู่ในการติดต่อ

ในบทความต่อๆ ไป เราจะมาดูวิธีใช้ WinDBG ในสภาพแวดล้อมแบบสด: เบรกพอยต์ การดีบักทีละขั้นตอน และการสแกนหน่วยความจำ อย่าเปลี่ยน! NS.

ความล้มเหลวประเภทนี้มักเกี่ยวข้องกับไดรเวอร์ที่ล้มเหลว ซึ่งอาจคำนวณได้ยาก อย่างไรก็ตาม ระบบติดตามจุดบกพร่องที่ได้รับการปรับปรุงใน Windows Vista (และไม่ใช่เฉพาะใน Vista เท่านั้น!) มักจะนำคุณไปสู่ไฟล์ที่มีปัญหา เป็นผลให้คนส่วนใหญ่หยุดทำงานอย่างบ้าคลั่งบนคอมพิวเตอร์ที่ไม่เสถียร บันทึกเอกสารด้วยความหวาดระแวงอย่างสม่ำเสมอและหวังว่าจะดีที่สุด

ที่ Windows ล่มมักจะเรียกว่า "การถ่ายโอนข้อมูลหน่วยความจำ" หลังสามารถตรวจสอบได้ด้วยดีบักเกอร์ฟรี เครื่องมือ Windows Debugging Tools ซึ่งสามารถนำทางคุณไปยังต้นทางของปัญหาได้ ดังนั้น สิ่งที่คุณต้องทำคือ:

ดาวน์โหลดเครื่องมือแก้ไขข้อบกพร่องให้ตัวเอง

คุณสามารถดาวน์โหลด Windows Debugging Tools ได้โดยตรงจากเว็บไซต์ของ Microsoft โปรแกรมนี้ใช้งานได้กับระบบปฏิบัติการที่หลากหลายตั้งแต่ Windows NT 4 ถึง Windows 2008 ดังนั้นคุณจึงไม่มีปัญหากับมัน ใช่ ไม่สามารถพูดได้ว่ามันเสถียรภายใต้ Windows 7 RC แต่จากการทดสอบของเรายังคงใช้งานได้ ดังนั้น แม้แต่ความพยายามที่จะวินิจฉัยปัญหาจากภายใต้ Windows 7 RC ก็อาจประสบความสำเร็จ

กำหนดค่าระบบของคุณ

จำเป็นที่คอมพิวเตอร์ของคุณต้องสร้างการถ่ายโอนข้อมูลหน่วยความจำ ซึ่งจะใช้เป็นแหล่งข้อมูลสำหรับดีบักเกอร์ในภายหลัง ดังนั้นจึงเป็นสิ่งสำคัญที่ Windows จะได้รับการกำหนดค่าให้สร้างการถ่ายโอนข้อมูล ในการปรับแต่งระบบปฏิบัติการของคุณ ให้คลิก คลิกขวาเมาส์บนคอมพิวเตอร์ของคุณ (คอมพิวเตอร์) และเลือกคุณสมบัติ (คุณสมบัติ) จากนั้นคลิกที่แท็บ Advanced System Settings ค้นหาส่วนย่อย Startup and Recovery Settings และตรวจสอบให้แน่ใจว่าพารามิเตอร์เขียนข้อมูลการแก้ไขข้อบกพร่องถูกตั้งค่าเป็น Kernel memory dump ) หรือ Complete memory dump

จากนั้นคลิก Start ไปที่ All Programs เลือก Debugging Tools และเปิด WinDbg ในโปรแกรมไปที่เมนูไฟล์และเลือกเส้นทางไฟล์สัญลักษณ์ ... จากนั้นเขียนบรรทัดต่อไปนี้ในหน้าต่างที่เปิดขึ้น:

SRV * c: \ สัญลักษณ์ * http: //msdl.microsoft.com/download/symbols

หลังกำหนดเส้นทางไปยังข้อมูลพิเศษ - ที่เรียกว่า "สัญลักษณ์" ที่สามารถช่วยให้เครื่องมือแก้ไขข้อบกพร่องในการระบุไฟล์ที่ผิดพลาดของคุณ

หลังจากเข้าแถวให้คลิกที่ปุ่ม OK ต่อมา เมื่อทำงานกับดีบักเกอร์ บรรทัดนี้จะดาวน์โหลดสัญลักษณ์จาก msdl.microsoft.com และบันทึกลงในโฟลเดอร์ c: \ symbols

แก้ปัญหาของคุณ

ตอนนี้รอการหยุดทำงานครั้งถัดไปด้วยหน้าจอสีน้ำเงิน และการรีสตาร์ทคอมพิวเตอร์ในเวลาต่อมา จากนั้นเรียกใช้ WinDbg อีกครั้ง (ผู้ใช้ Vista จำเป็นต้องเรียกใช้โปรแกรมในฐานะผู้ดูแลระบบ) คลิกที่เมนู File เลือก Open Crash Dump เปิดไฟล์ \ Windows \ MEMORY.DMP และโปรแกรมจะเริ่มวิเคราะห์ทันที

น่าเสียดายที่ WinDbg ให้ข้อมูลเพียงเล็กน้อยเกี่ยวกับสิ่งที่ทำ ดังนั้นคุณอาจคิดว่าโปรแกรมหยุดทำงาน อย่างไรก็ตามรอ ทำความเข้าใจ วิเคราะห์ พูด หน่วยความจำ 4GB บนคอมพิวเตอร์ที่ไม่ค่อยมีประสิทธิภาพมากนัก อาจใช้เวลาถึงหลายชั่วโมง ดังนั้นจงอดทนและเป็นการดีกว่าที่จะปล่อยให้การวิเคราะห์ในตอนกลางคืน

อย่างไรก็ตาม โดยปกติผลลัพธ์จะได้รับภายในไม่กี่นาที นี่คือหลักฐานโดยบรรทัดของตัววิเคราะห์ข้อผิดพลาดในการวิเคราะห์ Bugcheck โดยรายงานบางอย่างเช่น "อาจเกิดจาก: UACReplace.sys" หากแปลเป็นภาษารัสเซีย แสดงว่าปัญหาอาจเกิดจากไฟล์ UACReplace.sys ป้อนลงในแถบค้นหาเช่น Google แล้วคุณจะพบที่มาที่แท้จริง โดยเฉพาะหากเป็นของโปรแกรมใดโปรแกรมหนึ่งที่คุณติดตั้งหรือ ติดตั้งไดรเวอร์จากนั้นคุณสามารถลองอัปเดตเธอหรือเขา บางทีนี่อาจช่วยแก้ปัญหาที่คุณมีได้

ฉันต้องบอกว่าบางครั้ง WinDbg ไม่สามารถตั้งชื่อไฟล์ได้เลย หรือเพียงแค่เลือก DLL ของ Windows ตัวใดตัวหนึ่ง หากสิ่งนี้เกิดขึ้นกับคุณ ให้คลิกที่หน้าต่างคำสั่งด้านบนแถบสถานะแล้วพิมพ์คำสั่ง:

จากนั้นกด Enter ข้อมูลนี้จะช่วยให้คุณได้รับรายงานที่มีรายละเอียดมากขึ้น ซึ่งอาจมีข้อมูลเกี่ยวกับสาเหตุที่เป็นไปได้ของปัญหาของคุณ

หากครั้งนี้ไม่โชคดีอย่าสิ้นหวัง การดีบักค่อนข้างยาก แม้แต่ผู้เชี่ยวชาญ ดังนั้นเพียงแค่ปิด WinDbg และเรียกใช้ตัววิเคราะห์อีกครั้งหลังจากการหยุดทำงานครั้งถัดไป บางทีนี่อาจให้ข้อมูลเพิ่มเติมแก่คุณ ขอให้โชคดี!