2012-07-30 23 views
17

Làm cách nào tôi có thể phát hiện từ bên trong QObject trong thời gian chạy có hay không Qt được liên kết với nó là một bản dựng gỡ lỗi hoặc bản phát hành gỡ lỗi không?Phát hiện nếu qt đang chạy bản dựng gỡ lỗi tại thời gian chạy

Tôi biết về số QT_NO_DEBUG macro, nhưng điều đó được giải quyết tại thời gian xây dựng cho Qt.

Ví dụ 1 khi điều này hữu ích: Tôi có một plugin hoạt động như một trình xử lý sự cố, cung cấp backtrace. Tôi chỉ muốn plugin này cố gắng thực hiện tất cả công việc này nếu các biểu tượng gỡ lỗi qt có sẵn.

Ví dụ 2: Tôi có trình phân tích đối số dòng lệnh được viết bằng pyqt. Nó muốn in trợ giúp chương trình. Làm thế nào để nó tìm ra nếu QApplication sẽ hỗ trợ chuyển đổi -sync hoặc không từ bên trong pyqt. Nếu tôi có thông tin về kiểu xây dựng, tôi có thể thêm hoặc loại bỏ -sync dễ dàng từ danh sách các đối số mà chương trình hiểu được.

+0

Bạn có muốn biết các thư viện Qt có gỡ lỗi hay phát hành hoặc bạn có muốn biết liệu ứng dụng của bạn có được biên dịch trong gỡ lỗi hoặc phát hành không? –

+0

Thư viện Qt. –

Trả lời

30

Nếu bạn chỉ muốn kiểm tra xem bạn đang chạy một debug hoặc phát hành xây dựng của ứng dụng của bạn, sử dụng QT_DEBUG:

#ifdef QT_DEBUG 
    qDebug() << "Running a debug build"; 
#else 
    qDebug() << "Running a release build"; 
#endif 

Mặc dù đây rõ ràng là sử dụng tiền xử lý, chứ không phải là kiểm tra khi chạy. Tôi hơi bối rối về lý do tại sao bạn đã chỉ định rằng bạn muốn thực hiện kiểm tra này khi chạy, xem như quyết định xây dựng có hoặc không có khả năng gỡ lỗi chỉ có thể được thực hiện trước khi biên dịch ...

I ' m không biết về bất kỳ cách nào dễ dàng trong Qt4 để kiểm tra xem thư viện Qt bạn đang liên kết có được xây dựng với tính năng gỡ lỗi được bật hay không (mặc dù tôi đã thông báo rằng điều này có vẻ sẽ thay đổi trong Qt5 khi thêm QLibraryInfo::isDebugBuild()).

+0

Đã thêm làm rõ cho câu hỏi. –

+2

Chấp nhận câu trả lời của bạn, không phải cho các macro, nhưng đối với các teptbit QLibraryInfo. Có vẻ như nhiều câu hỏi mà tôi đã hỏi được giải quyết bằng Qt5, bao gồm cả câu hỏi này. Tôi sẽ thừa nhận rằng không có giải pháp thích hợp cho Qt4. –