2015-01-13 18 views
6

Tôi đã cài đặt Delphi XE7 gần đây.Khi tôi lần đầu tiên biên soạn một ứng dụng cũ hàm của tôi giảm khi tôi thấy rằng kích thước của EXE tăng lên 10MB! 'Tùy chọn dự án' Tôi phát hiện ra rằng việc thiết lập thông tin 'Gỡ lỗi' thành 'Giới hạn thông tin gỡ lỗi' sẽ giảm kích thước EXE xuống một cái gì đó RẤT gần với EXE được tạo bởi Delphi XE. Thông tin gỡ lỗi 'từ Delphi XE kể từ khi nó kết quả trong cùng một kích thước EXE?'Thông tin gỡ lỗi giới hạn' là gì? (Đầy đủ "Thông tin gỡ lỗi" tạo ra các tệp EXE lớn)

Vì vậy, tại sao đầy đủ' thông tin gỡ lỗi 'làm cho EXE quá lớn (so với XE)? Tôi không thể biên dịch EXE với thông tin hạn chế (tôi đoán) bởi vì tôi muốn có quyền truy cập đầy đủ vào các tính năng gỡ lỗi (cũng cần EurekaLog).
Tài liệu của Embarcadero không nói gì về sự khác biệt giữa thông tin 'giới hạn' và thông tin gỡ lỗi đầy đủ.

Tài liệu EurekaLog dành cho phiên bản cũ của Delphi, vì vậy nó không nêu rõ liệu tôi có thể sử dụng tùy chọn mới (thương xót) 'Thông tin gỡ lỗi giới hạn' hoặc thông tin gỡ lỗi đầy đủ hay không. Tôi sẽ phải thử nghiệm.

+0

Có một bài đăng liên quan ở đây nhưng nó không xử lý vấn đề kích thước EXE: http://stackoverflow.com/questions/19653475/what-is-the-different-between-limited-debugging-information-and- debug-informa – Ampere

+0

Thử bật tùy chọn "Đặt thông tin gỡ lỗi trong tệp TDS riêng biệt" của trình liên kết. –

+0

Tôi không nghĩ rằng EurekaLog sẽ hoạt động theo cách này. Hoặc, có lẽ tôi cũng sẽ phân phối các tệp TDS. Dù sao, tôi sẽ xem xét điều này. Cảm ơn. – Ampere

Trả lời

13

"Thông tin gỡ lỗi giới hạn" là một tùy chọn chỉ ảnh hưởng đến trình biên dịch nhắm mục tiêu của Android. Tuy nhiên, vì tất cả các trình biên dịch chia sẻ cùng một giao diện, tùy chọn này xuất hiện cho mọi mục tiêu. Nó chỉ áp dụng cho bao nhiêu thông tin gỡ lỗi đi vào từng tệp đối tượng riêng lẻ (.o). Đối với Android (và iOS), định dạng thông tin gỡ lỗi là DWARF. DWARF là một định dạng rất dài và có thể chứa thông tin kiểu cấu trúc rất chi tiết về tất cả các loại trong một đơn vị đã cho cho tất cả các loại từ tất cả các đơn vị "đã sử dụng" của một đơn vị nhất định. Trong "Thông tin gỡ lỗi có giới hạn", thông tin loại cho tất cả các đơn vị đã sử dụng là không phải là được tạo. Điều này có nghĩa là một số biến trường và biến cục bộ có thể không kiểm tra được trong khi gỡ lỗi.

Để biết liệu thông tin gỡ lỗi có được đưa vào tệp thực thi cuối cùng hay không, được kiểm soát bởi tùy chọn trình liên kết chứ không phải tùy chọn trình biên dịch. Trình liên kết sẽ liên kết mọi thông tin gỡ lỗi có sẵn. Nếu việc xây dựng cho Android và "Thông tin gỡ lỗi" được chọn, thì hình ảnh cuối cùng sẽ có nhiều thông tin hơn và lớn hơn nhiều.

Bây giờ tôi sẽ đoán bạn đang nhắm mục tiêu Windows (bạn không thực sự nói rằng bạn đang sử dụng, nhưng tôi sẽ sử dụng quyền hạn tâm linh của mình ở đây), trong trường hợp đó là "Thông tin gỡ lỗi có giới hạn" và "Thông tin gỡ lỗi "là điều tương tự. Trong Windows, định dạng gỡ lỗi được gọi là "GIANT". Bạn có thể nói "trớ trêu" không? DWARF là một định dạng cực kỳ tiết lộ, trong khi định dạng GIANT của Embarcadero (bản gốc của Borland) thì nhỏ gọn hơn. Sự gia tăng kích thước chỉ có thể là từ chức năng thời gian chạy bổ sung và có lẽ do sử dụng nhiều hơn các generics.

+3

Cảm ơn thông tin. Quá tệ không có tài liệu. –

+0

Cảm ơn Allen. Bản ghi đầu tiên của bạn đã được giải thích gần như mọi thứ :) – Ampere

+2

Để ghi lại, mặc dù trình liên kết cho Android sẽ tiêm tất cả thông tin gỡ lỗi vào hình ảnh thực thi (thực tế là trên Android), thông tin đó bị tước đi trong khi tạo tệp .apk đó là những gì thực sự được đặt trên thiết bị (hoặc trình mô phỏng). Để gỡ lỗi, trình gỡ lỗi gdb không đọc thông tin gỡ lỗi từ hình ảnh được đóng gói vào .apk, thay vì nó đọc nó từ hình ảnh được liên kết ban đầu trên ổ cứng của bạn. –

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