2011-09-22 32 views
7

Công cụ trò chơi tôi đang làm việc với quá chậm trong bản dựng gỡ lỗi và không thể gỡ lỗi trò chơi. Một trong những điều tôi muốn là dành cho trình biên dịch cho các chức năng nhỏ nội tuyến (đặc biệt là trong các lớp Vector/Matrix và container). Điều này có thể hoặc không thể tăng tốc độ trò chơi trong quá trình gỡ lỗi. Trước khi profiling rất nhiều và cố gắng để tìm ra tắc nghẽn Tôi nghĩ rằng tôi sẽ cố gắng này đầu tiên như tôi sẽ phải làm công việc tối thiểu và kết quả có thể được hứa hẹn.Chức năng nội tuyến trong bản dựng gỡ lỗi (Visual C++ 2008)

Vì vậy, có cách nào để trình biên dịch Visual C++ thành các hàm nội tuyến trong các bản dựng gỡ lỗi không?

Trả lời

5

Tùy chọn dự án -> C/C++ -> Tối ưu hóa -> Mở rộng chức năng nội tuyến. Biến điều này thành /Ob2. Thực hiện việc này trong cấu hình Gỡ lỗi của bạn.

Trong bản phát hành, mở rộng chức năng nội tuyến được ngụ ý bởi các cài đặt tối ưu khác, vì vậy mặc dù theo mặc định tất cả cấu hình đều nói "Mặc định" cho cài đặt, hành vi thực sự khác.

Tôi tin rằng các bản dựng Gỡ lỗi phải có hành vi mở rộng nội dòng giống như phát hành; thực sự không có lý do gì để không.

http://msdn.microsoft.com/en-us/library/47238hez.aspx

+0

Cảm ơn câu trả lời, tôi sẽ kiểm tra điều này ngay khi tôi tìm thấy thời gian và sau đó sẽ đánh dấu chọn câu trả lời. – Samaursa

+0

Tôi đã kiểm tra điều này là chính xác vì không có dấu hiệu trong tập tin trợ giúp VS rằng điều này sẽ không hoạt động để gỡ lỗi xây dựng (không có cảnh báo trình biên dịch của cờ trình biên dịch không được hỗ trợ hoặc). Tôi có thể đột nhập vào các chức năng một dòng đơn giản nhất mà tôi không thể làm như vậy trong bản phát hành. Không chắc chắn liệu nó là nội tuyến trừ khi tôi nhìn vào hội đồng. – Samaursa

+0

Điều này có khiến trình gỡ rối bị "nhầm lẫn" không? – paulm

-1

DEBUG được xác định bởi Visual Studio khi một dự án được biên soạn trong chế độ Debug vậy:

#ifdef DEBUG 
    inline void fn() { 
#else 
    void fn() { 
#endif 
+0

Vấn đề là, từ khóa 'inline' hoàn toàn bị bỏ qua bởi trình biên dịch khi gỡ lỗi – Samaursa

0

Bạn có thể thử __forceinline. Hãy chắc chắn để đọc về gỡ lỗi xây dựng trên trang đó (tắt tùy chọn /Ob0).

Nghi ngờ của tôi là điều này sẽ không thay đổi hiệu suất rất nhiều. Một điều cần thử nếu bạn chưa có chỉ là để thêm các biểu tượng cho một bản phát hành. Nó hoạt động khá tốt để gỡ lỗi rất nhiều vấn đề.

0

Bạn đang nhầm lẫn giữa hai tùy chọn trình biên dịch. /O ảnh hưởng đến tối ưu hóa, kể cả nội tuyến. /ZI tạo tệp PDB để gỡ lỗi. Chúng có thể được đặt độc lập.

Mặc dù vậy, có thể hữu ích khi sao chép cấu hình "Gỡ lỗi" và tạo cấu hình "Gỡ lỗi được tối ưu hóa" với cả hai /O1/ZI.

+0

Chúng có thể là, có, nhưng với tối ưu hóa, quá nhiều thứ được tối ưu hóa. Ví dụ, các chuỗi không thể được gỡ rối đúng cách hầu hết thời gian với các tối ưu hóa và với thông tin gỡ lỗi. Trình gỡ rối không hiển thị giá trị cho nhiều biến cục bộ có tối ưu hóa ngay cả khi có thông tin gỡ lỗi. – Samaursa

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