2008-09-19 31 views

Trả lời

61

Nếu bạn đang tự hỏi tại sao bạn nên sử dụng windbg trên Visual Studio, sau đó bạn cần phải đọc Advanced Windows Debugging. Bất cứ lúc nào bạn cần gỡ lỗi một vấn đề thực sự xấu xí windbg có công nghệ tốt hơn để làm điều đó với hơn Visual Studio. Windbg có một ngôn ngữ kịch bản mạnh hơn và cho phép bạn viết các tệp DLL để tự động hóa các vấn đề khó khăn. Nó sẽ cài đặt gflags.exe, cho phép bạn kiểm soát tốt hơn vùng heap để gỡ lỗi bộ nhớ ghi đè.

Bạn không thực sự cần phải chạy bản cài đặt, bạn chỉ có thể sao chép các tệp và sẵn sàng sử dụng. Ngoài ra, nó sẽ cài đặt adsplus.vb, vì vậy bạn có thể thực hiện các quá trình chạy nhỏ. Nó cũng rất dễ cài đặt để thực hiện gỡ lỗi từ xa. Không có gì tốt hơn là có thể gỡ lỗi một vấn đề từ bàn của riêng bạn thay vì chống lại màn hình 15 "nhấp nháy trên máy tính thử nghiệm.

Để viết mã hàng ngày, tôi sử dụng Visual Studio, nhưng một khi bạn cần bắt đầu gỡ lỗi các vấn đề từ các máy tính khác hoặc tìm thấy chính mình trong một tình huống rất xấu, windbg là cách duy nhất để sử dụng. Tất cả việc gỡ lỗi của họ bằng cách sử dụng windbg

3

Tôi đã sử dụng nó khi tôi đã được gửi các tệp .dmp từ máy chủ NT4.0 - MSVC sẽ không tải các tệp định dạng cũ này.

2

Nhẹ, có thể chạy mà không cần cài đặt nó trên máy khách, nhanh, có thể gỡ lỗi chế độ hạt nhân.

6

Bạn không chỉ định xem bạn đang gỡ lỗi mã gốc hay mã được quản lý. Nó không ảnh hưởng đến câu trả lời, WinDbg cực kỳ hữu ích cho cả hai, nhưng nhiều người tin rằng WinDbg bằng cách nào đó ít liên quan hơn khi debuggi ng ứng dụng .NET. Không phải vậy. Là một phần thưởng, bạn có thể tìm hiểu rất nhiều về cách nền tảng .NET hoạt động bằng cách gỡ lỗi ứng dụng .NET của bạn trong WinDbg với phần mở rộng SOS. Chạy (hoặc đính kèm) ứng dụng .NET của bạn trong WinDbg và nhập ...

.loadby sos mscorwks 

... để chắc chắn rằng bạn tải phần mở rộng phù hợp cho phiên bản CLR đang sử dụng. Sau đó, nhập ...

!help 

... để xem các lệnh nào có sẵn trong phần mở rộng SOS.

Tôi đã nghe nói rằng Microsoft chỉ có một công cụ phát triển và đó là WinDbg. Tất cả mọi thứ bạn có thể có thể muốn gỡ lỗi là ở đó, hoặc trong một phần mở rộng. Chắc chắn, một tập con của những thứ đó cũng có sẵn trong VS với giao diện người dùng thân thiện hơn ... :-)

+4

Nếu bạn đặt thuộc tính gỡ lỗi của dự án và bật "gỡ lỗi không được quản lý", bạn có thể tải phần mở rộng SOS vào Visual Studio. Bật gỡ lỗi không được quản lý -> đặt điểm ngắt ở đâu đó -> chạy -> khi bạn nhấn điểm ngắt, mở cửa sổ ngay lập tức (ctrl + alt + i) và nhập .load sos. Xem http://blogs.msdn.com/vijaysk/archive/2007/11/15/sos-your-visual-studio.aspx để biết thêm thông tin. – dss539

11

Dưới đây là một số liên kết khác để trợ giúp sử dụng WinDbg, hầu hết là .NET cụ thể.

  • John Robbins nói về việc sử dụng cmdtree để tạo cửa sổ lệnh.
  • Đây là số WinDbg/SOS cheat sheet nhanh.
  • If broken it is, fix it you should có một loạt các bài viết liên quan đến WinDbg/Sos, chủ yếu là xung quanh gỡ lỗi ASP.NET.
  • Here là tổng quan cũ về SOS từ MSDN mag. Đó là về .NET 1.1 để tuổi của nó được hiển thị.
3

Trộn hạt nhân-gỡ lỗi cộng với chế độ người dùng từ xa-gỡ lỗi.

AFAIK, studio trực quan vẫn không thể thực hiện gỡ lỗi từ xa trong chế độ tôi mô tả là "giải pháp". Đó là lý do tốt để sử dụng windbg.

Vấn đề:

  • Thiết lập windbg trên 1394. Ứng dụng của bạn chạy trên "mục tiêu". Windbg chạy trên "host".
  • Chạy studio trực quan trên máy chủ
  • Có studio trực quan khởi chạy ứng dụng của bạn trên mục tiêu bằng các công cụ từ xa.
  • lao vào kernel mode windbg để ngăn chặn các mục tiêu
  • Chờ đủ lâu để kết nối TCP visual studio để timeout
  • "g" trong windbg để bỏ dừng mục tiêu
  • quan sát ứng dụng của bạn "pop" khi màn hình từ xa nhận ra kết nối mạng đã biến mất
  • khởi động lại ứng dụng của bạn :(

giải pháp:

  • Không sử dụng studio trực quan.
  • Chạy chế độ người dùng windbg trên mục tiêu bằng "-server"
  • Đặt windbg của mục tiêu khởi chạy ứng dụng của bạn.
  • Trên máy chủ, bắt đầu một windbg thứ 2 kết nối với mục tiêu bằng "-remote".
  • Nếu kết nối TCP chết chỉ bắt đầu một phiên bản windbg khác trên máy chủ và không có gì bị mất. Ứng dụng của bạn không chết vì quá trình windbg chế độ người dùng kiểm soát đang chạy trên mục tiêu.

Ngoài ra, tôi tìm thấy nó dễ dàng hơn để sử dụng trình gỡ lỗi tương tự cho cả hai chế độ hạt nhân và chế độ người dùng, windbg là rất mạnh mẽ ngay cả trong chế độ người dùng, và tôi có thể tận dụng phần mở rộng windbg riêng tôi trong cả hai chế độ hạt nhân và chế độ người dùng trường hợp.

2

Studio hình ảnh mới nhất vẫn thiếu một tương đương với "-o" của windbg khiến trình gỡ rối tự động đính kèm với các tiến trình con không? Rất hữu ích cho các ứng dụng phải được chạy từ một tập tin .bat phức tạp, hoặc các ứng dụng mà ngã ba và thoát khỏi quá trình cha mẹ.

1

Tôi luôn thích tính năng đồng hồ và theo dõi: 'wt' -> Nó in ra cửa sổ đầu ra tất cả các hàm gọi khi chúng xảy ra. Đó là những thứ khá thú vị!

Các vấn đề liên quan