2011-08-09 29 views
19

Có cách nào để xây dựng Qt trong chế độ "Phát hành với thông tin gỡ lỗi" không? Ứng dụng của tôi chỉ bị treo trong chế độ "release" (hoạt động tốt trong chế độ Debug) và dường như vấn đề xuất phát từ Qt (có thể là một lỗi trong Qt) .Tôi muốn xem thông tin gỡ lỗi của Qt.Tạo Qt trong chế độ "Phát hành với thông tin gỡ lỗi"?

Qt docs có chế độ "gỡ lỗi", "giải phóng" nhưng không có chế độ "gỡ rối với gỡ lỗi".

[Upate]

Ứng dụng của tôi hoạt động tốt với trình gỡ lỗi 64 bit/Debug và VSC++.

Chỉ treo trên VSC++ 64Bit Phát hành

Mọi mẹo?

+1

Đôi khi Q_ASSERT báo cáo là nguyên nhân cho một hành vi như vậy. Nếu bạn làm Q_ASSERT ((pObject = getObject())! = NULL); ví dụ, dòng pObject = getObject() sẽ không được thực hiện trong chế độ phát hành. Bạn có thể kiểm tra các công cụ như vậy hoặc công tắc gỡ lỗi. –

Trả lời

3

Chúng tôi sử dụng qmake để tạo tệp vcproj để tạo Qt. Tôi đã viết một kịch bản python (nhưng sed là tốt quá) để thay đổi các tập tin vcproj để xây dựng với thông tin gỡ lỗi trong bản phát hành quá.

Có thông tin gỡ lỗi thực sự là vô giá đối với các dấu vết ngăn xếp đi qua lại giữa Qt và ứng dụng của chúng tôi.

Sau đây là đoạn có liên quan:

for root, dirs, files in os.walk(qt_build_dir): 
    for f in files: 
     if not f.endswith('.vcproj'): 
      continue 

     output = [] 
     with open(pj(root, f), 'r') as file: 
      for line in file.readlines(): 
       line = line.strip() 
       if 'DebugInformationFormat="0"' == line: 
        output.append('\t\t\t\tDebugInformationFormat="3"') 
       elif 'GenerateDebugInformation="false"' == line: 
        output.append('\t\t\t\tGenerateDebugInformation="true"') 
       else: 
        output.append(line) 

     with open(pj(root, f), 'w') as file: 
      file.write('\n'.join(output)) 
1

Hình như bạn cần phải điều chỉnh QMAKE_CFLAGS_RELEASE biến. Trong trường hợp của gcc bạn chỉ cần thêm -g tùy chọn để thêm thông tin gỡ lỗi.

+0

cách cho nó khi chạy "./configure" khi biên dịch QT? –

+0

Cần có biến env tương tự cho ./configure. Tôi không biết chính xác, maby nó là 'CXXFLAGS'. Tìm trong ./configure script. – ks1322

14

tôi sử dụng này trong các tập tin qmake tôi để xây dựng các phiên bản phát hành của tôi với debuginfo:

QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO 
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO 

Bằng cách này bạn ít nhất có thể kiểm tra nếu tai nạn xảy ra trong mã của bạn. Qt xây dựng với chế độ này không được hỗ trợ, xem điều này bug. Bạn chỉ có thể thực hiện thủ công bằng cách thay đổi tệp vcproj hoặc Makefiles như trong câu trả lời của Macke.

+2

Đồng bằng '=' dường như chỉ tạo một bản dựng gỡ lỗi, nó có vẻ hoạt động chính xác với '+ ='. –

+0

Nó hoạt động với '=', với MSVC trên qtcreator. – quimnuss

1

Xây dựng Qt với chế độ này không được hỗ trợ, hãy xem lỗi này. Bạn chỉ có thể thực hiện thủ công bằng cách thay đổi tệp vcproj hoặc Makefiles như trong câu trả lời của Macke.

Tôi có thể thêm điều đó vào Qt 4.8, lỗi này dường như đã được sửa. Tôi đã sao chép hai dòng đó vào tệp .pro của tôi và nó hoạt động như một nét duyên dáng.

19

Câu hỏi cũ, tôi biết. Nhưng ngày nay, bạn chỉ có thể sử dụng

CONFIG += force_debug_info 

để nhận các biểu tượng gỡ lỗi ngay cả trong chế độ phát hành. Khi bạn sử dụng qmake qua dòng lệnh, tôi thường làm điều này để có được một thông cáo xây dựng với thông tin gỡ lỗi:

qmake CONFIG+=release CONFIG+=force_debug_info path/to/sources 
+0

tại thời điểm này, không được hỗ trợ trong Qt4 – Sascha

+1

CONFIG + = force_debug_info – BuvinJ

+0

Thoát khỏi 'bản phát hành' được hiển thị ở đây trừ khi bạn muốn bật các phiên gỡ lỗi để phát hành! – BuvinJ

9

Trong Qt5, khi gọi configure, chỉ đơn giản là thêm tùy chọn -force-debug-info

+0

Điều này khi biên dịch Qt từ mã nguồn? – Jack

+0

Có, bạn cần phải tự xây dựng Qt thông qua cấu hình và trình biên dịch bạn chọn. – Pixtar

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