Làm cách nào để bạn sử dụng Cửa sổ tức thì trong Visual Studio?


121

Cửa sổ ngay lập tức là một công cụ vô cùng hữu ích để gỡ lỗi các ứng dụng. Nó có thể được sử dụng để thực thi các câu lệnh hợp lệ trong ngữ cảnh của một điểm ngắt và kiểm tra các giá trị. Tôi cũng sử dụng nó để nhập các đoạn mã nhằm tìm hiểu các tính năng của ngôn ngữ.

Làm thế nào để bạn sử dụng Cửa sổ ngay lập tức?


Nếu bạn đề cập đến việc đưa ra các lệnh Visual Studio riêng lẻ thì hãy xem [Cửa sổ tức thì] [1] để biết các ví dụ. Điều đó cho thấy cách đánh giá các biểu thức, thực thi các câu lệnh, in giá trị biến, v.v. thông qua cửa sổ ngay lập tức. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper

2
Có một số lệnh đặc biệt mà khó có thể tìm thấy danh sách. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Có sẵn một số sức mạnh của windbg. Được sử dụng để có thể, cho một địa chỉ, tìm biểu tượng gần nhất. (ln) Tôi nghĩ điều đó đã tắt một cách ngu ngốc. Tôi muốn có lệnh dt của windbg để hiển thị các kiểu trong cấu trúc, v.v. Ít nhất bạn có thể nhập một biến đối tượng để nhận tất cả các thành viên trong danh sách với các giá trị của chúng. (chứ không phải cố gắng để chơi một nút mở gần một trò chơi nút.)
kalbr

đối với Visual Studio 2017, liên kết đến tài liệu liên quan là docs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

Câu trả lời:


130

Một tính năng thú vị của Cửa sổ ngay lập tức trong Visual Studio là khả năng đánh giá giá trị trả về của một phương thức, đặc biệt nếu nó được gọi bằng mã khách hàng của bạn nhưng nó không phải là một phần của phép gán biến. Trong chế độ Gỡ lỗi, như đã đề cập, bạn có thể tương tác với các biến và thực thi các biểu thức trong bộ nhớ, điều này đóng một vai trò quan trọng để có thể thực hiện điều này.

Ví dụ: nếu bạn có một phương thức tĩnh trả về tổng của hai số như:

private static int GetSum(int a, int b)
{
    return a + b;
}

Sau đó, trong Cửa sổ ngay lập tức, bạn có thể nhập như sau:

? GetSum(2, 4)
6

Như bạn có thể thấy, điều này thực sự hiệu quả đối với các phương thức tĩnh. Tuy nhiên, nếu phương thức không phải là static thì bạn cần phải tương tác với một tham chiếu đến đối tượng mà phương thức đó thuộc về.

Ví dụ: giả sử đây là lớp của bạn trông như thế nào:

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

Nếu đối tượng đã tồn tại trong bộ nhớ và nó nằm trong phạm vi, thì bạn có thể gọi nó trong Cửa sổ ngay lập tức miễn là nó đã được khởi tạo trước điểm ngắt hiện tại của bạn (hoặc, ít nhất, trước khi mã bị tạm dừng trong chế độ gỡ lỗi):

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

Ngoài ra, nếu bạn muốn tương tác và kiểm tra phương pháp trực tiếp mà không cần dựa vào phiên bản hiện có trong bộ nhớ, thì bạn có thể khởi tạo phiên bản của riêng mình trong Cửa sổ ngay lập tức:

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

Bạn có thể thực hiện thêm một bước và tạm thời gán kết quả của phương pháp cho các biến nếu bạn muốn thực hiện thêm các đánh giá, tính toán, v.v.:

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

Hơn nữa, nếu bạn thậm chí không muốn khai báo tên biến cho một đối tượng mới và chỉ muốn chạy một trong các phương thức / hàm của nó thì hãy làm như sau:

? new Foo().GetMessage()
"hello" 

Một cách rất phổ biến để xem giá trị của một phương thức là chọn tên phương thức của một lớp và thực hiện 'Thêm theo dõi' để bạn có thể thấy giá trị hiện tại của nó trong cửa sổ Xem. Tuy nhiên, một lần nữa, đối tượng cần được khởi tạo và nằm trong phạm vi để một giá trị hợp lệ được hiển thị. Điều này ít mạnh hơn và hạn chế hơn nhiều so với việc sử dụng Cửa sổ ngay lập tức.

Cùng với các phương pháp kiểm tra, bạn có thể làm các phương trình toán học đơn giản:

? 5 * 6
30

hoặc so sánh các giá trị:

? 5==6
false
? 6==6
true

Dấu chấm hỏi ('?') Là không cần thiết nếu bạn đang ở trực tiếp trong Cửa sổ ngay lập tức nhưng nó được đưa vào đây để rõ ràng (để phân biệt giữa biểu thức được nhập vào so với kết quả.) Tuy nhiên, nếu bạn đang ở trong Cửa sổ lệnh và cần để thực hiện một số công việc nhanh chóng trong Cửa sổ ngay lập tức, sau đó đặt trước câu lệnh của bạn bằng '?' và bạn đi.

Intellisense hoạt động trong Cửa sổ ngay lập tức , nhưng đôi khi nó có thể hơi mâu thuẫn. Theo kinh nghiệm của tôi, nó dường như chỉ khả dụng ở chế độ Gỡ lỗi, nhưng không có trong thiết kế, chế độ không gỡ lỗi.

Thật không may, một nhược điểm khác của Cửa sổ ngay lập tức là nó không hỗ trợ các vòng lặp.


1
Làm thế nào để bạn tìm thấy cửa sổ ngay lập tức?
jpaugh

1
Ctrl + Alt + Ihoặc Gỡ lỗi -> Windows -> Ngay lập tức
Ray

11

Sử dụng cửa sổ ngay lập tức để thực thi lệnh

Cửa sổ ngay lập tức cũng có thể được sử dụng để thực hiện các lệnh. Chỉ cần nhập một >sau đó bởi lệnh.

nhập mô tả hình ảnh ở đây

Ví dụ: >shell cmdsẽ bắt đầu một trình bao lệnh (điều này có thể hữu ích để kiểm tra những biến môi trường nào đã được chuyển đến Visual Studio, chẳng hạn). >clssẽ xóa màn hình.

Dưới đây là danh sách các lệnh thường được sử dụng đến nỗi chúng có bí danh riêng: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx


2
mẹo hay. Trên thực tế, điều này kết hợp tuyệt vời với một thủ thuật khác mà tôi sử dụng: >open Filenamesẽ mở tệp đã chọn trong giải pháp và thậm chí có hoàn thành tên tệp.
Phillip Ngan

6

Cửa sổ ngay lập tức được sử dụng để gỡ lỗi và đánh giá các biểu thức, thực thi các câu lệnh, in các giá trị biến, v.v. Nó cho phép bạn nhập các biểu thức để được đánh giá hoặc thực thi bởi ngôn ngữ phát triển trong quá trình gỡ lỗi.

Để hiển thị Cửa sổ ngay lập tức, hãy chọn Gỡ lỗi> Windows> Ngay lập tức hoặc nhấn Ctrl-Alt-I

nhập mô tả hình ảnh ở đây

Đây là một ví dụ với Cửa sổ ngay lập tức:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

thêm điểm ngắt

nhập mô tả hình ảnh ở đây

lệnh gọi

nhập mô tả hình ảnh ở đây

https://msdn.microsoft.com/en-us/library/f177hahy.aspx

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.