ฉันสามารถหาค่าส่งคืนก่อนที่จะส่งคืนในขณะที่แก้ไขข้อบกพร่องใน Intellij ได้หรือไม่


127

ด้วย:

Object method(){
    ...
    return /* some complex expression */
}

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

Object ret = /* something complex */; return ret;วิธีที่ผมทำตอนนี้คือการทำให้ตัวแปรชั่วคราว: แต่นั่นเป็นเรื่องยุ่งยากและยังเพิ่มบรรทัดรหัสที่ไม่จำเป็นอีกด้วย

หมายเหตุ: นี่เป็นคำถามเดียวกับฉันสามารถหาค่าที่ส่งคืนได้ก่อนที่จะส่งคืนในขณะที่แก้ไขข้อบกพร่องใน Visual Studioแต่สำหรับ intellij

คำตอบ:


31

ดูเหมือนจะมีสองวิธีที่คุณสามารถทำได้ ข้อแรกเกี่ยวข้องกับการตั้งค่าเบรกพอยต์บนลายเซ็นเมธอดในกรณีของคุณคุณจะตั้งค่าเบรกพอยต์บนเมธอด Object () {. วิธีนี้จะช่วยให้คุณสามารถมองหาทางเข้าและทางออกของวิธีการได้ ฉันเชื่อว่าคุณต้องใช้ร่วมกับ " Watch method return values"ระบุไว้ข้างต้น แต่ฉันไม่สามารถทดสอบได้ทั้งหมดเนื่องจากใช้เวลาคำนวณนานเกินไป ระวังสิ่งนี้จะลดประสิทธิภาพของดีบักเกอร์ลงอย่างมากและจะใช้เวลาในการดีบักนานขึ้น

นอกจากนี้คุณสามารถทำสิ่งต่อไปนี้ด้วยตนเอง

  1. ตั้งค่าเบรกพอยต์ในบรรทัดส่งกลับ
  2. เมื่อตีกลับบรรทัดให้คลิกที่บรรทัดส่งคืนโดยเฉพาะวางเคอร์เซอร์ไว้บนการดำเนินการที่คุณต้องการดูจากนั้นไปที่ Run-> Evaluate Expression (หรือ Alt-F8) และควรรันนิพจน์ที่จุดนั้นและ คืนสิ่งที่ส่งคืน

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

UPDATE : ลองใช้ร่วมกับวิธีแรก อย่าใช้ "Watch method return values" เนื่องจากดูเหมือนว่าจะทำให้เซสชันการดีบักช้าลงหรือหยุดทำงาน ให้ทำดังต่อไปนี้แทน

  1. คลิกขวาบนนิพจน์ที่ต้องการดูและคลิก "เพิ่มในนาฬิกา"
  2. จากนั้นเพิ่มเบรกพอยต์วิธีการตามที่ระบุไว้ข้างต้น
  3. ดีบักโปรแกรมของคุณและวิธีการของคุณจะทำลายลายเซ็นของวิธีการ
  4. กดปุ่ม F9 เพื่อดำเนินการต่อและควรแตกอีกครั้งหลังจากคำนวณนิพจน์การส่งคืนแล้วและนิพจน์การส่งคืนของคุณควรอยู่ในคอลัมน์นาฬิกา

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

หวังว่านี่จะช่วยได้


1
จริงๆแล้วเมื่อคุณเพิ่มเบรกพอยต์และนาฬิกาให้กับ (X ใหม่ ()) แล้วคุณก็สามารถทำ Alt + F8 บนนาฬิกาเพื่อ 'วิเคราะห์' วัตถุที่ส่งคืนได้ นี่เป็นประโยชน์จริงๆ
Kedar Mhaswade

หากฉันเข้าใจสิ่งนี้อย่างถูกต้องวิธีแก้ปัญหาที่นำเสนอจะใช้ได้เฉพาะเมื่อนิพจน์ไม่มีผลข้างเคียง ฉันไม่แนะนำให้ใส่นิพจน์ที่ซับซ้อนในหน้าต่างตัวแปร / นาฬิกาโดยทั่วไป
Mashmagar

ตั้งแต่อย่างน้อย 2016.3 มีวิธีที่ดีกว่านี้มาก ดูคำตอบจาก Birchlabs สำหรับรายละเอียด ตอนนี้ควรเป็นคำตอบที่ยอมรับแล้ว
Mikezx6r

151

ใน IntelliJ IDEA 2016.3: ซ่อนอยู่ภายในปุ่มฟันเฟืองของแผงแก้ไขข้อบกพร่อง ตรวจสอบให้แน่ใจว่าได้Show Method Return Valuesรับการตรวจสอบแล้ว

IntelliJ IDEA 2016.3 "แสดงค่าวิธีการคืนสินค้า"

ใช้ดีบักเกอร์เพื่อทำลายบางส่วนภายในฟังก์ชันที่มีค่าส่งคืนที่คุณต้องการดู

ก้าวเข้าสู่ฟังก์ชัน

ก้าวออกจากฟังก์ชัน (หรือก้าวข้ามจนกว่าคุณจะหนี):

ก้าวออกมา

สังเกตว่าค่าส่งคืนปรากฏในตัวแปรของคุณ:

สังเกตค่าส่งคืน


3
@Stan ฉันอัปเดตคำตอบเพื่อให้เป็นตัวอย่างที่ใช้งานได้
Birchlabs

40

มีดูวิธีการคืนค่าปุ่มที่มีอยู่ในแผงดีบัก

ดูวิธีการคืนค่า : คลิกปุ่มนี้เพื่อดูค่าที่ส่งคืนของวิธีการดำเนินการล่าสุด

ดูวิธีการคืนค่า

การกำหนดค่า IDEA 12:

ไอเดีย 12


2
ดูเหมือนจะไม่มีอะไรปรากฏในแท็บ "ตัวแปร" หรือ "นาฬิกา" ฉันใช้ Groovy ถ้าเป็นเรื่องสำคัญ นอกจากนี้ดูเหมือนว่ามันจะแสดงค่าส่งคืนของวิธีการสุดท้ายที่ดำเนินการจากบริบทของรหัสการเรียกแทนที่จะมาจากบริบทของวิธีการเอง ความแตกต่างที่สำคัญคือถ้าคุณสามารถดูได้จากบริบทของวิธีการนั้นคุณสามารถดูค่าของตัวแปรท้องถิ่นของวิธีการได้ สิ่งนี้จะช่วยให้คุณเห็นสิ่งที่ผิดพลาดหากวิธีนี้ส่งคืนค่าที่ไม่ถูกต้อง
Kyle

3
แสดงค่าที่ส่งคืนในบานหน้าต่าง "ตัวแปร" (โดยใช้ชื่อเมธอดแบบเต็ม) นี่ควรเป็นคำตอบที่ได้รับการยอมรับ @CrazyCoder +1 จากฉัน :-)
Omri Spector

