Lập trình viên Farid Zakaria vừa giới thiệu bản nâng cấp của Rewind VM, một máy ảo "tất định" chạy trên nền Nix. Mỗi lần build đều cho kết quả giống hệt nhau, kể cả thứ tự các luồng xử lý.

Lỗi race condition là gì?

Hãy tưởng tượng hai nhân viên ngân hàng cùng cộng tiền vào một tài khoản. Nếu người này đọc số dư trước khi người kia ghi xong, một khoản tiền gửi sẽ biến mất. Đó chính là race condition, loại lỗi cực khó tái hiện vì chỉ xảy ra ở một số lần chạy. Trong thử nghiệm của tác giả, chương trình mẫu làm mất tiền trong 396 trên 1.000 lần chạy, nhưng khi ép chạy trên một lõi CPU thì không lần nào mất tiền trong 1.000 lần chạy.

Nix đã làm sẵn một nửa công việc

Rewind chạy lại bản build với nhiều lịch trình khác nhau, rồi chỉ ra chính xác bước khiến chương trình thất bại. Với ví dụ trên, công cụ mất 11 giây để xác định bước 3237 là thủ phạm. Điều thú vị là các tính năng mới như bảng mã nguồn, điểm đánh dấu hay hỗ trợ gdb đều dễ làm, vì Nix đã quản lý sẵn đầu vào, ký hiệu gỡ lỗi và mã nguồn của mọi thư viện.