Có một tiêu chuẩn (ví dụ: được thực hiện bởi tất cả các trình biên dịch chính) #define sẽ cho phép tôi phân biệt giữa các bản dựng gỡ lỗi và bản phát hành không?C/C++: Cách di động để phát hiện gỡ lỗi/phát hành?
Trả lời
nếu tin
#ifdef NDEBUG
// nondebug
#else
// debug code
#endif
là di động nhất.
Nhưng no trình biên dịch biết bạn đang biên dịch gỡ lỗi hay phát hành, vì vậy đây không phải là tự động. Nhưng cái này được sử dụng bởi assert.h trong c-runtime, vì vậy nó khá phổ biến. Visual Studio sẽ thiết lập nó, và tôi chắc chắn hầu hết các IDE khác sẽ là tốt.
thiếu một _ ở mặt trước cho biết nó có thể được đề cập trong tiêu chuẩn C hoặc C++ ở đâu đó. MS đã rất rất cẩn thận trong các bản phát hành cuối cùng để tiền tố bất kỳ macro hoặc hàm không chuẩn nào trong tệp tiêu đề c-runtime của chúng với '_'s –
Điều đó không giống nhau. Định nghĩa NDEBUG sẽ tắt các macro khẳng định. Không có gì khác. Điều này làm __NOT__ ngụ ý gỡ lỗi. –
@Martin: nondebug thực sự. và nếu nó được dự định để _only_ tắt các macro khẳng định, họ sẽ gọi nó là NOASSERT. bạn thực sự nên đọc những gì tôi đã viết trước khi bạn bắt đầu lấy điểm. –
Chỉnh sửa: Tôi đã đọc sai câu hỏi và suy nghĩ về một tiếp tuyến khác nhau !!! Xin lỗi ... Macro _NDEBUG được sử dụng trên Linux cũng như trên Windows ...
Nếu nhị phân được tạo và bạn cần xác định xem bản dựng đã được phát hành/gỡ lỗi, bạn có thể nhận được kết xuất thập lục phân, nếu bạn thấy vô số các biểu tượng trong đó sẽ là thông tin gỡ lỗi ... ví dụ, dưới Linux, sử dụng tiện ích strings. Có một phiên bản dành cho Windows của SysInternals, có sẵn tại đây trên technet. các phiên bản phát hành thực thi nhị phân sẽ không có chuỗi đại diện cho biểu tượng khác nhau ...
strings some_binary
Hope this helps, Trân trọng, Tom.
Không nhất thiết phải đúng; có thể tạo các tệp nhị phân có ký hiệu (tức là đối với các hàm và dữ liệu tĩnh) nhưng không thể gỡ lỗi thông tin (tức là số dòng). –
Điều đó nói rằng, cờ cung cấp thông tin đó thường được lưu trữ trong tiêu đề của bất kỳ định dạng tệp đối tượng nào. Hãy thử GNU objdump (cũng có phiên bản dành cho Windows, được phân phối với MinGW): objdump -x –
Vì không có định nghĩa chuẩn về gỡ lỗi hoặc phát hành, không có cách nào để thực hiện việc này. Tôi có thể nghĩ ra ít nhất bốn thứ khác nhau có thể có nghĩa là, và tất cả chúng có thể được thay đổi độc lập. Chỉ có hai có thể được kiểm tra từ bên trong mã.
- mức tối ưu hóa trình biên dịch
- ký Debugging bao gồm trong hệ nhị phân (những thậm chí có thể được gỡ bỏ vào ngày hôm sau)
- assert() được kích hoạt (NDEBUG không được định nghĩa)
- logging tắt
- 1. .Phát hành Bản phát hành Net hoạt động chậm hơn Gỡ lỗi
- 2. gỡ lỗi vs phát hành trong cmake
- 3. phát hiện thiết bị trình duyệt di động trong .NET
- 4. Tự động phát hành và phát hành
- 5. gỡ lỗi vs hiệu suất phát hành
- 6. Makefile đơn giản với bản phát hành bản phát hành và gỡ lỗi - Các phương pháp hay nhất
- 7. Thiết bị di động được phát hiện là thiết bị không di động
- 8. Cấu hình gỡ lỗi và phát hành
- 9. Phát hiện thiết bị gỡ lỗi (ADB) không hoạt động
- 10. C# Gỡ lỗi và phát hành
- 11. iphone SDK phát hiện mạng Wifi và mạng di động
- 12. Cách phát hiện thiết bị để hiển thị kiểu điện thoại di động?
- 13. Cách đơn giản nhất để phát hiện thiết bị di động
- 14. có cách nào để "chuyển hướng" nếu trình duyệt di động được phát hiện không?
- 15. Cách nào để phát hiện các thiết bị di động lân cận bằng SDK Android?
- 16. Cách tốt nhất để phát hiện người dùng di động trong Magento
- 17. Cách sử dụng userAgent để phát hiện thiết bị di động
- 18. Haskell để phát triển di động
- 19. jquery pageContainer di động phát
- 20. Phát hiện hệ điều hành
- 21. Làm thế nào để gỡ lỗi Selenium WebDriver hành động?
- 22. UIRefreshControl - Làm cách nào để thực hiện hành động làm mới sau khi chạm được phát hành?
- 23. Bản phát hành gỡ lỗi phát hành cho ứng dụng Android
- 24. Sử dụng PySide/PyQt để phát triển di động
- 25. Phát hiện xem trình duyệt di động có hỗ trợ tràn hay không: di chuyển
- 26. Python: Cách phát hiện trình thông dịch gỡ lỗi
- 27. Cách tốt nhất để gỡ lỗi một ứng dụng chế độ phát hành
- 28. Tách mã gỡ lỗi và phát hành trong C#
- 29. Gỡ lỗi trong trình duyệt trên điện thoại di động?
- 30. Lỗi ứng dụng WinRT trong bản phát hành bản phát hành nhưng không gỡ lỗi
Trên thực tế dự án lớn mà tôi làm việc, chúng tôi tiếp tục gỡ lỗi trong bản phát hành của mình, nhưng có nó xác định độ trong thời gian chạy. Nó đã được chứng minh hữu ích trong việc săn tìm lỗi trong tự nhiên, với mức tối thiểu (_very_ khó để thông báo; không có khiếu nại người dùng) khi không được kích hoạt. Bên ngoài môi trường nhúng, tôi sẽ xem xét một cách tiếp cận như vậy. – mctylr
"Bản phát hành bản phát hành" là gì? Tiêu chuẩn C++ không định nghĩa nó, vì vậy không có cách nào để phát hiện ra một thứ gì đó có phải là bản phát hành hay không. – jalf