2010-01-21 7 views
18

Khi tôi nhấn một câu lệnh xác nhận bình thường trong khi gỡ lỗi với Visual Studio, tôi có tùy chọn để đột nhập vào trình gỡ rối để tôi có thể xem toàn bộ dấu vết ngăn xếp và biến cục bộ, không chỉ là thông báo xác nhận.Gỡ lỗi xác nhận trong Qt Creator

Có thể thực hiện điều này với Qt Creator + mingw32 và Q_ASSERT/Q_ASSERT_X không?

Trả lời

7

Bạn có thể cài đặt một handler cho các thông điệp/cảnh báo rằng Qt phát ra, và làm chế biến của riêng bạn trong số họ. Xem tài liệu cho qInstallMsgHandler và ví dụ họ đưa ra ở đó. Nó sẽ được dễ dàng để chèn một break trong một xử lý tin nhắn tùy chỉnh (hoặc thực sự, chỉ cần khẳng định trên của riêng bạn tại thời điểm đó). Một nhược điểm nhỏ là bạn sẽ có thêm một chút trên stack so với nơi lỗi thực sự xảy ra, nhưng nó là một vấn đề đơn giản để chỉ cần đẩy lên stack cho đến khi bạn đang ở đúng khung.

+3

Tôi đã sử dụng ví dụ với __asm ​​("int3") trước khi hủy bỏ () và nó hoạt động rất tốt. –

2

Có thể. Tôi đã mã hóa một hàm BreakInDebugger bằng tay và một macro khẳng định gọi hàm đó.

ví dụ: #define MyAssert(X) (BreakInDebugger();Q_ASSERT(X))

16

Có thể. Bằng cách nào đó tính năng này ngừng hoạt động đối với tôi, nhưng về cơ bản những gì bạn muốn là dừng lại trên qFatal(). Để đảm bảo điều này xảy ra, trong qt Creator, hãy vào Tools -> Options -> Debugger -> GDB và chọn "Dừng khi qFatal được phát hành"

+0

Trông giống như tùy chọn phù hợp (tại sao nó không được bật theo mặc định?), Nhưng dường như nó không hoạt động đối với tôi. –

+1

Ngăn cấu hình được gọi là "GDB mở rộng" trong Qt Creator 5.3 và có thể sau này. –

+0

Làm việc cho tôi: Qt Creator 5.3 (32) + Thư viện Qt 5.9 (64) + MSYS2/MinGW (64). –