Tìm hiểu trình gỡ lỗi của bạn
Nó thực sự hữu ích để nắm bắt được trình gỡ lỗi, cho dù đó là dựa trên văn bản, IDE đầy đủ hoặc một số pha trộn của chúng. Bạn không cung cấp nhiều chi tiết vì vậy tôi sẽ mô tả trường hợp chung:
1) Điểm dừng
Ngoài việc chỉ dừng lại ở một dòng mã, nhiều trình gỡ lỗi cho phép bạn chỉ định ngắt khi có một điều kiện phát sinh (ví dụ: "x> 5"), sau khi một số lần chuyển qua mã hoặc khi một số bộ nhớ thay đổi giá trị. Điều này rất hữu ích để hiểu làm thế nào mã của bạn rơi vào trạng thái xấu, ví dụ như xem khi nào một con trỏ trở nên rỗng thay vì bắt gặp sự cố khi nó bị hủy đăng ký.
2) Bước qua mã
Bạn có thể bước vào các hàm, theo từng dòng mã, nhảy qua các dòng ('đặt câu lệnh tiếp theo') và sau đó 'lên' ra khỏi các hàm. Đó là một cách thực sự mạnh mẽ để theo dõi quá trình thực thi mã của bạn để kiểm tra xem nó có làm đúng như bạn nghĩ không :-)
3) Đánh giá biểu thức
Vì vậy, bạn có thể đặt các biến vào danh sách / cửa sổ Xem và xem giá trị của chúng thay đổi khi bạn đạt điểm dừng hoặc bước qua mã, nhưng bạn cũng thường có thể thực hiện các đánh giá biểu thức phức tạp, ví dụ: "x + y / 5" sẽ được đánh giá. Một số trình gỡ lỗi cho phép bạn đặt các lệnh gọi chức năng vào danh sách theo dõi. Bạn có thể thực hiện những việc như "time ()", "MyFunction (...)", "time ()" và nhận thời gian đồng hồ về thời gian mà chức năng của bạn mất.
4) Ngoại lệ và xử lý tín hiệu
Vì vậy, nếu ngôn ngữ của bạn hỗ trợ các ngoại lệ và / hoặc tín hiệu, bạn thường có thể định cấu hình trình gỡ lỗi để biết cách phản ứng với điều này. Một số trình gỡ lỗi cho phép bạn xâm nhập vào mã tại thời điểm ngoại lệ sắp xảy ra, thay vì sau khi nó không bị bắt. Điều này hữu ích để theo dõi các vấn đề kỳ lạ như lỗi "Không tìm thấy tệp" vì chương trình đang chạy như một tài khoản người dùng khác.
5) Gắn vào một quy trình / cốt lõi
Vì vậy, đôi khi bạn phải sử dụng trình gỡ lỗi để nhảy vào một quy trình hiện có đang diễn ra. Nếu bạn có mã nguồn gần đó và các biểu tượng gỡ lỗi vẫn còn nguyên vẹn, bạn có thể đi sâu vào như thể bạn đã bắt đầu trình gỡ lỗi ở vị trí đầu tiên. Điều này cũng tương tự đối với các bãi chứa lõi, ngoại trừ bạn thường không thể tiếp tục gỡ lỗi trong các kết xuất đó (quá trình đã chết).
Xây dựng cấu hình
Có một số biến thể xây dựng bạn có thể thực hiện thông qua bật hoặc tắt các tính năng như biểu tượng gỡ lỗi, tối ưu hóa và các cờ trình biên dịch khác:
1) Gỡ lỗi
Theo truyền thống, đây là một bản dựng đơn giản không có đặc điểm đặc biệt, giúp dễ dàng gỡ lỗi và dự đoán. Nó thay đổi một chút theo nền tảng, nhưng có thể có thêm một số phòng đầu, ví dụ như phân bổ và kích thước bộ đệm để đảm bảo độ tin cậy. Thông thường, một biểu tượng trình biên dịch như DEBUG hoặc có điều kiện ("Gỡ lỗi") sẽ xuất hiện để mã cụ thể gỡ lỗi được kéo vào. Đây thường là bản dựng được vận chuyển, với các ký hiệu cấp độ chức năng, đặc biệt là nếu độ tin cậy và / hoặc độ lặp lại là liên quan.
2) Phát hành / Tối ưu hóa bản dựng
Kích hoạt tối ưu hóa trình biên dịch cho phép một số cơ sở tạo mã cấp thấp trong trình biên dịch tạo mã nhanh hơn hoặc nhỏ hơn dựa trên các giả định về mã của bạn. Tốc độ tăng có thể không liên quan nếu lựa chọn thuật toán của bạn kém, nhưng đối với các tính toán chuyên sâu, điều này có thể tạo ra sự khác biệt thông qua Loại bỏ Subexpression và Unrolling thông thường, v.v. Đôi khi các giả định được đưa ra bởi trình tối ưu hóa không tương thích với mã của bạn và vì vậy trình tối ưu hóa phải được giảm xuống một notch. Lỗi trình biên dịch trong mã được tối ưu hóa cũng là một vấn đề trong quá khứ.
3) Xây dựng thiết bị / hồ sơ
Mã của bạn được xây dựng với mã thiết bị cụ thể để đo số lần một chức năng được gọi và thời gian sử dụng trong chức năng đó. Mã do trình biên dịch tạo ra này được viết ra ở cuối quá trình để phân tích. Đôi khi việc sử dụng một công cụ phần mềm chuyên dụng cho việc này dễ dàng hơn - xem bên dưới. Loại xây dựng này không bao giờ được vận chuyển.
4) Xây dựng an toàn / Đã kiểm tra
Tất cả các 'van an toàn' được bật thông qua các ký hiệu tiền xử lý hoặc cài đặt trình biên dịch. Ví dụ, các tham số chức năng kiểm tra macro của ASSERT, các trình lặp kiểm tra các bộ sưu tập không được sửa đổi, các hoàng yến được đưa vào ngăn xếp để phát hiện tham nhũng, phân bổ heap được chứa đầy các giá trị sentinel (0xdeadbeef là một số đáng nhớ) để phát hiện tham nhũng heap. Đối với những khách hàng gặp vấn đề dai dẳng chỉ có thể sao chép trên trang của họ, đây là một điều hữu ích.
5) Xây dựng tính năng
Nếu bạn có các khách hàng khác nhau có các yêu cầu khác nhau về sản phẩm phần mềm của mình, thì việc xây dựng cho mỗi khách hàng thực hiện các phần khác nhau khi thử nghiệm là điều phổ biến. Ví dụ: một khách hàng muốn chức năng Ngoại tuyến và một khách hàng khác chỉ muốn Trực tuyến. Điều quan trọng là kiểm tra cả hai cách nếu mã được xây dựng khác nhau.
Ghi nhật ký và truy tìm
Vì vậy, có một số báo cáo hữu ích cho printf () và sau đó viết thông tin theo dõi toàn diện, có cấu trúc vào các tệp dữ liệu khi bạn đi. Thông tin này sau đó có thể được khai thác để hiểu hành vi / đặc điểm thời gian chạy của phần mềm của bạn. Nếu mã của bạn không gặp sự cố hoặc mất một chút thời gian để repro, thật hữu ích khi có một hình ảnh ví dụ như danh sách các chủ đề, chuyển trạng thái của chúng, phân bổ bộ nhớ, kích thước nhóm, bộ nhớ trống, số lần xử lý tệp, v.v. thực sự phụ thuộc vào kích thước, độ phức tạp và yêu cầu hiệu năng của ứng dụng của bạn, nhưng ví dụ, các nhà phát triển trò chơi muốn đảm bảo rằng không có "đột biến" trong việc sử dụng CPU hoặc bộ nhớ trong khi trò chơi đang diễn ra vì điều đó có thể sẽ ảnh hưởng đến tốc độ khung hình. Một số thông tin này được duy trì bởi hệ thống, một số bởi các thư viện và phần còn lại bởi mã.
Các công cụ khác
Không phải lúc nào bạn cũng phải tạo một bản dựng khác để bao quát các tình huống này: một số khía cạnh có thể được chọn trong thời gian chạy thông qua cấu hình quy trình (thủ thuật Windows Registry), làm cho các thư viện thay thế có mức độ ưu tiên cao hơn cho các thư viện tiêu chuẩn, ví dụ như đường dẫn trình tải hoặc sử dụng ICE phần mềm hoặc trình gỡ lỗi chuyên dụng để thăm dò phần mềm của bạn để biết các đặc điểm thời gian chạy (ví dụ: Intel v-Tune). Một số trong số này có chi phí lớn, một số là miễn phí - dtrace, công cụ Xcode.