Gỡ lỗi là quá trình tìm kiếm các nguyên nhân gây ra tác động không mong muốn cho chương trình, rất cần thiết để theo dõi và phân tích một phần mềm; hoặc giúp ta tìm hiểu rõ ràng quá trình hoạt động của một chương trình đồng thời có thể tìm kiếm lỗ hổng
chương trình. Nếu chúng ta có mã nguồn của chương trình, điều đó sẽ giúp ta gỡ rối rất mạnh mẽ. Tuy nhiên, thực tế dịch ngược mã nguồn, ta không có mã nguồn mà phải sử dụng một trình gỡ rối để thực hiện tìm hiểu lỗi không mong muốn, và trong trường hợp này, đa số các tập tin phải gỡ lỗi trong chế độ assembly. Trình gỡ rối là những chương trình thông thường được đính kèm với một tiến trình khác và có thể điều khiển toàn bộ nó. Trình gỡ lỗi có tính năng dễ cài đặt và sử dụng, bởi vì nó đơn thuần là một chương trình chạy trên hệ thống.
Các kỹ thuật trong debugging
Phân tích tĩnh: Trong tĩnh phân tích, cũng được gọi là phân tích dòng dữ liệu tĩnh, mã nguồn được phân tích (mã nguồn của chương trình đã được disassembly và thể hiện ở dạng hợp ngữ) để có được một số các luồng xử lý quan trọng trọng của chương trình. Điều này sẽ cho cho ta phát hiện các luồng xử lý của chương trình từ đó tùy thuộc mục đích của người dịch ngược mã nguồn quyết định xử lý tìm kiếm thông tin từ những luồn nào. Bằng cách phân tích tĩnh ban đầu, ta có thể có cái nhìn tổng quát về chương trình và có được rất nhiều thông tin quan trọng từ bên trong chương trình.
Phân tích động: Sau khi có được thông tin từ phân tích tĩnh, ta có thể hiểu sâu hơn quá trình thực thi của chương trình khi nó được thực thi. Kỹ thuật gỡ rối này sẽ cho ta hiểu sâu sắc hơn về mã nguồn của chương trình.
Ngoài ra để phân tích mã nguồn của chương trình, các trình gỡ lỗi cũng cung cấp các các thức đặt các điểm dừng (breakpoints – khi chương trình gặp một đoạn code mà đã được đặt breakpoint thì nó sẽ tự động dừng và chờ các điều khiển tiếp). Có nhiều kiểu breakpoint như breakpoint cứng, breakpoint mềm…
Xét về phương diện của những người viết chương trình (không phải là các chương trình dạng chia sẻ), đặc biệt các chương trình cao cấp, họ luôn tìm cách bảo vệ mã nguồn và bảo vệ sự thực các tiến trình trong chương trình của họ. Trong đó chống gỡ rối là một kỹ thuật chống phân tích phổ biến được sử dụng bởi các phần mềm có ý định chống dịch ngược, kỹ thuật này giúp cho các phần mềm có thể ngăn chặn hoặc cản chở tối đa việc gỡ lỗi của hệ điều hành. Những người tạo ra phần mềm biết rằng các nhà phân tích phần mềm sử dụng gỡ rối để tìm ra cách nguyên lý hoạt động của phần mềm, và các kỹ thuật chống gỡ rối sẽ cố gắng để làm chậm quá trình phân tích càng nhiều càng tốt. Một khi phần mềm nhận ra rằng nó đang chạy trong một trình gỡ lỗi, nó có thể làm thay đổi con đường thực thi mã bình thường hoặc thay đổi mã để gây ra một sự cố, do đó để can thiệp và hiểu được nó các nhà phân tích sẽ phải tốn thêm thời gian, chi phí và công sức.