2008-10-02 28 views
11

Tôi có hai nghĩa chồng cho một C++ chức năng và tôi muốn thiết lập một breakpoint trên một trong số họ:Windbg: Làm thế nào để thiết lập điểm ngắt trên một trong những quá tải của một hàm C++?

0:000> bu myexe!displayerror 
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *) 
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT) 
Ambiguous symbol error at 'myexe!displayerror' 

Heck tôi sẽ tốt với thiết breakpoint trên tất cả các quá tải, nhưng dường như không thể tìm ra như thế nào:

0:000> bu myexe!displayerror* 
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *) 
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT) 
Ambiguous symbol error at 'myexe!displayerror*' 

Trả lời

7

Hãy thử:

bu 0xff3c6100 

Nếu tôi nhớ không nhầm, WinDbg phép thiết lập breakpoint theo địa chỉ quá.

4

Bạn đã thử "bm myexe! Displayerror *" chưa?

2
bm myexe!displayerror 

này sẽ đặt breakpoint tất cả mọi quá tải, hơn bạn sử dụng bc để xóa những cái bạn không muốn

bc 1-3 

Hoặc chỉ cần vô hiệu hóa chúng

bd 1-3 

Vấn đề với bm là các điểm ngắt mà nó tạo ra đôi khi sẽ không được đánh giá và kích hoạt ngắt. Đôi khi khó chịu.

3

bp @@ (MyClass :: MyMethod) phá vỡ về phương pháp (hữu ích nếu cùng một phương pháp quá tải và do đó có mặt trên một số địa chỉ)

1

Tìm dll của bạn cho tất cả các điểm nhập cảnh phù hợp với biểu tượng của bạn

x myexe!displayerror 

chí sản lượng này, tất cả những biểu tượng phù hợp với chuỗi tìm kiếm và các điểm nhập cảnh, sau đó đặt breakpoint trên địa chỉ

bp ff3c6100 // for myexe!displayError (int, HRESULT, wchar_t *) 

này sẽ thiết lập một breakp cụ thể oint khi địa chỉ đó được nhấn, hoặc bạn đặt bp đối với địa chỉ khác. Bạn có thể đặt breakpoint để chỉ cần nhấn một lần, hãy bỏ breakpoint và thoát

bp /1 ff3c6100 

và bạn cũng có thể thực hiện các lệnh như đổ các cuộc gọi stack, các biến và tiếp tục:

bp ff3c6100 "kb;dv;g" 

Bạn cũng có thể chỉ mở mã nguồn của bạn khi WinDbg được đính kèm, điều hướng đến dòng mã bạn muốn đặt điểm ngắt và nhấn F9 (giống như bạn sử dụng Visual Studio), nó sẽ tạm dừng một lúc trước khi đặt điểm ngắt tại dòng đó, điều này giả định bạn có quyền truy cập vào mã nguồn.

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