Trang chủ » Thủ thuật debug trong Visual Studio (Phần 2)
Thủ thuật

Thủ thuật debug trong Visual Studio (Phần 2)

Các lập trình viên một ngày có thể viết hàng nghìn dòng code để tạo ra 1 phần mềm hay chương trình nào đó, và tất nhiên code không chạy theo đúng ý muốn là việc khó tránh khỏi. Tuy nhiên debugging đã giúp họ có thể nhẹ nhõm hơn trong việc hiệu chỉnh, chỉnh sửa lỗi. Vậy debug là gì, và sử dụng nó như thế nào trong Visual Studio?

Xin chào mọi người! Ở phần trước mình đã cùng nhau tìm hiểu khái niệm Debugging, Debugger trong Visual Studio cũng như những thủ thuật trong việc debug. Phần này mình sẽ tiếp tục đưa ra những thủ thuật trong việc debug của Visual Studio nhé!

difficult to debug
Rất khó để có thể debug thành thạo

Breakpoint Settings

Chắc bạn đã quá quen thuộc với việc bấm F10 liên tục để vòng lặp chạy đến item cần debug, hay những ai lập trình đa luồng (multi thread) sẽ hiểu độ cù nhây, khó khăn của việc xác định thread nào đang có vấn đề. May mắn thay, VS hỗ trợ 1 tính năng cực kì hay chính là Breakpoint Settings, cho phép ta tuỳ chỉnh các thiết đặt của breakpoint như điều kiện (Conditions), hành động (Actions). Để sử dụng tính năng này, bạn chỉ việc rê chuột vào breakpoint cần thiết đặt, và chọn vào Settings…

breakpoint setting
Khi chọn sẽ xuất hiện một popup như thế này.

Ở mục Conditions, ta có thể lựa:

  • Conditional Expression: kiểm tra xem nếu điều kiện đúng (Is true) hoặc giá trị thay đổi (Has changed) thì tiến hành việc debug.
  • Hit Count: kiểm tra số lần chạy tới dòng breakpoint. Bạn sẽ không còn gặp cảnh bấm F10 cả trăm lần chỉ để vòng lặp chạy đến item thứ 20 của mảng :v.
  • Filter: cho phép kiểm tra các trường ThreadId, ThreadName, ProcessId, ProcessName, MachineName. Điều này sẽ cực kì hiệu quả nếu bạn đang lập trình đa luồng.

Mục Actions cho phép ta log message ra ngoài Output Window, ngoài ra Continue execution cho phép Debugger không dừng chương trình của mình lại (Tracepoints – thể hiện bằng nút breakpoint hình thoi, thay vì hình tròn). Đây là 1 tính năng rất hay vì nó cho phép ta log các biến ra ngoài cửa sổ Output Window mà mình vẫn có thể tiếp tục thực hiện các thao tác khác.

breakpoint tracepoint
Biến decodedType đã được log ra ngoài Output Window.

PerfTips và Diagnostic Tools

Chương trình của bạn chạy thành công, nhưng bạn cảm thấy nó phản hồi rất chậm mỗi lần thực thi việc gì đó, hay đơn cử là bạn muốn cải thiện hiệu suất của chương trình? Trước đây để đo được thời gian chạy trong 1 chương trình hay vài đoạn code nào đó, ta thường hardcoded bằng cách đặt các Timer ở vị trí bắt đầu và kết thúc của phần code muốn kiểm tra tốc độ. Tuy nhiên kể từ Visual Studio 2015 có hỗ trợ một tính năng là PerfTips (tooltips with performance information), kèm theo là Diagnostic Tools Window.

PerfTips kèm theo Diagnostic Tools Window.
PerfTips kèm theo Diagnostic Tools Window.

Ở hình trên, bên cạnh dòng code đang debug xuất hiện 1 dòng chữ nhỏ màu xám, mà khi click vào sẽ xuất hiện cửa sổ Diagnostic Tools. Dòng đó cho biết “kể từ dòng code có breakpoint đến dòng code đang được debug tốn bao nhiêu thời gian”.

perftips solution
Dùng Run to Cursor, mình phát hiện từ dòng breakpoint đến hiện tại tốn những 919 ms, phải xem lại code mới được!

Khi nhấp vào để hiển thị Diagnostic Tools Window:

diagnostic tools

  • Break Events timeline đánh dấu các breakpoint trong lúc debug. Ta có thể click vào từng ô hình thoi để xem chi tiết.
  • CPU Utilization Graph cho ta thấy được mức độ sử dụng CPU trong suốt quá trình debug.
  • Events list hiển thị chi tiết với mỗi Break event.
  • Duration time của Break Events hiển thị thời gian từ lần breakpoint trước đó đến event hiện tại.

Và còn rất nhiều công cụ khác mà mình chưa kể hết. Visual Studio thật là mạnh mẽ phải không nào? Cảm ơn mọi người đã chú ý theo dõi! Hẹn gặp lại ở những bài viết tiếp theo.

About the author

Võ Hoài Sơn

Tính tình bất định
Chọc vào là bịnh
Rất yêu lập trình
Luôn code hết mình
Mình hiện đang là sinh viên của trường ĐH Khoa học tự nhiên TPHCM. Bản thân rất thích code, kiêm luôn cả mần thơ nên thường hơi hâm hâm dở dở. Ngoài ra chém gió, chém chuối, chém trái cây các kiểu cũng là sở trường của mình. Rất mong được làm quen với các bạn :D

Add Comment