Ký hiệu trình gỡ lỗi
Các ký hiệu trình gỡ lỗi là thông tin bổ sung được nhúng trong mã nhị phân của chương trình đã biên dịch, giúp trình gỡ lỗi hiểu cấu trúc, mã nguồn và các biểu diễn biến tại một điểm cụ thể trong quá trình thực thi.
Có hai kiểu ký hiệu gỡ lỗi chung:
- Các ký hiệu gỡ lỗi nội bộ: Các ký hiệu này nằm trong chính mã nhị phân đã biên dịch. Khi sử dụng các ký hiệu gỡ lỗi nội bộ, cần lưu ý rằng kích thước của mã nhị phân tăng lên, điều này có thể không mong muốn đối với môi trường sản xuất (production environment).
- Ký hiệu gỡ lỗi bên ngoài: Các ký hiệu gỡ lỗi được lưu trong các tệp riêng biệt ngoài mã nhị phân, thường có phần mở rộng tệp như .pdb (Cơ sở dữ liệu chương trình) trong Windows hoặc .dSYM (Thông tin ký hiệu DWARF) trong macOS.
Tạo ký hiệu trình gỡ lỗi
Để tạo các ký hiệu trình gỡ lỗi trong C++, bạn cần chỉ định các tùy chọn cụ thể trong quá trình biên dịch. Chúng tôi sẽ sử dụng trình biên dịch g++ làm ví dụ.
Ký hiệu gỡ lỗi nội bộ (g ++)
Để tạo bản dựng gỡ lỗi với các biểu tượng gỡ lỗi bên trong, hãy sử dụng cờ -g:
g++ -g -o my_program my_program.cpp
Lệnh này biên dịch my_program.cpp thành tệp thực thi có tên my_program với các ký hiệu gỡ lỗi bên trong.
Ký hiệu gỡ lỗi bên ngoài (g ++)
Trong trường hợp bạn muốn tạo một tệp riêng chứa các biểu tượng gỡ lỗi, bạn có thể sử dụng cờ -gsplit-dwarf:
g++ -g -gsplit-dwarf -o my_program my_program.cpp
Lệnh này biên dịch my_program.cpp thành tệp thực thi có tên my_program và tạo một tệp riêng có tên my_program.dwo chứa các ký hiệu gỡ lỗi.
Khi chia sẻ tệp nhị phân đã biên dịch của bạn cho người dùng cuối, bạn có thể xóa các ký hiệu gỡ lỗi bằng cách sử dụng lệnh strip:
strip --strip-debug my_program
Lệnh này loại bỏ các biểu tượng gỡ lỗi nội bộ, dẫn đến kích thước nhị phân nhỏ hơn trong khi vẫn giữ tệp .dwo cho mục đích gỡ lỗi khi cần.
Hãy nhớ rằng tính khả dụng và cú pháp của các tùy chọn này có thể khác nhau giữa các trình biên dịch và nền tảng khác nhau. Tham khảo tài liệu của trình biên dịch để đảm bảo sử dụng đúng các tùy chọn gỡ lỗi.