Bagaimana Anda menggunakan Jendela Segera di Visual Studio?


121

Jendela Segera adalah alat yang sangat berguna untuk men-debug aplikasi. Ini dapat digunakan untuk mengeksekusi pernyataan kode yang valid dalam konteks break point dan memeriksa nilai. Saya juga menggunakannya untuk mengetik cuplikan kode untuk mempelajari fitur bahasa.

Bagaimana Anda menggunakan Jendela Segera?


Jika Anda merujuk untuk mengeluarkan perintah Visual Studio individu, lihatlah [Jendela Segera] [1] sebagai contoh. Itu menunjukkan bagaimana mengevaluasi ekspresi, mengeksekusi pernyataan, mencetak nilai variabel, dan sebagainya melalui jendela langsung. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper

2
Ada beberapa perintah khusus yang sulit ditemukan daftarnya. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Beberapa kekuatan windbg tersedia. Dulu bisa, diberi alamat, temukan simbol terdekat. (ln) Saya pikir itu dimatikan dengan bodoh. Saya ingin memiliki perintah dt windbg untuk menampilkan tipe dalam struct, dll. Setidaknya Anda dapat mengetikkan variabel objek untuk mendapatkan semua anggota dalam daftar dengan nilai mereka. (Daripada mencoba memainkan permainan buka simpul tutup simpul.)
kalbr

untuk Visual Studio 2017, tautan ke dokumentasi yang relevan adalah docs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

Jawaban:


130

Salah satu fitur bagus dari Jendela Segera di Visual Studio adalah kemampuannya untuk mengevaluasi nilai kembalian suatu metode terutama jika dipanggil oleh kode klien Anda tetapi itu bukan bagian dari tugas variabel. Dalam mode Debug, seperti yang disebutkan, Anda dapat berinteraksi dengan variabel dan mengeksekusi ekspresi dalam memori yang memainkan peran penting untuk dapat melakukan ini.

Misalnya, jika Anda memiliki metode statis yang mengembalikan jumlah dua angka seperti:

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

Kemudian di Jendela Segera Anda dapat mengetik yang berikut ini:

? GetSum(2, 4)
6

Seperti yang Anda lihat, ini bekerja sangat baik untuk metode statis. Namun, jika metode tersebut non-statis, Anda perlu berinteraksi dengan referensi ke objek tempat metode tersebut berada.

Sebagai contoh, katakanlah seperti ini kelas Anda:

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

Jika objek sudah ada dalam memori dan berada dalam cakupan, maka Anda dapat memanggilnya di Jendela Segera selama itu telah dibuat sebelum breakpoint Anda saat ini (atau, setidaknya, sebelum di mana pun kode dijeda dalam mode debug):

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

Selain itu, jika Anda ingin berinteraksi dan menguji metode secara langsung tanpa mengandalkan instance yang ada di memori, Anda dapat membuat instance Anda sendiri di Jendela Segera:

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

Anda dapat mengambil langkah lebih jauh dan untuk sementara menetapkan hasil metode ke variabel jika Anda ingin melakukan evaluasi, penghitungan lebih lanjut, dll .:

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

Selanjutnya, jika Anda bahkan tidak ingin mendeklarasikan nama variabel untuk objek baru dan hanya ingin menjalankan salah satu metode / fungsinya, lakukan ini:

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

Cara yang sangat umum untuk melihat nilai suatu metode adalah dengan memilih nama metode kelas dan melakukan 'Tambah Jam' sehingga Anda dapat melihat nilainya saat ini di jendela Tonton. Namun, sekali lagi, objek perlu dibuat instance-nya dan berada dalam cakupan untuk menampilkan nilai yang valid. Ini jauh lebih tidak kuat dan lebih membatasi daripada menggunakan Jendela Segera.

Bersama dengan metode pemeriksaan, Anda dapat melakukan persamaan matematika sederhana:

? 5 * 6
30

atau bandingkan nilai:

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

Tanda tanya ('?') Tidak diperlukan jika Anda berada langsung di Jendela Segera tetapi itu disertakan di sini untuk kejelasan (untuk membedakan antara ekspresi yang diketik versus hasil.) Namun, jika Anda berada di Jendela Perintah dan perlu untuk melakukan beberapa hal cepat di Jendela Segera lalu awali pernyataan Anda dengan '?' dan pergilah.

Intellisense berfungsi di Jendela Segera , tetapi terkadang bisa sedikit tidak konsisten. Dalam pengalaman saya, sepertinya hanya tersedia dalam mode Debug, tetapi tidak dalam desain, mode non-debug.

Sayangnya, kelemahan lain dari Immediate Window adalah tidak mendukung loop.


1
Bagaimana Anda menemukan jendela langsung?
jpaugh

1
Ctrl + Alt + Iatau Debug -> Windows -> Immediate
Ray

11

Gunakan Jendela Segera untuk Menjalankan Perintah

Jendela Segera juga dapat digunakan untuk menjalankan perintah. Cukup ketik a >diikuti dengan perintah.

masukkan deskripsi gambar di sini

Misalnya >shell cmdakan memulai shell perintah (ini dapat berguna untuk memeriksa variabel lingkungan apa yang diteruskan ke Visual Studio, misalnya). >clsakan membersihkan layar.

Berikut adalah daftar perintah yang sangat umum digunakan sehingga memiliki alias sendiri: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx


2
tip yang bagus. Faktanya, ini digabungkan dengan baik dengan trik lain yang saya gunakan: >open Filenameakan membuka file yang dipilih dalam solusi, dan bahkan memiliki penyelesaian nama file.
Phillip Ngan

6

Jendela Immediate digunakan untuk men-debug dan mengevaluasi ekspresi, mengeksekusi pernyataan, mencetak nilai variabel, dan sebagainya. Ini memungkinkan Anda memasukkan ekspresi untuk dievaluasi atau dieksekusi oleh bahasa pengembangan selama debugging.

Untuk menampilkan Jendela Segera, pilih Debug> Windows> Segera atau tekan Ctrl-Alt-I

masukkan deskripsi gambar di sini

Berikut adalah contoh dengan Immediate Window:

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();}

tambahkan breakpoint

masukkan deskripsi gambar di sini

perintah panggilan

masukkan deskripsi gambar di sini

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.