2010-08-09 9 views
5

Có thể sử dụng lệnh windbg như !locks.loadby sos mscorwks từ cửa sổ lệnh Visual Studio (trong một phiên gỡ lỗi) không? Tôi đã nhận thấy tôi có thể sử dụng ví dụ k để in một dấu vết ngăn xếp, vì vậy tôi đã tự hỏi nếu có một số cách để có được quyền truy cập vào các lệnh khác.Sử dụng windbg từ Visual Studio

Trả lời

7

Có, bạn có thể thực hiện việc này.

  1. Đính kèm Visual studio 2008 vào quá trình gỡ lỗi của bạn.
  2. Phá vỡ một số mã.
  3. Đến cửa sổ ngay lập tức
  4. loại !load sos
  5. Bây giờ bạn có thể tự do sử dụng bất kỳ lệnh windbg như !EEHeap,!DumpHeap

Có một số điều kiện. Bạn cần bật tính năng gỡ lỗi mã không được quản lý trong thuộc tính dự án của mình. Thông thường trong studio phiên bản 64 bit không hỗ trợ điều này.

Vui chơi.

+0

tuyệt vời, cảm ơn vì điều đó. Bất kỳ ý tưởng nếu tôi có thể truy cập vào các cuộc gọi windbg không được quản lý như ổ khóa hoặc phân tích? – ngoozeff

+0

@ngoozeff: Tôi nghĩ rằng chỉ có các lệnh sos có thể ở đây !! Ai đó sửa tôi nếu tôi sai – ferosekhanj

+8

Xin lỗi để được nitpicking ở đây, nhưng đó không phải là lệnh WinDbg, nhưng lệnh SOS. Thật không may là các lệnh WinDbg thông thường không có sẵn từ VS afaik, điều này khiến cho việc sử dụng SOS trở nên khó khăn hơn một chút. Ngoài ra, VS không hỗ trợ tất cả các giao diện IDebugClient cần thiết, do đó, đầu ra từ SOS là một chút ồn ào trong VS. –

4

Visual Studio 2012 có trình điều khiển "Trình gỡ lỗi chế độ người dùng Windows" trong hộp thoại "Đính kèm với quy trình". Điều này cho phép bạn sử dụng lệnh windbg trong cửa sổ ngay lập tức.

Nguồn: Use the WinDbg Engine in Visual Studio User-Mode Debugging

+0

Tôi đã cài đặt chuyên biệt Visual Studio 2012 Professional (Update 4). Tuy nhiên, giao diện * Windows User Mode Debugger * không hiển thị cho tôi. Một số nguồn cho rằng bạn phải cài đặt WDK trên đầu trang của một cài đặt VS, nhưng thông tin đáng tin cậy dường như không có sẵn. Vậy thỏa thuận là gì? – IInspectable

+0

Từ liên kết: 'Một báo trước khác là hiện tại bạn cần phải cài đặt WDK trên đầu Visual Studio 11 để có được sự tích hợp trình gỡ lỗi.' Nó không làm việc cho tôi cho đến khi tôi cài đặt WDK. –

+1

Tôi có thể xác nhận rằng cài đặt Windows 8.0 WDK trên đầu trang của Visual Studio đã cài đặt tích hợp Visual Studio là tốt. Bây giờ tôi có thể chọn * Trình gỡ lỗi Chế độ Người dùng Windows * làm phương tiện di chuyển (hoặc chọn một trình gỡ rối khác từ cài đặt * Trình gỡ rối * của dự án). Nó dường như hoạt động đáng tin cậy, mặc dù nó là chậm cho tôi. Một số tính năng từ trình gỡ lỗi VS bị thiếu (ví dụ: * Tracepoints *), trong khi các tính năng khác đã thay đổi (ví dụ: cú pháp khác nhau để đặt các điểm ngắt chức năng). Các lệnh mở rộng WinDbg mạnh mẽ như '! Handle' hoặc'! Locks' hiện có sẵn từ GUI VS (* Debugger Immediate Window *). – IInspectable

2

Bắt đầu với Windows Phát triển Driver Kit (WDK) 8.0 trình gỡ lỗi Windows được tích hợp vào Visual Studio (xem Debugging Environments). Cài đặt WDK trên đầu trang của cài đặt Visual Studio sẽ cho phép nhà phát triển chọn một số trình gỡ rối từ hộp thoại Đính kèm với quy trình hoặc đặt công cụ gỡ lỗi trong cài đặt Gỡ lỗi của dự án. Điều này đã được xác minh cho Visual Studio 2012 và 2013. Cách tôi đọc liên kết MSDN ở trên, điều này cũng sẽ làm việc cho bất kỳ IDE nào khác được hỗ trợ bởi WDK 8.0 trở lên.

Trong khi WinDbg cung cấp nhiều lệnh mạnh mẽ, cũng có một số nhược điểm. Danh sách này không đầy đủ và chỉ chứa những vấn đề tôi gặp phải:

  • Không thể đính kèm nhiều quá trình cùng một lúc. Trong khi nói chung không phải là một vấn đề, điều này là khá không may, nếu bạn cần phải gỡ lỗi nhiều hơn một quá trình tại một thời điểm. Trình gỡ lỗi Visual Studio có thể đính kèm vào bất kỳ số lượng quy trình nào cùng một lúc.
  • WinDbg sẽ không sử dụng cài đặt biểu tượng từ Visual Studio IDE của bạn (được thử nghiệm trên Bản cập nhật VS 2012 4). Trong khi bạn có thể cấu hình IDE để tìm các biểu tượng gỡ lỗi, WinDbg sẽ không tôn trọng các thiết lập đó. WinDbg sẽ sử dụng biến môi trường _NT_SYMBOL_PATH và/hoặc cấu hình được đặt qua .sympath.
  • Cú pháp khác nhau cho các điểm ngắt chức năng. Đây là một sự khó chịu nhỏ, vì bạn không thể sử dụng cú pháp của Visual Studio để chỉ định các điểm ngắt hàm. Điều này cũng có nghĩa là, các điểm ngắt chức năng được bỏ qua đã được thiết lập bằng cách sử dụng cú pháp Visual Studio. Tuy nhiên, điều phiền toái hơn là bạn sẽ nhận được một hộp thoại cảnh báo cho mỗi khi tung ra một debuggee.
  • Không hỗ trợ cho Tracepoints. Tôi đã sử dụng tracepoints rộng rãi, để unintrusively chèn truy tìm vào một debuggee. Nếu bạn đang sử dụng tracepoints là tốt, điều này có thể chứng minh được nhiều hơn chỉ là một khó chịu.
+1

Lệnh 'bp' của' windbg' chấp nhận một lệnh để chạy khi điểm ngắt được nhấn, vì vậy bạn có thể mô phỏng một tracepoint. Ví dụ, 'bp combase! CoSetErrorInfo" dt combase! CErrorObject% edx; g "' –