Trang tài liệu
Khóa học C++ nền tảng
Chương 15. Trình gỡ lỗi
WinDbg

WinDbg

WinDbg là trình sửa lỗi mạnh mẽ dành cho các ứng dụng Windows, được bao gồm trong Microsoft Windows SDK. Nó cung cấp một bộ tính năng phong phú để giúp bạn phân tích và gỡ lỗi các chương trình phức tạp, chế độ truy cập hoàn chỉnh và không hạn chế vào phần cứng bên dưới (kernel mode) và mã code chế độ người dùng (user-mode). Với giao diện đồ họa thân thiện với người dùng, WinDbg có thể giúp phân tích các tệp kết xuất sự cố, thiết lập các điểm ngắt và từng bước thực thi mã code.

Bắt đầu

Để bắt đầu sử dụng WinDbg, trước tiên bạn cần cài đặt nó. Bạn có thể tải xuống Windows SDK và cài đặt nó để nhận WinDbg.

Tải xuống ký hiệu

WinDbg dựa vào các tệp ký hiệu (*.pdb) để cung cấp thêm thông tin hữu ích về cấu trúc, hàm và biến bên trong của chương trình. Để tải ký hiệu đúng cách, bạn có thể cần định cấu hình đường dẫn ký hiệu:

!sym noisy
.sympath SRV*C:\symbols*http://msdl.microsoft.com/download/symbols
.reload /f

Mở tệp thực thi và tệp kết xuất sự cố

Để gỡ lỗi một tệp thực thi bằng WinDbg, hãy đi tới File > Open Executable..., sau đó định vị và mở chương trình đích. Để phân tích kết xuất sự cố, thay vào đó, hãy sử dụng File > Open Crash Dump...

Lệnh cơ bản

Một số lệnh phổ biến bạn có thể sử dụng trong WinDbg:

  • g: Thực hiện chương trình cho đến điểm dừng hoặc ngoại lệ tiếp theo
  • bp
    : Đặt điểm dừng tại một địa chỉ nhất định
  • bl: Liệt kê tất cả các điểm dừng
  • bd <breakpoint_id>: Vô hiệu hóa một điểm dừng
  • be <breakpoint_id>: Bật điểm dừng
  • bc <breakpoint_id>: Xóa một điểm dừng
  • t: Hướng dẫn một bước thông qua (dấu vết)
  • p: Bước qua hướng dẫn (tiến hành)
  • k: Hiển thị ngăn xếp cuộc gọi
  • dd: Hiển thị nội dung bộ nhớ theo đơn vị 4 byte (từ double)
  • da: Hiển thị nội dung bộ nhớ dưới dạng chuỗi ASCII
  • !analyze -v: Phân tích trạng thái chương trình và cung cấp thông tin chi tiết

Ví dụ sử dụng

Gỡ lỗi một chương trình đơn giản:

  • Mở tệp thực thi trong WinDbg
  • Đặt điểm dừng bằng cách sử dụng bp
  • Chạy chương trình bằng g
  • Khi điểm ngắt được nhấn, hãy sử dụng t hoặc p để chuyển qua mã code
  • Hãy thử k để xem ngăn xếp cuộc gọi hoặc dd, da để kiểm tra bộ nhớ
  • Xóa điểm ngắt và tiếp tục gỡ lỗi bằng các lệnh khác nếu cần

Hãy nhớ rằng WinDbg có vô số lệnh và chức năng, vì vậy điều cần thiết là phải làm quen với tài liệu và khám phá vô số tài nguyên sẵn có dành riêng cho các tác vụ gỡ lỗi của bạn.