2011-09-30 40 views
6

Tôi đang gỡ lỗi một sự cố và tôi muốn ngắt mọi cuộc gọi phương thức có một đối tượng cụ thể làm thông số 'this'. Điều này có thể xảy ra trong GDB không?GDB ngắt cuộc gọi hàm đối tượng

+0

Bạn có phải là địa chỉ cụ thể không? Bạn không thể lấy kiểu đối tượng từ con trỏ này. – Pubby

+0

Bạn sẽ phải sử dụng điểm ngắt có điều kiện. Những thứ đó tồn tại, nhưng tôi không biết cách thiết lập chúng. gdb phần lớn là một bí ẩn với tôi, và các guis khác nhau xung quanh nó làm nhiều hơn để che khuất hơn để làm cho nó dễ tiếp cận. – Omnifarious

+0

Tôi có nghĩa là một địa chỉ cụ thể - Tôi có một đối tượng đang gắn bó xung quanh, và tôi muốn biết những gì được gọi trên đó. –

Trả lời

0

Tham số này chỉ nên là các phương thức được bao gồm trong chính lớp đó. Vì vậy, bạn chỉ cần thiết lập các điểm ngắt cho tất cả các phương thức của lớp bạn đang xem. Tôi không chắc chắn có một cách đơn giản để làm điều đó mặc dù.

+0

Tôi cho rằng OP có một phương pháp cụ thể trong đầu. Nhưng tôi nghi ngờ việc giải thích của bạn chính xác hơn. Làm thế nào bạn sẽ thiết lập một điểm dừng cho một phương pháp? – Omnifarious

5

Thật dễ dàng. Bạn có thể sử dụng lệnh như b A::a if (this==0x28ff1e).

+0

Có thể chỉ định một ký tự đại diện thay cho 'A :: a' có khớp với tên của tất cả các phương thức trong lớp' A' không? – Omnifarious

+0

Tôi không biết bất kỳ cách nào để sử dụng ký tự đại diện trong gdb, có thể anh ta cần một chương trình để tạo các lệnh để đặt thời gian ngắt. – user685684

+5

@NathanielFlath - Bạn biết không biết lệnh gdb 'rbreak' có thể không làm những gì bạn muốn ... – Omnifarious

0

Tôi muốn phá vỡ trên tất cả các cuộc gọi phương pháp đó có một đối tượng cụ thể như tham số 'này'

Điều này có nghĩa rằng bạn muốn phá vỡ trên tất cả các chức năng thành viên của một lớp học đặc biệt mà đối tượng đã được khởi tạo.

Hãy nói cho thuận tiện mà tất cả các hàm thành viên được định nghĩa trong một file cpp cụ thể như myclass_implementation.cpp

Bạn có thể sử dụng gdb để áp dụng breakpoint trên tất cả các chức năng bên trong myclass_implementation.cpp theo cách này:

rbreak myclass_implementation.cpp:. 

Hãy nói rằng bạn muốn phá vỡ một số chức năng cụ thể như hàm getter bắt đầu bằng Get, sau đó bạn có thể sử dụng gdb để áp dụng các điểm ngắt theo cách này:

rbreak myclass_implementation.cpp:Get* 
Các vấn đề liên quan