Một khi vẫn code thì nhất định sẽ sở hữu bug, một khi có bug nhất mực sẽ đề nghị fix. Nhưng để fix bug thì một năng lực không thể thiếu chính là debug. Câu hỏi debug cũng rất là solo giản, chúng ta chỉ vấn đề đặt break point và lịch trình khi chạy đến đó thì lâm thời ngừng, tiếp nối ta rất có thể kiểm tra từng giá trị hoặc chạy code từng chiếc để kiểm tra ngắn gọn xúc tích đúng tuyệt sai. Phần đông kỹ thuật cơ bản đó có thể chắn bạn bè đều thay như lòng bàn tay. Trong nội dung bài viết này, mình vẫn đề cập cho một vài kĩ thuật debug trong Visual Studio khôn cùng hữu ích tuy nhiên ít người nghe biết để tăng năng suất và sút thiểu thời hạn debug.

Bạn đang xem: Hướng dẫn debug trong visual studio

Lưu ý nhỏ là phiên bạn dạng mình đang áp dụng là Visual Studio 2019.

Mục lụcPrerequisites

Để bắt đầu, mình chế tạo ra một project console app dễ dàng và đơn giản để dễ ợt minh họa cho đông đảo gì mình sắp đến trình bày. Trong khúc code phía dưới mình chế tạo ra một model Student, hàm AddSampleData để tạo ra một List có có đôi mươi người một giải pháp ngẫu nhiên, các bạn không cần quá bận lòng tới hàm này làm cho gì. Mình sẽ tập trung vào việc debug vào Visual Studio. Sau cuối tại hàm Main, mình sẽ in ra danh sách những sinh viên đó.

