Level 620 bài
Undefined Behavior và C chuyên sâu
Phân biệt lập trình viên C nghiệp dư với chuyên nghiệp.
Chương 33. Undefined Behavior
UB, unspecified, implementation-defined, strict aliasing.
- 33.1Bốn mức hành vi trong chuẩn CUndefined, unspecified, implementation-defined, locale-specific, và vì sao phải phân biệt.26 phút
- 33.2Vì sao UB nguy hiểm hơn chương trình sậpTrình biên dịch được phép giả định UB không xảy ra, nên nó xóa luôn mã kiểm tra của bạn.30 phút
- 33.3Mười sáu hành vi không xác định phải thuộcBảng tra đầy đủ, mỗi mục kèm mã chạy được và cách sửa đúng.32 phút
- 33.4Tràn số và cách kiểm tra đúngVì sao if (x + 1 < x) không chạy, và ba cách viết đúng.28 phút
- 33.5Điểm tuần tự và thứ tự đánh giái = i++ + ++i và những biểu thức không ai nên viết.26 phút
- 33.6Strict aliasingĐọc bit của float bằng ép con trỏ là sai, và ba cách đúng.30 phút
- 33.7Implementation-defined và unspecifiedsizeof(int), char có dấu hay không, và những thứ khác nhau giữa các máy.24 phút
Chương 34. Memory Debugging
Valgrind, AddressSanitizer, UndefinedBehaviorSanitizer.
- 34.1Bốn công cụ và khi nào dùng cái nàoGDB, Valgrind, AddressSanitizer, UndefinedBehaviorSanitizer: mỗi cái bắt loại lỗi khác nhau.24 phút
- 34.2AddressSanitizerBắt tràn bộ đệm, use-after-free, double free và rò rỉ, nhanh hơn Valgrind mười lần.30 phút
- 34.3UndefinedBehaviorSanitizerBắt tràn số có dấu, dịch bit sai, chia cho không, con trỏ lệch căn chỉnh.26 phút
- 34.4Valgrind và bốn loại rò rỉdefinitely lost, indirectly lost, possibly lost, still reachable.28 phút
- 34.5Năm nguyên nhân của lỗi phân đoạnNULL, ngoài biên xa, ghi vào vùng chỉ đọc, tràn ngăn xếp, dùng sau khi giải phóng.28 phút
- 34.6Lab: săn mười lỗi trong một tệpMột tệp bugs.c có mười lỗi đánh số, tìm hết bằng công cụ chứ không đọc mã.32 phút
Chương 35. GDB
Điểm dừng, bước chạy, xem bộ nhớ, watchpoint, backtrace.
- 35.1Biên dịch để gỡ lỗi và khởi động GDBCờ -g, -g3, -O0, và năm cách nạp chương trình vào GDB.22 phút
- 35.2Điểm dừng và điều khiển luồng chạybreak, tbreak, điểm dừng có điều kiện, next, step, finish, until.28 phút
- 35.3Xem dữ liệu: print, x và ptypeIn biến, in mảng, in theo định dạng, và đọc bộ nhớ thô.30 phút
- 35.4Gỡ lỗi con trỏ và cấu trúc dữ liệuĐi theo chuỗi con trỏ, duyệt danh sách liên kết bằng vòng lặp trong GDB.28 phút
- 35.5Watchpoint, vũ khí mạnh nhất của GDBDừng đúng dòng đã ghi đè lên biến, kèm giá trị cũ và giá trị mới.26 phút
- 35.6Quy trình sáu bước và tệp .gdbinitTừ tái hiện lỗi tới viết kiểm thử hồi quy, và cách cấu hình GDB một lần cho mãi mãi.24 phút
- 35.7Project: báo cáo săn lỗiMột dự án C có mười lăm lỗi, nộp báo cáo, bản vá, bằng chứng và bộ kiểm thử hồi quy.32 phút