Tìm hiểu về trình gỡ lỗi .NET trong Visual Studio Code
Trong đơn vị trước, bạn đã học được rằng trình gỡ lỗi giúp bạn kiểm soát việc thực hiện chương trình của bạn và quan sát trạng thái của nó. Trong phần này, bạn sẽ tìm hiểu cách thực hiện cả hai tác vụ đó trong Visual Studio Code.
Hãy bắt đầu bằng cách tìm hiểu cách đặt cấu hình trình gỡ lỗi Visual Studio Code để sử dụng với .NET.
Đặt cấu hình Mã Visual Studio để gỡ lỗi .NET
Lần đầu tiên mở tệp C# trong Visual Studio Code, bạn sẽ nhận được lời nhắc cài đặt tiện ích mở rộng được đề xuất cho C#.
Visual Studio Code sẽ cài đặt phần mở C# và hiển thị lời nhắc bổ sung để thêm tài sản bắt buộc để xây dựng và gỡ lỗi dự án của bạn.
Ghi
Hỗ trợ ngôn ngữ C# trong Visual Studio Code là một bản cài tùy chọn từ Marketplace. Mã Visual Studio sẽ tự động nhắc bạn cài đặt phần mở rộng này khi bạn mở tệp C# nếu bạn chưa cài đặt. Nếu bạn gặp sự cố khi xây dựng hoặc gỡ lỗi ứng dụng .NET trong Mã Visual Studio, bạn nên kiểm tra xem dự án của bạn có các tài sản bắt buộc cho hỗ trợ ngôn ngữ C#.
Điểm ngắt
Như bạn đã học được trong đơn vị trước, trình gỡ lỗi giúp bạn phân tích và kiểm soát việc thực hiện chương trình của bạn. Khi bạn khởi động trình gỡ lỗi Mã Visual Studio, trình gỡ lỗi sẽ ngay lập tức bắt đầu thực thi mã của bạn. Vì mã của bạn được thực thi nhanh chóng, bạn cần phải tạm dừng chương trình trên bất kỳ câu lệnh nào. Bạn sẽ sử dụng điểm để thực hiện điều đó.
Bạn có thể thêm điểm ngắt trong Mã Visual Studio bằng cách bấm vào bên trái của số dòng trên dòng bạn muốn ngắt. Bạn sẽ thấy một vòng tròn màu đỏ sau khi điểm ngắt được bật. Để loại bỏ, hãy chọn vòng tròn màu đỏ một lần nữa.
Nếu bạn bấm chuột phải để thêm điểm ngắt, bạn cũng có thể chọn thêm điểm thêm điểm ngắt có điều kiện. Loại điểm ngắt đặc biệt này cho phép bạn nhập một điều kiện để thực hiện phá vỡ. Điểm ngắt này sẽ chỉ hoạt động khi đáp ứng điều kiện đã xác định. Bạn cũng có thể sửa đổi một điểm ngắt hiện có bằng cách bấm chuột phải vào điểm ngắt đó và chọn Sửa Điểm.
Tổng quan về trình gỡ lỗi Mã Visual Studio
Sau khi bạn đã thiết lập các điểm ngắt và khởi động ứng dụng, các bảng thông tin và điều khiển mới sẽ xuất hiện trên màn hình.
- Điều khiển khởi chạy trình gỡ lỗi
- Trạng thái biến số
- Trạng thái các biến được theo dõi
- Ngăn xếp cuộc gọi hiện tại
- Điểm ngắt
- Điều khiển thực thi
- Bước thực hiện hiện tại
- Bảng điều khiển gỡ lỗi
Điều khiển khởi chạy trình gỡ lỗi
Ở đầu thanh bên, bạn có thể tìm thấy các điều khiển khởi chạy:
- Bắt đầu gỡ lỗi.
- Chọn cấu hình khởi chạy hiện hoạt.
- Chỉnh sửa
launch.jsontệp. Tạo nó nếu cần. - Mở thiết bị đầu cuối gỡ lỗi.
Xem và chỉnh sửa trạng thái biến số của bạn
Khi bạn phân tích một lỗi chương trình gây ra, xem trạng thái biến của bạn để tìm kiếm những thay đổi không mong muốn. Bạn có thể sử dụng biến số bảng điều khiển để thực hiện điều đó.
Các biến của bạn được hiển thị được sắp xếp theo phạm vi:
- Biến cục bộ: Có thể truy nhập trong phạm vi hiện tại, thường là hàm hiện tại.
- Biến toàn cầu: Có thể truy cập từ mọi nơi trong chương trình của bạn. Các đối tượng hệ thống từ thời gian chạy JavaScript cũng được bao gồm, vì vậy đừng ngạc nhiên nếu bạn thấy rất nhiều nội dung trong đó.
- Biến đóng: Có thể truy cập từ đóng hiện tại, nếu có. Việc đóng sẽ kết hợp phạm vi cục bộ của hàm với phạm vi của hàm bên ngoài thuộc về hàm đó.
Bạn có thể mở rộng phạm vi và biến bằng cách chọn mũi tên. Khi bạn mở các đối tượng, bạn có thể thấy tất cả các thuộc tính được xác định trong đối tượng.
Bạn có thể thay đổi giá trị của biến số một cách nhanh chóng bằng cách bấm đúp vào biến số.
Bằng cách di chuột qua tham số hàm hoặc biến số trực tiếp trong cửa sổ trình soạn thảo, bạn cũng có thể xem nhanh giá trị của nó.
Xem các biến
Bạn có thể tẻ nhạt khi tìm kiếm trạng thái biến mỗi lần bạn muốn theo dõi trạng thái đó qua thời gian hoặc các hàm khác nhau. Đó là nơi mà bảng Watch sẵn dùng.
Bạn có thể chọn Dấu cộng để nhập tên biến hoặc biểu thức cần xem. Ngoài ra, bạn có thể bấm chuột phải vào một biến trong pa-nen Biến rồi chọn Thêm vào xem.
Tất cả các biểu thức bên trong bảng điều khiển đồng hồ đều được cập nhật tự động khi mã của bạn chạy.
Ngăn xếp cuộc gọi
Mỗi khi chương trình của bạn nhập một hàm, một mục nhập sẽ được thêm vào ngăn xếp cuộc gọi. Khi ứng dụng của bạn trở nên phức tạp và bạn có chức năng được gọi trong nhiều chức năng nhiều lần, ngăn xếp cuộc gọi đại diện cho đường mòn của các cuộc gọi chức năng.
Thật hữu ích khi tìm nguồn gốc của một ngoại lệ. Nếu gặp sự cố bất ngờ trong chương trình, bạn sẽ thường thấy nội dung nào đó trong bảng điều khiển như ví dụ sau:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9
Nhóm các đường kẻ at [...] bên dưới thông báo lỗi được gọi là một dấu vết ngăn xếp. Dấu vết ngăn xếp cung cấp tên và nguồn gốc của mọi hàm được gọi trước khi kết thúc với ngoại lệ. Có thể hơi khó để giải mã, vì nó cũng bao gồm các chức năng nội bộ từ .NET runtime.
Đó là nơi Mà Visual Studio Code có ngăn xếp cuộc gọi có sẵn. Nó lọc ra thông tin không mong muốn để chỉ hiển thị cho bạn các chức năng liên quan từ mã của riêng bạn theo mặc định. Sau đó bạn có thể thư giãn ngăn xếp cuộc gọi này để tìm ra nơi ngoại lệ bắt nguồn từ đó.
Pa-nen điểm ngắt
Trong ngăn điểm, bạn có thể xem và chuyển đổi tất cả các điểm ngắt mà bạn đã đặt trong mã của mình. Bạn cũng có thể chuyển đổi các tùy chọn để phá vỡ các ngoại lệ bị bắt hoặc ngoại lệ không nghịch ngợm. Bạn có thể sử dụng điểm ngắt bảng để kiểm tra trạng thái chương trình của bạn và theo dõi lại nguồn của một ngoại lệ bằng cách sử dụng ngăn xếp ngăn xếp cuộc khi xảy ra.
Thực hiện điều khiển
Bạn có thể kiểm soát dòng thực thi của chương trình bằng cách sử dụng các điều khiển này.
Từ trái sang phải, các điều khiển là:
- tiếp tục hoặc tạm dừng thực hiện: Nếu việc thực hiện bị tạm dừng, nó sẽ tiếp tục cho đến khi điểm dừng tiếp theo được nhấn. Nếu chương trình của bạn đang chạy, nút này sẽ chuyển sang nút tạm dừng mà bạn có thể sử dụng để tạm dừng thực thi.
- bước trên: Thực thi câu lệnh mã tiếp theo trong ngữ cảnh hiện tại.
-
Bước vào: Giống như Bước qua, nhưng nếu câu lệnh tiếp theo là lệnh hàm, hãy chuyển sang câu lệnh mã đầu tiên của hàm này (giống như lệnh
step). -
Bước ra: Nếu bạn đang ở trong một hàm, hãy thực thi mã còn lại của hàm này và quay lại câu lệnh sau lệnh gọi hàm ban đầu (giống như lệnh
out). - khởi động: Khởi động lại chương trình của bạn từ đầu.
- Dừng: Kết thúc thực thi và thoát trình gỡ lỗi.
Sử dụng bảng điều khiển gỡ lỗi
Bạn có thể hiển thị hoặc ẩn bảng điều khiển gỡ lỗi bằng cách chọn Ctrl+Shift+Y cho Windows và Linux. Chọn Cmd+Shift+Y for Mac. Bạn có thể sử dụng bảng điều khiển gỡ lỗi để trực quan hóa nhật ký bảng điều khiển ứng dụng của mình. Bạn cũng có thể sử dụng nó để đánh giá các biểu thức hoặc thực thi mã trong nội dung thực thi hiện tại, chẳng hạn như các lệnh hoặc tên biến trong trình gỡ lỗi .NET tích hợp sẵn.
Bạn có thể nhập biểu thức .NET vào trường nhập ở cuối bảng điều khiển gỡ lỗi, sau đó chọn Enter để định trị. Kết quả hiển thị trực tiếp trong bảng điều khiển.
Bằng cách sử dụng bảng điều khiển gỡ lỗi, bạn có thể nhanh chóng kiểm tra giá trị biến, kiểm tra một hàm có các giá trị khác nhau hoặc thay đổi trạng thái hiện tại.
Ghi
Mặc dù bảng điều khiển gỡ lỗi rất hữu ích cho việc thực thi và đánh giá mã .NET, nhưng có thể hơi khó hiểu khi bạn đang cố gắng thực thi hoặc gỡ lỗi ứng dụng .NET Console vì bảng điều khiển gỡ lỗi không chấp nhận đầu vào thiết bị đầu cuối cho chương trình đang chạy.
Để xử lý đầu vào thiết bị đầu cuối trong khi gỡ lỗi, bạn có thể sử dụng các thiết bị đầu cuối tích hợp (một trong các cửa sổ Visual Studio Code) hoặc một thiết bị đầu cuối bên ngoài. Đối với hướng dẫn này, bạn sử dụng thiết bị đầu cuối tích hợp.
Mở .vscode/launch.json.
Thay đổi thiết đặt
consoleđổi thànhintegratedTerminaltừ:"console": "internalConsole",Đến:
"console": "integratedTerminal",Lưu các thay đổi của bạn.
Trong đơn vị tiếp theo, bạn sẽ tìm hiểu cách sử dụng trình gỡ lỗi để khắc phục lỗi trong mã Fibonacci mà chúng tôi đã thấy trước đó.