using System;using System.Collections.Generic;namespace VisualStudioDebugging{ public class Student public string Name get; set; public int Score get; set; class Program { static void Main(string<> args) var students = AddSampleData(); foreach (var student in students) Console.WriteLine($"student.Name"s score is student.Score"); Console.ReadKey(); static list AddSampleData() { Random r = new Random(); var students = new List(); string<> firstNames = new string<10> "Mary", "Sohpie", "Micheal", "Peter", "Wisely", "Louis", "Alex", "Hannah", "Emily", "Miley" ; string<> lastNames = new string<10> "Rooney", "Ferguson", "Peterson", "Hoge", "Stam", "Park", "Adams", "Oliver", "Cain", "Johanson" ; for (int i = 0; i Nếu chúng ta run thử, output đầu ra của đoạn code trên đa phần như sau, gồm đôi mươi dòng ứng với đôi mươi người.

Emily Adams"s score is 4Wisely Rooney"s score is 5Emily Park"s score is 0...Wisely Hoge"s score is 8Phần cài đặt như vậy là xong, ta bước đầu tìm đọc từng kĩ thiệt debug.

Debug programmatically

Bình thường bạn có nhu cầu debug thì rất dễ dàng và đơn giản muốn chương trình dừng ở đâu, bạn sẽ đặt breakpoint tại loại đó, tuy nhiên có một từ thời điểm cách đây là chúng ta cũng có thể dừng chương trình bằng code tương đương Javascript. Ví như sau:

...static void Main(string<> args) var students = AddSampleData(); Debugger.Break(); foreach (var student in students) Console.WriteLine($"student.Name"s score is student.Score"); Console.ReadKey();...Chương trình sẽ tạm dừng ở mẫu Debugger.Break() cơ mà không đề nghị đặt breakpoint. Mặc dù chỉ khi ở cơ chế debug thì chương trình mới tạm dừng ở loại đó, còn bình thường thì sẽ không chạy vào. Tuy vậy sau khi kết thúc việc rồi thì ta bắt buộc xóa nó đi. Một chức năng nữa cũng có ích của C# sẽ là hiển thị log ra cửa sổ Output nhằm tiện theo dõi. Lấy một ví dụ ta hy vọng xem chương trình đã chạy vào hàm AddSampleData chưa và tất cả chạy đúng hy vọng muốn, ta sẽ thử in ra thương hiệu của sinh viên đầu tiên trong danh sách. Ta sẽ thêm Debug.WriteLine vào trước cái trả về quý hiếm students.

...static danh sách AddSampleData() ... Debug.WriteLine("First student"s name: " + students<0>.Name); return students;...

*
Khi công tác chạy ta đã thấy đoạn thông báo trong cửa ngõ số output đầu ra của Visual Studio.

Conditional breakpoints

Conditional breakpoints là một tính năng vô cùng bắt buộc thiết, nhất là lúc ta phải làm việc với một list rất dài. Trong lấy ví dụ như ta chỉ có 20 sinh viên, nhưng mà thử tưởng tượng ta yêu cầu dừng debug với bản ghi của sv bị điểm 0 trong danh sách 1000 sinh viên, trường hợp ta cứ debug chạy từng dòng trong vòng for để tìm thì sẽ hết sức tốn thời gian nếu không thích nói là gần như bất khả thi. Thật may ta có thể đặt debug trong khoảng for cùng với đk như sau.

Xem thêm: Lời Bài Hát Long Phụng Sum Vầy ”, Lời Bài Hát Ngày Xuân Long Phụng Sum Vầy

*

Ta để debug tại loại 21 sau đó nhấp chuột phải và chọn Conditions… sau đó popup màu quà nhạt vẫn hiện ra, ta sẽ đặt điều kiện y như trên hình. Khi ấy chương trình đang dừng trên từng bạn dạng ghi của sinh viên bao gồm điểm số bằng 0. (Nếu bạn làm theo code của bản thân mình mà không thấy dừng ở bản ghi nào, có thể hàm random vô tình không tạo ra sinh viên nào bao gồm điểm số bởi 0, bạn hãy thử chạy lại). Vào popup này ta có thể đặt điều kiện theo Hit Count hoặc là Filter nữa, và còn một mục là Actions các chúng ta cũng có thể tự khám phá thêm.

Immediate Window

Giả sử nhiều người đang debug dở, chương trình đang hoạt động đến sau chiếc AddSampleData() cùng bạn đang xuất hiện một list list gồm đôi mươi sinh viên. Vì một lý do gì đó, bạn có nhu cầu thêm một fan nữa vào list để test, khôn cùng nhiều bạn sẽ dừng debug và quay trở về sửa code. Với ví dụ trên thì không sự việc gì, tuy vậy thử tưởng tượng phía trên là 1 phần của chương trình rất lớn, những lần debug các bạn phải build lại rất mất thời gian hoặc các bạn đã mất nhiều sức lực lao động để điền tỉ mỉ nhiều trường trong form với POST lên server, nếu đề xuất dừng debug để trở về điền khung là nỗi kinh hoàng, đặc biệt là khi các bạn phải lặp đi lặp lại thao tác này.

Mình đã từng tốn nhiều thời hạn như vậy cho đến khi biết có phương pháp để update quý hiếm ngay tại thời khắc debug. Đó là dùng hành lang cửa số Immediate Window. Nếu như bạn chưa thấy cửa ngõ số này thì bạn cũng có thể bật tại Debug -> Windows -> Immediate hoặc ấn Ctrl + alt + I.

*

Nếu bạn làm theo từ đầu cho giờ thì đoạn code sẽ hệt như trên, các bạn ấn F5 để chương trình dựng chân lại tại dòng Debugger.Break(), lúc này biến students đang có list gồm trăng tròn người. Ở hành lang cửa số Immediate Window bạn chỉ bài toán gõ

students.Add(new Student Name = "Bill Gates", Score = 9 )Sau đó bạn soi lại thay đổi students, bạn sẽ thấy các bạn đã thêm thành công 1 sinh viên và list hiện ra Output sẽ sở hữu được là 21 người. Thực sự đó là một biện pháp rất nhân thể để thử nghiệm dữ liệu trong lúc debug mà chúng ta nên biết. Lúc biết được chuyên môn này, vào từng ngôi trường hợp cầm cố thể, các các bạn sẽ tự biết phương pháp để áp dụng sao cho tác dụng nhất.

Edit and Continue

Nếu như Immediate Window giúp ta sửa tài liệu tại thời khắc debug thì chức năng Edit và Continue của Visual Studio đỡ đần ta sửa cùng chạy code ngay tại thời gian debug.

Để thử tính năng ta sẽ cập nhật logic code một chút.

...foreach (var student in students) if (student.Score > 5) Console.WriteLine($"student.Name"s score is student.Score, the grade is student.Grade"); ....Với đk trên, ta sẽ chỉ in ra hầu như sinh viên có điểm lớn hơn 5. Mang sử ta đã debug đến loại lệnh if và ta chợt muốn thử cùng với trường hợp chỉ in ra đầy đủ sinh viên gồm điểm to hơn 8. Một lần nữa, phần lớn developer đang dừng debug và update lại code thành lớn hơn 8. Thực tiễn ta không cần thiết phải làm vậy, cùng với chương trình mập và đề nghị nhiều công sức của con người để debug đến đây, vấn đề run lại code sẽ khá mất thời gian, nuốm vào đó ta chỉ cần sửa trực tiếp tại thời gian đang debug. Update câu lệnh if thành như sau

if (student.Score > 8)sau đó Save lại với run tiếp, ta thấy output chỉ ra sẽ là danh sách những sinh viên có điểm lớn hơn 8.

*
Nếu bạn không thể Edit code trong khi Debug, hãy vào Tools -> Options để bật chức năng này lên

Lưu ý là bài toán Edit rồi Debug tiếp chỉ có hiệu lực hiện hành với các câu lệnh logic. Khi chúng ta update mã sản phẩm hay chuyển đổi parameter của hàm thì vẫn nên build lại nhé.

Summary

Trong bài viết này tôi đã trình bày một số kỹ thuật hữu ích khi debug vào Visual Studio nhưng mà ít người xem xét đến. Mong muốn giúp cho các bạn dễ dàng hơn trong bài toán debug, một công việc khá tốn thời gian và mệt nhọc mỏi. Tất yếu Visual Studio còn tương đối nhiều kỹ thuật debug cao cấp khác như debug Nuget packet hay remote debugging, nhưng cá thể mình thấy hiếm hoi khi mình đề nghị dùng đến, nếu như khách hàng nào tò mò hoàn toàn có thể Google nhằm tiếp tục khám phá thêm.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *