หน้าต่างทันทีเป็นเครื่องมือที่มีประโยชน์อย่างมากสำหรับการดีบักแอปพลิเคชัน สามารถใช้เพื่อดำเนินการคำสั่งรหัสที่ถูกต้องในบริบทของจุดพักและตรวจสอบค่า ฉันยังใช้มันเพื่อพิมพ์ข้อมูลโค้ดเพื่อเรียนรู้คุณสมบัติของภาษา
คุณใช้หน้าต่างทันทีได้อย่างไร?
หน้าต่างทันทีเป็นเครื่องมือที่มีประโยชน์อย่างมากสำหรับการดีบักแอปพลิเคชัน สามารถใช้เพื่อดำเนินการคำสั่งรหัสที่ถูกต้องในบริบทของจุดพักและตรวจสอบค่า ฉันยังใช้มันเพื่อพิมพ์ข้อมูลโค้ดเพื่อเรียนรู้คุณสมบัติของภาษา
คุณใช้หน้าต่างทันทีได้อย่างไร?
คำตอบ:
คุณลักษณะที่ดีอย่างหนึ่งของหน้าต่างทันทีใน 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 ทำงานในหน้าต่างทันทีแต่บางครั้งอาจไม่สอดคล้องกันเล็กน้อย จากประสบการณ์ของฉันดูเหมือนว่าจะใช้ได้เฉพาะในโหมดดีบัก แต่ไม่ใช่ในโหมดออกแบบไม่ใช่โหมดดีบัก
น่าเสียดายที่ข้อเสียเปรียบอีกประการหนึ่งของหน้าต่างทันทีคือไม่รองรับลูป
Ctrl + Alt + I
หรือDebug -> Windows -> ทันที
หน้าต่างทันทียังสามารถใช้เพื่อดำเนินการคำสั่ง เพียงพิมพ์>
ตามด้วยคำสั่ง
ตัวอย่างเช่น>shell cmd
จะเริ่มเชลล์คำสั่ง (สิ่งนี้มีประโยชน์ในการตรวจสอบว่าตัวแปรสภาพแวดล้อมใดถูกส่งไปยัง Visual Studio เป็นต้น) >cls
จะล้างหน้าจอ
นี่คือรายการคำสั่งที่ใช้กันทั่วไปจนมีนามแฝงของตนเอง: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx
>open Filename
จะเปิดไฟล์ที่เลือกในโซลูชันและยังมีการกรอกชื่อไฟล์
หน้าต่างทันทีใช้ในการดีบักและประเมินนิพจน์ดำเนินการคำสั่งพิมพ์ค่าตัวแปรและอื่น ๆ ช่วยให้คุณสามารถป้อนนิพจน์ที่จะประเมินหรือดำเนินการโดยภาษาของการพัฒนาระหว่างการดีบัก
ในการแสดงหน้าต่างทันทีให้เลือก 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();}
เพิ่มเบรกพอยต์
เรียกคำสั่ง