คุณใช้หน้าต่างทันทีใน Visual Studio อย่างไร


121

หน้าต่างทันทีเป็นเครื่องมือที่มีประโยชน์อย่างมากสำหรับการดีบักแอปพลิเคชัน สามารถใช้เพื่อดำเนินการคำสั่งรหัสที่ถูกต้องในบริบทของจุดพักและตรวจสอบค่า ฉันยังใช้มันเพื่อพิมพ์ข้อมูลโค้ดเพื่อเรียนรู้คุณสมบัติของภาษา

คุณใช้หน้าต่างทันทีได้อย่างไร?


หากคุณอ้างถึงคำสั่ง Visual Studio แต่ละคำสั่งให้ดูที่ [Immediate Window] [1] เพื่อดูตัวอย่าง ซึ่งแสดงวิธีการประเมินนิพจน์ดำเนินการคำสั่งพิมพ์ค่าตัวแปรและอื่น ๆ ผ่านหน้าต่างทันที [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper

2
มีคำสั่งพิเศษบางอย่างที่หารายการได้ยาก msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx พลังบางอย่างของ windbg สามารถใช้ได้ ใช้เพื่อให้สามารถระบุที่อยู่ค้นหาสัญลักษณ์ที่ใกล้เคียงที่สุด (ln) ฉันคิดว่ามันถูกปิดอย่างโง่เขลา ฉันชอบที่จะมีคำสั่ง dt ของ windbg เพื่อแสดงประเภทในโครงสร้าง ฯลฯ อย่างน้อยคุณสามารถพิมพ์ตัวแปรออบเจ็กต์เพื่อรับสมาชิกทั้งหมดในรายการพร้อมค่าของพวกเขา (แทนที่จะพยายามเล่นโหนดเปิดปิดเกมโหนด)
kalbr

สำหรับ Visual Studio 2017 ลิงก์ไปยังเอกสารที่เกี่ยวข้องคือdocs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

คำตอบ:


130

คุณลักษณะที่ดีอย่างหนึ่งของหน้าต่างทันทีใน Visual Studio คือความสามารถในการประเมินค่าที่ส่งคืนของวิธีการโดยเฉพาะอย่างยิ่งหากมีการเรียกใช้รหัสไคลเอ็นต์ของคุณ แต่ไม่ได้เป็นส่วนหนึ่งของการกำหนดตัวแปร ในโหมดดีบักดังที่กล่าวไว้คุณสามารถโต้ตอบกับตัวแปรและดำเนินการนิพจน์ในหน่วยความจำซึ่งมีบทบาทสำคัญในการดำเนินการนี้

ตัวอย่างเช่นหากคุณมีวิธีการคงที่ที่ส่งกลับผลรวมของตัวเลขสองตัวเช่น:

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

จากนั้นในหน้าต่างทันทีคุณสามารถพิมพ์สิ่งต่อไปนี้:

? GetSum(2, 4)
6

อย่างที่คุณเห็นวิธีนี้ใช้ได้ดีกับวิธีการคงที่ อย่างไรก็ตามหากวิธีนี้ไม่คงที่คุณต้องโต้ตอบกับการอ้างอิงถึงวัตถุที่เมธอดอยู่

ตัวอย่างเช่นสมมติว่านี่คือลักษณะของชั้นเรียนของคุณ:

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

หากวัตถุมีอยู่แล้วในหน่วยความจำและอยู่ในขอบเขตคุณสามารถเรียกใช้ในหน้าต่างทันทีได้ตราบเท่าที่มีการสร้างอินสแตนซ์ก่อนจุดพักปัจจุบันของคุณ (หรืออย่างน้อยก่อนที่รหัสจะหยุดชั่วคราวในโหมดดีบัก):

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

นอกจากนี้หากคุณต้องการโต้ตอบและทดสอบวิธีการโดยตรงโดยไม่ต้องอาศัยอินสแตนซ์ที่มีอยู่ในหน่วยความจำคุณสามารถสร้างอินสแตนซ์ของคุณเองในหน้าต่างทันที:

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

คุณสามารถก้าวไปอีกขั้นและกำหนดผลลัพธ์ของวิธีการชั่วคราวให้กับตัวแปรหากคุณต้องการทำการประเมินการคำนวณและอื่น ๆ เพิ่มเติม:

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

นอกจากนี้หากคุณไม่ต้องการประกาศชื่อตัวแปรสำหรับออบเจ็กต์ใหม่และต้องการเรียกใช้เมธอด / ฟังก์ชันอย่างใดอย่างหนึ่งให้ทำสิ่งนี้:

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

วิธีทั่วไปในการดูค่าของเมธอดคือการเลือกชื่อเมธอดของคลาสและทำการ 'เพิ่มนาฬิกา' เพื่อให้คุณสามารถดูค่าปัจจุบันของมันในหน้าต่าง Watch อย่างไรก็ตามอีกครั้งวัตถุจะต้องถูกสร้างอินสแตนซ์และอยู่ในขอบเขตเพื่อให้แสดงค่าที่ถูกต้องได้ สิ่งนี้มีประสิทธิภาพน้อยกว่าและมีข้อ จำกัด มากกว่าการใช้หน้าต่างทันที

นอกจากวิธีการตรวจสอบแล้วคุณยังสามารถทำสมการคณิตศาสตร์อย่างง่ายได้:

? 5 * 6
30

หรือเปรียบเทียบค่า:

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

เครื่องหมายคำถาม ('?') ไม่จำเป็นหากคุณอยู่ในหน้าต่างทันทีโดยตรง แต่จะรวมไว้ที่นี่เพื่อความชัดเจน (เพื่อแยกความแตกต่างระหว่างนิพจน์ที่พิมพ์กับผลลัพธ์) อย่างไรก็ตามหากคุณอยู่ในหน้าต่างคำสั่งและต้องการ เพื่อทำสิ่งต่างๆอย่างรวดเร็วในหน้าต่างทันทีจากนั้นนำหน้าข้อความของคุณด้วย "?" และจากคุณไป

Intellisense ทำงานในหน้าต่างทันทีแต่บางครั้งอาจไม่สอดคล้องกันเล็กน้อย จากประสบการณ์ของฉันดูเหมือนว่าจะใช้ได้เฉพาะในโหมดดีบัก แต่ไม่ใช่ในโหมดออกแบบไม่ใช่โหมดดีบัก

น่าเสียดายที่ข้อเสียเปรียบอีกประการหนึ่งของหน้าต่างทันทีคือไม่รองรับลูป


1
คุณจะพบหน้าต่างทันทีได้อย่างไร?
jpaugh

1
Ctrl + Alt + IหรือDebug -> Windows -> ทันที
Ray

11

ใช้หน้าต่างทันทีเพื่อดำเนินการคำสั่ง

หน้าต่างทันทียังสามารถใช้เพื่อดำเนินการคำสั่ง เพียงพิมพ์>ตามด้วยคำสั่ง

ใส่คำอธิบายภาพที่นี่

ตัวอย่างเช่น>shell cmdจะเริ่มเชลล์คำสั่ง (สิ่งนี้มีประโยชน์ในการตรวจสอบว่าตัวแปรสภาพแวดล้อมใดถูกส่งไปยัง Visual Studio เป็นต้น) >clsจะล้างหน้าจอ

นี่คือรายการคำสั่งที่ใช้กันทั่วไปจนมีนามแฝงของตนเอง: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx


2
เคล็ดลับที่ดี ในความเป็นจริงสิ่งนี้รวมเข้ากับเคล็ดลับอื่นที่ฉันใช้: >open Filenameจะเปิดไฟล์ที่เลือกในโซลูชันและยังมีการกรอกชื่อไฟล์
Phillip Ngan

6

หน้าต่างทันทีใช้ในการดีบักและประเมินนิพจน์ดำเนินการคำสั่งพิมพ์ค่าตัวแปรและอื่น ๆ ช่วยให้คุณสามารถป้อนนิพจน์ที่จะประเมินหรือดำเนินการโดยภาษาของการพัฒนาระหว่างการดีบัก

ในการแสดงหน้าต่างทันทีให้เลือก Debug> Windows> Immediate หรือกด Ctrl-Alt-I

ใส่คำอธิบายภาพที่นี่

นี่คือตัวอย่างของหน้าต่างทันที:

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

เพิ่มเบรกพอยต์

ใส่คำอธิบายภาพที่นี่

เรียกคำสั่ง

ใส่คำอธิบายภาพที่นี่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.