4
@CrazyCoder: ฟีเจอร์นี้ยังมีอยู่สำหรับ IDEA 13 หรือไม่ ฉันหามันไม่เจอ.
kevinarpe

1
ฉันใช้ Intellij 15 และไม่เห็นสิ่งนี้เช่นกัน คุณสามารถโพสต์ภาพหน้าจอได้หรือไม่?
Sanjiv Jivan

3
ในเดือนมกราคม 2017 (Idea 2016.3.2): คุณต้องคลิกที่ไอคอนการตั้งค่า (รูปเฟืองอยู่เหนือรายการเมนูสีเหลืองในภาพที่ 2) เมนูจะแสดงว่ามี "Show Method Return Values" ไม่จำเป็นต้องรีสตาร์ทอะไร: หลังจากที่กลับถัดไปจากวิธีการของมัน ObjectClassName.methodName () ปรากฏในตัวแปรดูที่ด้านขวาด้านล่างนี้
18446744073709551615

1

สิ่งนี้ถูกถามเมื่อไม่นานมานี้ แต่ฉันใช้วิธีอื่นเมื่อต้องการจัดการกับสถานการณ์นี้

เมื่อทำการดีบักคุณสามารถทำเครื่องหมายนิพจน์ (ในกรณีของคุณคือนิพจน์ที่อยู่ด้านหลัง "return") และกด CTRL + ALT + F8 (Quick Evaluate Expression) IntelliJ จะปรากฏหน้าต่างเล็ก ๆ ขึ้นมาเพื่อแสดงค่าที่จะคืนให้คุณ


2
หากคุณใช้ชิปกราฟิก Intel แป้นพิมพ์ลัดนี้จะปิดจอภาพที่เป็นความลับของคุณ
Coli

1
ผู้ใช้ Linux: Ctrl + Alt + F8 - จะส่งผู้ใช้ไปที่ 2nd GUI Terminal ใน Ubuntu ฉันกด Ctrl + Alt + F2 เพื่อย้อนกลับ
Dmitriy Pavlukhin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.