เหตุใดการดีบั๊กใน IDE จึงดีกว่า [ปิด]


145

ฉันเป็นนักพัฒนาซอฟต์แวร์มานานกว่ายี่สิบปีการเขียนโปรแกรมใน C, Perl, SQL, Java, PHP, JavaScript และ Python เมื่อเร็ว ๆ นี้ ผมไม่เคยมีปัญหาฉันไม่สามารถแก้ปัญหาโดยใช้ความคิดบางอย่างระมัดระวังและดีอยู่การแก้จุดบกพร่องprintงบ

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

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

ฉันกำลังคิดถึงอะไร อะไรทำให้เครื่องมือการดีบัก IDE มีประสิทธิภาพมากกว่าการใช้printคำสั่งการวินิจฉัยอย่างรอบคอบ

คุณสามารถแนะนำทรัพยากร (แบบฝึกหัดหนังสือ screencasts) ที่แสดงเทคนิคปลีกย่อยของการดีบัก IDE ได้หรือไม่


คำตอบที่ดี! ขอบคุณมากสำหรับทุกคนที่สละเวลา ส่องสว่างมาก ฉันโหวตมากและไม่ลงคะแนนเลย

บางจุดที่น่าสังเกต:

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

14
ฉันคิดว่าคุณเข้าใจผิดว่า IDE จำเป็นต้องใช้ดีบักเกอร์หรือไม่? ดีบักเกอร์เป็นเครื่องมือที่ทรงคุณค่าไม่ว่าจะใช้ภายใน IDE หรือไม่
codelogic

ฉันเห็นด้วยคำถามเกือบจะอ้างว่าคุณไม่สามารถดีบักด้วยดีบักเกอร์ใน IDE นี่ไม่ใช่กรณี คุณสามารถเรียกใช้ดีบักเกอร์ที่มีหรือไม่มี IDE ได้ฉันแน่ใจว่าเขารู้ดีว่า :) เขาอาจถามเกี่ยวกับการดีบักภาพโดยเฉพาะหรือไม่?
hhafez

ใช่ตัวแก้ไขภาพ ฉันรู้เกี่ยวกับตัวแก้จุดบกพร่องที่มองไม่เห็นเช่น gdb แต่สิ่งเหล่านี้ไม่ได้รับการสนับสนุนประเภทเดียวกัน
บิล Karwin

ฉันคิดว่าปัญหาหลักของคำถามของคุณคือคุณเข้าใจผิด IDE สำหรับดีบักเกอร์ คุณถามเกี่ยวกับการดีบักใน IDE แต่คุณเปรียบเสมือน IDE กับดีบักเกอร์และ 'non-IDE' ดูเหมือนว่าจะไม่ใช้ดีบักเกอร์ IDE! = ดีบักเกอร์ ฉันเกลียด IDE แต่ฉันชอบดีบั๊กเพื่อตอบคำถามของคุณฉันจะต้องอธิบายประเด็นต่าง ๆ สำหรับ IDE และดีบักเกอร์ มันเหมือนกับถามว่า: "อยู่รอบโลกหรือฉันจะซื้อจักรยานได้ไหม"
stefanB

6
@stefanB: ฉันได้รับคำตอบที่ดีสำหรับคำถามของฉันซึ่งแสดงให้เห็นว่าคุณเป็นคนไร้ความต้องการ
Bill Karwin

คำตอบ:


108

ตัวอย่างบางส่วนของความสามารถบางอย่างที่ดีบักเกอร์ IDE จะมอบให้คุณผ่านข้อความการติดตามในโค้ด:

  • ดูสแต็คการโทรณ จุดใดก็ได้ให้บริบทสำหรับสแต็กเฟรมปัจจุบันของคุณ
  • เข้าสู่ไลบรารีที่คุณไม่สามารถรวบรวมอีกครั้งเพื่อวัตถุประสงค์ในการเพิ่มการติดตาม (สมมติว่าคุณสามารถเข้าถึงสัญลักษณ์การดีบัก)
  • เปลี่ยนค่าตัวแปรขณะที่โปรแกรมกำลังทำงาน
  • แก้ไขและดำเนินการต่อ - ความสามารถในการเปลี่ยนรหัสในขณะที่กำลังทำงานและเห็นผลการเปลี่ยนแปลงทันที
  • สามารถดูตัวแปรโดยดูว่าเมื่อใดที่เปลี่ยนแปลง
  • สามารถข้ามหรือทำซ้ำส่วนของรหัสเพื่อดูว่ารหัสจะทำงานอย่างไร สิ่งนี้ช่วยให้คุณทดสอบการเปลี่ยนแปลงทางทฤษฎีก่อนทำการเปลี่ยนแปลง
  • ตรวจสอบเนื้อหาหน่วยความจำแบบเรียลไทม์
  • แจ้งเตือนคุณเมื่อมีข้อยกเว้นบางอย่างถูกส่งออกไปแม้ว่าแอปพลิเคชันจะได้รับการจัดการ
  • เบรกพอยต์แบบมีเงื่อนไข ; การหยุดแอปพลิเคชันเฉพาะในกรณีพิเศษเพื่อให้คุณสามารถวิเคราะห์สแต็กและตัวแปร
  • ดูบริบทเธรดในแอ็พพลิเคชันแบบมัลติเธรดซึ่งอาจทำได้ยากด้วยการติดตาม (เนื่องจากการติดตามจากเธรดที่แตกต่างกันจะถูกอินเตอร์อินในเอาต์พุต)

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

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


3
การแก้ไขจุดบกพร่องแบบไดนามิกเป็นจุดที่ดี
Bill Karwin

2
นอกจากนาฬิกาคุณยังสามารถเลื่อนไปที่ชื่อตัวแปรได้ในขณะที่กำลังอ่านรหัสและคุณจะได้รับคำแนะนำเครื่องมือ คุณสามารถเปลี่ยนค่านั้นได้โดยคลิกที่คำแนะนำเครื่องมือ นั่น ruxx0rs
Jon Davis

ส่วนใหญ่ของคุณสมบัติเหล่านี้เป็นคุณสมบัติของดีบั๊กอินเตอร์แอคทีฟโดยมีหรือไม่มี IDE คือทุกอย่างในรายการนั้น (มีข้อยกเว้นที่เป็นไปได้ของรหัสการเปลี่ยนแปลงในสถานที่) เป็นไปได้ด้วย GDB
dmckee --- ผู้ดูแลอดีตลูกแมว

1
ใช่ แต่ OP ถามว่า "อะไรที่ทำให้เครื่องมือการดีบัก IDE มีประสิทธิภาพมากกว่าการใช้คำสั่งการพิมพ์วินิจฉัยอย่างรอบคอบ" ฉันเปรียบเทียบเครื่องมือการดีบัก IDE เทียบกับคำสั่งการพิมพ์ไม่ใช่การดีบัก IDE และการดีบักคอนโซล
LeopardSkinPillBoxHat

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

34
  • ตัวดีบัก IDE ช่วยให้คุณสามารถเปลี่ยนค่าของตัวแปรในเวลาทำงาน

  • ตัวดีบัก IDE ช่วยให้คุณเห็นค่าของตัวแปรที่คุณไม่ทราบว่าคุณต้องการเห็นเมื่อเริ่มการประมวลผล

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

  • ดีบักเกอร์ IDE ช่วยให้คุณสามารถหยุดการประมวลผลแบบมีเงื่อนไขที่จุดใดก็ได้ในโค้ดโดยยึดตามเงื่อนไขไม่ใช่หมายเลขบรรทัด

  • ตัวดีบัก IDE จะช่วยให้คุณตรวจสอบสถานะของโปรแกรมในกรณีที่มีข้อยกเว้นที่ไม่สามารถจัดการได้แทนที่จะออกไป


1
@ Joe ในบริบทของคำถามของบิลที่ฉันคิดว่าพวกเขามีความเทียบเท่า Bill พูดถึงการแก้ไขข้อบกพร่องของ printf ดีบักเกอร์จะรวมเข้ากับตัวแก้ไขหรือไม่และคอมไพเลอร์นั้นไม่มีสาระสำคัญ ณ จุดนั้น
46490 Rob Kennedy

สิ่งที่เป็น gdb นั้นซึ่งไม่ได้เป็นดีบัก IDE มีคุณสมบัติทั้งหมดเหล่านี้
Tamas Czinege

คำถามคือเกี่ยวกับการดีบัก IDE และการดีบักสไตล์การพิมพ์ดังนั้นฉันจะปล่อยมันตามที่เป็นอยู่
เรียกซ้ำ

ใช่มันเป็นข้อได้เปรียบที่ถูกต้องมากสำหรับนัก debuggers ฉันเข้าใจว่าคุณสมบัติเหล่านี้มีอยู่ในคอนโซลดีบักเกอร์ด้วย แต่ก็เป็นคำตอบที่ดีสำหรับคำถามของฉัน
Bill Karwin

16

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


5
ฉันรู้สึกทึ่งตัวแก้จุดบกพร่องจะแก้ปัญหานี้ได้อย่างไร จุดที่น่ากลัวและกัดแม้ว่า :)
TheIronKnuckle

14
  • พิมพ์คำสั่งทั้งหมดผ่านรหัสของคุณลดความสามารถในการอ่าน
  • การเพิ่มและลบออกเพื่อการดีบักเท่านั้นใช้เวลานาน
  • ตัวแก้จุดบกพร่องติดตามการโทรสแต็คทำให้ง่ายต่อการดูว่าคุณอยู่ที่ไหน
  • ตัวแปรสามารถแก้ไขได้ทันที
  • คำสั่ง Adhoc สามารถดำเนินการในระหว่างการหยุดชั่วคราวในการดำเนินการเพื่อช่วยในการวินิจฉัย
  • สามารถใช้ร่วมกับงบพิมพ์: Debug.Write ("... ")

1
ขอบคุณสำหรับรายการนั้น ไม่ใช่ทุกจุดที่เป็นข้อได้เปรียบที่น่าสนใจของการดีบักด้วยภาพ เช่นฉันสามารถพิมพ์ stack trace ค่อนข้างง่ายในหลาย ๆ ภาษา
Bill Karwin

1
สำหรับ # 2: การเชื่อมต่อดีบักไปยังเซิร์ฟเวอร์อาจเป็นเวลาที่นานมากยิ่งขึ้นในช่วงเวลาที่ :)
inkredibl

9

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

ที่กล่าวมาคุณควรรู้วิธีใช้ดีบักเกอร์แบบ step-through เนื่องจากข้อผิดพลาดในคลาสที่ต่างกันมันเป็นวิธีที่ง่ายกว่า ฉันจะตอบคำถามที่ยอดเยี่ยมอื่น ๆ ไว้แล้วเพื่ออธิบายว่าทำไม :)


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

ยอมรับว่าการใช้การพิมพ์เป็นทักษะที่สำคัญ บันทึกหลายครั้งเมื่อฉันมีชุดเครื่องมือ จำกัด ซึ่งเป็นไปได้ที่จะแก้ไขไฟล์และเรียกใช้ (ซึ่งเป็นจริงสำหรับการพัฒนาเว็บโดยเฉพาะ)
inkredibl

2
การใช้งานพิมพ์เป็นสิ่งที่จำเป็นหากคุณกำลังต่อสู้กับสภาพการแข่งขันแบบมัลติเธรด เป็นไปไม่ได้ที่จะหาบั๊กเหล่านี้โดยใช้ดีบักเกอร์ IDE เบรกพอยต์
Radu094

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

ฉันโหวตหลังจากอ่านประโยคแรก
TheIronKnuckle

6

ปิดส่วนหัวของฉัน:

  1. การดีบั๊กวัตถุที่ซับซ้อน - ดีบั๊กเกอร์ช่วยให้คุณสามารถเจาะลึกอวัยวะภายในของวัตถุได้ ถ้าวัตถุของคุณมีอาร์เรย์ของวัตถุที่ซับซ้อนคำสั่งพิมพ์จะนำคุณไปได้ไกล
  2. ความสามารถในการก้าวรหัสที่ผ่านมาตัวดีบั๊กจะอนุญาตให้คุณข้ามรหัสผ่านที่คุณไม่ต้องการเรียกใช้ จริงอยู่คุณสามารถทำสิ่งนี้ด้วยตนเองได้เช่นกัน แต่มันเป็นโค้ดที่มากกว่านั้นที่คุณต้องฉีด

แต่ตอนนี้ฉันสามารถทำสิ่งต่าง ๆ ทั้งสองนี้ได้โดยใช้การดีบักแบบ "แมนนวล" ... ไม่ว่าจะโดยการฉีดโค้ดหรือการหาตัวเลือกเมนู IDE ที่เหมือนเขาวงกต
Bill Karwin

ใช่คุณสามารถ. แต่คุณต้องการจริง ๆ คุณถามถึงสาเหตุที่ใช้ IDE เพื่อดีบักดีกว่าไม่ใช่สำหรับสิ่งที่ IDE เท่านั้นมีให้
เควินปาง

ยุติธรรมพอสมควร สมมติว่าหนึ่งเรียนรู้คาถาเมนูเพื่อใช้คุณสมบัติเหล่านั้นจากนั้นพวกเขาก็ง่ายกว่าไม่ต้องเขียนรหัสการแก้จุดบกพร่องใหม่ทุกครั้ง
Bill Karwin

1
@BillKarwin ไม่แน่ใจเกี่ยวกับ IDE อื่น ๆ แต่ไม่มี "เมนูคาถา" สำหรับการข้ามการเรียกใช้โค้ดใน Visual Studio คุณสามารถ "ลาก" จุดดำเนินการปัจจุบันไปยังบรรทัดใหม่ได้ การวางเบรกพอยต์นั้นง่ายมาก (คลิกที่หมายเลขบรรทัดที่คุณต้องการฉันไม่คิดว่าฉันเคยไปที่เมนูเพื่อทำอะไรนอกเหนือจากการทำให้หน้าต่าง 'ดู' ใน VS และนั่นจำเป็นต้องเป็น ทำครั้งเดียว (หรือถ้าเลย์เอาต์หน้าต่างของคุณสูญหายหรือคุณปิดหน้าต่างดู)
Grant Peters

ขอบคุณสำหรับเคล็ดลับ @GrantPeters!
Bill Karwin

4

ทางเลือกอื่นในการดีบักใน IDE คุณสามารถลองใช้ส่วนขยายคอนโซลของ Google Chrome กับPHP PHP Library ที่ช่วยให้:

  • ดูข้อผิดพลาด & ข้อยกเว้นในป๊อปอัปแจ้งเตือนคอนโซล Chrome JavaScript
  • ดัมพ์ตัวแปรชนิดใด ๆ
  • เรียกใช้งานโค้ด PHP จากระยะไกล
  • ป้องกันการเข้าถึงด้วยรหัสผ่าน
  • บันทึกคอนโซลกลุ่มโดยการร้องขอ
  • ข้ามไปยังไฟล์ข้อผิดพลาด: บรรทัดในเท็กซ์เอดิเตอร์ของคุณ
  • คัดลอกข้อผิดพลาด / ข้อมูลดีบั๊กไปยังคลิปบอร์ด (สำหรับผู้ทดสอบ)

3

ฉันไม่ได้พัฒนามาเกือบ 20 ปีแล้ว แต่ฉันพบว่าการใช้ IDE / debugger ฉันสามารถ:

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

คะแนนดี! แน่นอนว่าสิ่งเหล่านี้สามารถลดการเกิดซ้ำของ "แก้ไข, คอมไพล์ใหม่, รัน"
Bill Karwin

2

เหตุผลหนึ่งที่ใช้ IDE อาจเป็นเพราะ IDE ที่ทันสมัยรองรับมากกว่าจุดพักง่าย ๆ ตัวอย่างเช่น Visual Studio เสนอคุณสมบัติการดีบักขั้นสูงต่อไปนี้:

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

นอกจากนี้เมื่อใช้ดีบักเกอร์คุณไม่จำเป็นต้องลบคำสั่งการพิมพ์ทั้งหมดเมื่อเสร็จสิ้นการดีบัก


นี่เป็นตัวอย่างที่ดี ฉันเดาว่าฉันไม่เคยเห็นแบบฝึกหัดที่ดีหรือบทความที่แสดงวิธีการใช้งาน นอกจากนี้ฉันไม่ค่อยใช้ VS หรือโซลูชัน Microsoft อื่น ๆ
Bill Karwin

งานที่น่าเบื่อของการลบรหัสการแก้ปัญหานั้นถูกต้องถึงแม้ว่าฉันมักจะสามารถทำ "svn ย้อนกลับ" เพื่อกำจัดมัน
Bill Karwin

#ifdef DEBUG printf ("ตัวแปรอะไรก็ตามที่ตอนนี้% d \ n", var); fflush (stdout); #endif
อาร์เธอร์ Kalliokoski

@ M4N มันง่ายมากที่จะทำการกู้คืนเวอร์ชั่น
Pacerier

2

สิ่งหนึ่งที่ผมประหลาดใจฉันไม่ได้เห็นในคำตอบก็คือว่า 2 วิธีการแก้จุดบกพร่องอยู่ได้พิเศษร่วมกัน

printfการดีบักสามารถทำงานได้ค่อนข้างดีแม้ว่าคุณจะใช้ดีบักเกอร์มาตรฐาน (ไม่ว่าจะเป็น IDE หรือไม่ก็ตาม) โดยเฉพาะอย่างยิ่งกับเฟรมเวิร์กการบันทึกเพื่อให้คุณสามารถทิ้งผลิตภัณฑ์ส่วนใหญ่หรือส่วนใหญ่ทั้งหมดไว้เพื่อช่วยวินิจฉัยปัญหาของลูกค้า

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


อีกหนึ่งคำตอบรวมถึงประเด็นที่ไม่ได้เกิดร่วมกัน แต่เป็นที่เข้าใจกันดี
Bill Karwin

2

จากประสบการณ์ของผมงานพิมพ์ง่าย ๆ มีข้อดีอย่างมากที่ไม่มีใครพูดถึง

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

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

ดังนั้นในประสบการณ์ของฉัน IDE และ debuggers เป็นเครื่องมือที่ยอดเยี่ยมในการแก้ปัญหาอย่างง่าย ๆ เมื่อมีอะไรผิดพลาดใน call-stack เดียวและสำรวจสถานะปัจจุบันของเครื่องเมื่อเกิดความผิดพลาด

อย่างไรก็ตามเมื่อเราเข้าใกล้ปัญหาการแพร่กระจายมากขึ้นซึ่งการเปลี่ยนแปลงของรัฐมีส่วนเกี่ยวข้องอย่างค่อยเป็นค่อยไป ตัวอย่างหนึ่งอัลกอริทึมที่เสียหายโครงสร้างข้อมูลซึ่งจะทำให้อัลกอริทึม anohter ล้มเหลว หรือถ้าเราต้องการที่จะตอบคำถามเช่น "สิ่งนี้เกิดขึ้นบ่อยแค่ไหน", "ทำสิ่งต่าง ๆ ตามลำดับและในแบบที่ฉันจินตนาการให้พวกเขาเกิดขึ้น" ฯลฯ จากนั้นเทคนิคการบันทึก / การพิมพ์ "fashined เก่า" มีข้อได้เปรียบที่ชัดเจน

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

นอกจากนี้ยังมีวิธีการไฮบริด ตัวอย่างเช่นเมื่อคุณทำ console.log (วัตถุ) คุณจะได้รับวิดเจ็ตโครงสร้างข้อมูลในบันทึกที่คุณสามารถขยายและสำรวจรายละเอียดเพิ่มเติมนี่คือข้อดีที่ชัดเจนกว่าบันทึกข้อความ "ตาย"


1

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

น่าเสียดายที่สมองของมนุษย์มีเพียงเธรดเดียว


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

1
สิ่งที่ควรทราบอีกประการหนึ่งคือบางครั้งคำสั่ง print () จะประสานเธรด ฉันเห็นครั้งหนึ่งปัญหาที่บันทึกการดีบักเปิดใช้งานแอปทำงานได้ดี แต่หลังจากปิดการใช้งานพวกเขาก็เกิดข้อผิดพลาดทันทีและสิ่งที่เราคิดได้ก็คือแอพพลิเคชั่นกำลังซิงโครไนซ์บนภาพพิมพ์
inkredibl

1
ที่จริงแล้วมันเป็นประสบการณ์ของฉันที่ห้องสมุดบันทึกที่ดีและสถิติการพิมพ์บางรูปแบบที่ชาญฉลาด (ไม่ใช่การทำข้อมูลให้ตรงกัน) บางครั้งเป็นวิธีเดียวที่จะแก้ไขข้อบกพร่อง (และเข้าใจ) ข้อผิดพลาดแบบมัลติเธรดนักฆ่า จุดพัก (และสัญลักษณ์การดีบักพิเศษที่เพิ่มโดยคอมไพเลอร์) สามารถเปลี่ยนสภาพแวดล้อมของจุดบกพร่องไปยังจุดที่เป็นไปไม่ได้ที่จะค้นหา / ทำซ้ำ / เข้าใจสภาพการแข่งขัน
Radu094

1

เนื่องจากคุณขอให้พอยน์เตอร์ชี้ไปที่หนังสือ ... เท่าที่การดีบั๊กของ Windows ไปแล้ว John Robbins มีหนังสือดี ๆ หลายเล่มเกี่ยวกับการดีบัก Windows:

การดีบักแอปพลิเคชันสำหรับ Microsoft .NET และ Microsoft Windows

โปรดทราบว่ารุ่นล่าสุด ( การดีบักแอปพลิเคชัน Microsoft .NET 2.0 ) เป็น. NET เท่านั้นดังนั้นคุณอาจต้องการรุ่นที่เก่ากว่า (เช่นในลิงค์แรก) หากคุณต้องการการดีบักโค้ดเนทีฟ (ซึ่งครอบคลุมทั้ง. NET และเนทีฟ)


ขอบคุณสำหรับเคล็ดลับหนังสือ! ฉันไม่ค่อยใช้พัฒนากับแพลตฟอร์มของ Microsoft แต่ฉันชอบอ้างอิง
Bill Karwin

1

โดยส่วนตัวแล้วฉันรู้สึกว่าคำตอบนั้นง่ายเหมือน "ตัวดีบั๊กแบบบูรณาการ / IDE ให้ความมั่งคั่งของข้อมูลที่แตกต่างกันอย่างรวดเร็วโดยไม่ต้องเจาะคำสั่งข้อมูลมีแนวโน้มที่จะอยู่ตรงหน้าคุณโดยที่คุณไม่ได้บอกอะไร แสดงให้คุณเห็น.

ความสะดวกในการที่ข้อมูลที่สามารถดึงมาเป็นสิ่งที่ทำให้พวกเขาดีกว่าการแก้จุดบกพร่องบรรทัดคำสั่งเพียงหรือ "printf" การแก้จุดบกพร่อง


นั่นเป็นบทสรุปที่ดีหรือข้อความทั่วไปจับคู่ตัวอย่างเฉพาะคำตอบอื่น ๆ ที่มีให้
Bill Karwin

บิลเชียร์ ฉันรู้สึกว่าฟีเจอร์การโต้เถียงกับฟีเจอร์นั้นไม่มีจุดหมายเหมือนกับเวลาส่วนใหญ่ที่คุณสามารถทำได้ในสิ่งที่คุณต้องทำในโปรแกรมดีบั๊กทั้งสองประเภท สิ่งที่รวมเข้าด้วยกันทำให้กระบวนการง่ายขึ้นมาก (ถ้าทำได้ดีเช่นในกรณีของ VS)
OJ

1

ข้อดีของการดีบักเกอร์บน printf ( หมายเหตุไม่ใช่ตัวดีบัก IDE แต่เป็นการดีบั๊ก )

  1. สามารถตั้งค่า watchpoints นี่คือหนึ่งในวิธีที่ฉันโปรดปรานในการค้นหาความเสียหายที่เกิดขึ้น

  2. สามารถดีบักไบนารีที่คุณไม่สามารถคอมไพล์ใหม่ได้ในขณะนี้

  3. สามารถดีบักไบนารีที่ใช้เวลานานในการคอมไพล์ใหม่

  4. สามารถเปลี่ยนตัวแปรได้ทันที

  5. สามารถเรียกฟังก์ชั่นต่างๆได้ทันที

  6. ไม่มีปัญหาที่ statemenets การดีบักไม่ได้ถูกล้างข้อมูลและด้วยเหตุนี้ปัญหาเรื่องเวลาจึงไม่สามารถดีบั๊กได้อย่างแน่นอน

  7. นักแก้ปัญหาช่วยด้วยการทิ้งหลักพิมพ์คำสั่งไม่ '


1

นี่คือสิ่งที่ฉันใช้บ่อยที่สุดในการดีบัก windows VS.NET:

  • Call stack ซึ่งเป็นวิธีที่ดีในการหารหัสของผู้อื่น
  • ชาวบ้านและนาฬิกา
  • หน้าต่างทันทีซึ่งโดยทั่วไปคือคอนโซล C # และให้ฉันเปลี่ยนเนื้อหาตัวแปรเริ่มต้นสิ่งต่างๆเป็นต้น
  • ความสามารถในการข้ามบรรทัดตั้งคำสั่งถัดไปที่จะดำเนินการที่อื่น
  • ความสามารถในการวางเมาส์เหนือตัวแปรและมีเครื่องมือแสดงค่าของพวกเขา

โดยสรุปมันให้มุมมอง 360 องศาของสถานะรหัสการดำเนินการของฉันไม่ใช่แค่หน้าต่างเล็ก ๆ

ไม่เคยพบหนังสือที่สอนสิ่งนี้ แต่อีกครั้งดูเหมือนว่าจะค่อนข้างง่ายมันสวยมาก WYSIWYG


+1 อย่างน้อยก็ตอบคำถามของฉันเกี่ยวกับแหล่งข้อมูลเพื่อเรียนรู้เพิ่มเติม
Bill Karwin


0

ด้วยดีบักเกอร์ IDE คุณสามารถดูค่าของตัวแปรทั้งหมดในขอบเขตปัจจุบัน (จนถึงระดับสูงสุดของสแต็กการโทร) ทุกครั้งที่คุณหยุดการทำงาน

งบพิมพ์สามารถที่ดี แต่การทุ่มตลาดข้อมูลมากไปยังหน้าจอที่สถานที่ใดก็ตามสามารถผลิตทั้งจำนวนมากของงบการพิมพ์

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

ฉันรู้สึกว่า debuggers ดีกว่าสำหรับบางภาษากว่าคนอื่น ๆ ...

ความคิดเห็นทั่วไปของฉันคือ debuggers IDE นั้นยอดเยี่ยมมากสำหรับภาษาที่ได้รับการจัดการอย่าง Java หรือ C # มีประโยชน์อย่างมากสำหรับ C ++ และไม่เป็นประโยชน์อย่างมากสำหรับสคริปต์ภาษาเช่น Python (แต่อาจเป็นเพราะฉันยังไม่ได้ลอง ดีบักสำหรับภาษาสคริปต์ใด ๆ เลย)

ฉันชอบดีบักเกอร์ใน IntelliJ IDEA อย่างมากเมื่อฉันพัฒนา Java ฉันเพิ่งใช้คำสั่งพิมพ์เมื่อฉันใช้ Python


ใช่ฉันยอมรับว่าภาษาแบบไดนามิกอนุญาตให้คุณข้ามขั้นตอนการคอมไพล์ใหม่ได้ คุณสามารถเพิ่มการวินิจฉัยอื่นและไปได้ ฉันนึกภาพตัวแก้จุดบกพร่องแบบไดนามิกช่วยให้คุณประหยัดเวลาได้มากขึ้นถ้าคุณต้องคอมไพล์ใหม่หลังจากแก้ไขทุกครั้ง
Bill Karwin

0

ตามที่มีคนกล่าวไว้ข้างต้น: ดีบักเกอร์! = IDE

gdb และ (กลับมาในวันนี้) TurboDebugger (สแตนด์อะโลน) ทำงานได้ดีสำหรับภาษาที่พวกเขาสนับสนุน [ed] ขอบคุณ (หรือเทคโนโลยีที่เก่ากว่า: ดีบัก Clipper ที่ลิงก์ไปยัง xBase ที่ปฏิบัติการได้) - ไม่จำเป็นต้องใช้ IDE

นอกจากนี้แม้ว่าการเข้ารหัส C / ++ นั้นหายากกว่านี้บางครั้งคำสั่ง printf จะปกปิดข้อผิดพลาดที่คุณพยายามค้นหา! (ปัญหาการเริ่มต้นใน vars อัตโนมัติบนสแต็กเช่นหรือการจัดสรร / การจัดหน่วยความจำ)

ในที่สุดตามที่คนอื่นระบุไว้คุณสามารถใช้ทั้งสองอย่าง ปัญหาเรียลไทม์-ish บางอย่างต้องใช้การพิมพ์หรืออย่างน้อยก็ควรพิจารณาอย่างรอบคอบ "* video_dbg = (is_good? '+': '-');" บางแห่งในหน่วยความจำวิดีโอ อายุของฉันแสดงอยู่ภายใต้ DOS :-)

TMTOWTDI


0

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

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


0

นี่เป็นคำถามจริงจากโปรแกรมเมอร์จริงหรือไม่?

ใครก็ตามที่ใช้เวลา 5 นาทีในการดีบักด้วยคำสั่งการพิมพ์และการดีบั๊กกับ IDE - มันจะเกิดขึ้นกับเขา / เธอโดยไม่ต้องถาม!


นี่เป็นคำถามที่ตลกที่มาจากคนที่มีชื่อเล่นว่า "Annon"
บิล Karwin

เขาในหมู่พวกคุณนั้นเป็นคนฉลาดที่รู้ว่าสติปัญญาของเขานั้นไม่มีค่าอะไรเลย (โสกราตีส)
Jacques de Hooge

0

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


0

อยากจะพูดถึงคุณสมบัติที่มีประโยชน์ของ console debugger vs printf และ vs debugger ใน IDE

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

มันช่วยให้ผมมากเมื่อผมได้รับการแก้ไขข้อบกพร่องของการใช้งาน Adobe Flash ใช้งานในสภาพแวดล้อมที่ก้าวร้าว คุณเพียงแค่ต้องกำหนดการกระทำบางอย่างที่พิมพ์สถานะที่ต้องการในแต่ละเบรกพอยต์เริ่มคอนโซลดีบักเกอร์ด้วยfdb | tee output.logและเดินผ่านจุดพัก หลังจากนั้นคุณสามารถพิมพ์บันทึกและวิเคราะห์ข้อมูลโดยการเปรียบเทียบสถานะในจุดพักต่าง ๆ อย่างละเอียด

โชคไม่ดีที่คุณสมบัตินี้ [การเข้าสู่ไฟล์] นั้นหาได้ยากในตัวดีบั๊ก GUI ทำให้นักพัฒนาเปรียบเทียบสถานะของวัตถุในหัวของพวกเขา

โดยวิธีการความคิดของฉันคือว่าหนึ่งควรวางแผนที่และสิ่งที่จะแก้ปัญหาก่อนที่จะจ้องมองดีบัก


ขอบคุณ! แต่ฉันไม่แน่ใจว่าฉันยอมรับว่า GUI debuggers ไม่มีคุณสมบัติการดีบักระยะไกล ในความเป็นจริงส่วนใหญ่มีความสามารถนี้ แต่มันเป็นความเจ็บปวดในการตั้งค่า อย่างไรก็ตามฉันสงสัยว่าคุณได้ดู DTrace แล้ว - ดูเหมือนว่าคุณจะชอบมัน
Bill Karwin

@ บิล Karwin: ฉันหมายถึงความสามารถในการเข้าสู่ไฟล์ =)
newtover

0

อีกอย่างคือถ้าคุณเข้าร่วมโครงการเก่าใหม่และไม่มีใครรู้จริง ๆ ว่าโค้ดกำลังทำอะไรอยู่คุณก็ไม่สามารถแก้ไขข้อผิดพลาดได้ด้วยการสะท้อนตัวแปร / วัตถุ / ... b / c คุณไม่รู้ว่าโค้ดคืออะไร ดำเนินการทั้งหมด

ที่งานของฉันฉันกำลังเผชิญหน้ากับสถานการณ์แบบนั้นและการมองเห็น XDebuging ช่วยให้ฉันได้รับความคิดเกี่ยวกับสิ่งที่เกิดขึ้นและที่ไหน

ขอแสดงความนับถืออย่างสูง

Raffael


0

นอกเหนือจากหลาย ๆ สิ่งที่ได้กล่าวไปแล้วหนึ่งในข้อดีที่สำคัญที่สุดของตัวดีบักบน printf คือการใช้คำสั่ง printf จะถือว่าคุณรู้ว่าฟังก์ชันที่มีบั๊กอยู่ ในหลายกรณีที่คุณทำไม่ได้ดังนั้นคุณต้องคาดเดาและเพิ่มคำสั่งการพิมพ์ลงในฟังก์ชั่นอื่น ๆ เพื่อที่จะ จำกัด วง ข้อผิดพลาดอาจอยู่ในรหัสเฟรมเวิร์กหรือที่อื่นที่อยู่ห่างไกลจากจุดที่คุณคิดว่าเป็น ในตัวดีบั๊กมันง่ายกว่าที่จะตั้งจุดพักเพื่อตรวจสอบสถานะในพื้นที่ต่าง ๆ ของรหัสและที่จุดต่าง ๆ ในเวลา

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


0

การดีบักใน IDE นั้นมีค่าในสภาพแวดล้อมที่บันทึกข้อผิดพลาดและการเข้าถึงเชลล์ไม่พร้อมใช้งานเช่นโฮสต์ที่ใช้ร่วมกัน ในกรณีที่เป็น IDE กับดีบักระยะไกลเป็นเครื่องมือเดียวที่ช่วยให้คุณทำสิ่งที่ง่ายเช่นมุมมองหรือstderrstdout


0

ปัญหาในการใช้คำสั่งการพิมพ์คือมันทำให้รหัสของคุณยุ่งเหยิง IE คุณมีฟังก์ชั่นที่มี 10 ส่วนและคุณรู้ว่ามันเกิดปัญหาที่ไหนสักแห่ง แต่คุณไม่แน่ใจว่าอยู่ที่ไหน ดังนั้นคุณเพิ่มคำสั่งการพิมพ์พิเศษ 10 คำสั่งเพื่อระบุตำแหน่งของบั๊ก เมื่อคุณพบและแก้ไขข้อผิดพลาดของคุณได้แล้วคุณจะต้องล้างข้อมูลโดยลบคำสั่งการพิมพ์ทั้งหมด บางทีคุณอาจจะทำอย่างนั้น บางทีคุณอาจลืมและมันจะจบลงด้วยการผลิตและคอนโซลของผู้ใช้ของคุณจะเต็มไปด้วยการแก้ไขข้อบกพร่อง


0

ฉันชอบคำถามนี้ไหม ฉันไม่เคยกล้าที่จะวางท่า ...

ดูเหมือนว่าผู้คนมีวิธีการทำงานที่แตกต่างกัน สำหรับฉันสิ่งที่ดีที่สุดคือ:

  • มีรูปแบบความคิดที่มั่นคงของรหัสของฉันรวมถึงการจัดการหน่วยความจำ
  • การใช้เครื่องมือ (เช่นคำสั่งพิมพ์) เพื่อติดตามสิ่งที่เกิดขึ้น

ฉันได้รับโปรแกรมการใช้ชีวิตมานานกว่า 40 ปีแล้วทำงานที่แอพพลิเคชั่นด้านเทคนิคและวิทยาศาสตร์ที่ไม่น่าสนใจใน C ++ และ Python ทุกวันและฉันมีประสบการณ์ส่วนตัวที่ดีบักเกอร์ไม่ได้ช่วยฉันสักนิด

ฉันไม่ได้บอกว่าดี ฉันไม่ได้บอกว่าไม่ดี ฉันแค่ต้องการแบ่งปัน


1
ทำไมคุณคิดว่านี่เป็นคำตอบที่ดี? และคุณคิดว่านี่เป็นคำถามที่ดีสำหรับ Stackoverflow หรือไม่
DavidG

ฉันใช้เวลาพอสมควรก่อนที่ฉันจะยอมรับว่าสำหรับผู้ที่ debuggers บางคนไม่ได้ผลอย่างเหมาะสม ฉันต้องการช่วยผู้อื่นด้วยความคิดเดียวกันถึงจุดนั้นก่อนหน้านี้ สำหรับคำถามฉันคิดว่ามันมีประโยชน์เพราะมันเปิดข้อห้าม ...
Jacques de Hooge

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

คุณรู้หรือไม่ (คุณภาพสูง) เวที (หรือแท็กใน SO) ที่คำถามดังกล่าวจะถูกวางไว้อย่างดี?
Jacques de Hooge

ไม่มีที่ใดในเครือข่าย SO ที่อนุญาตให้มีคำถามความคิดเห็นฉันกลัว
DavidG

-2

มันไม่ใช่แค่การดีบั๊ก IDE ช่วยให้คุณสร้างซอฟต์แวร์ที่ดีขึ้นเร็วขึ้นในหลายวิธี:

  • เครื่องมือ refactoring
  • IntelliSense ที่ทำให้ api ค้นพบได้มากขึ้นหรือเตือนการสะกดคำ / กรณีของรายการที่คุ้นเคย (ไม่ค่อยได้ใช้ถ้าคุณใช้ระบบเดียวกันเป็นเวลา 15 ปี แต่หายาก)
  • บันทึกในการพิมพ์โดยอัตโนมัติตัวแปรและชื่อชั้น
  • ค้นหาข้อผิดพลาดบางประเภทก่อนที่คุณจะเริ่มคอมไพล์
  • ข้ามไปที่การประกาศ / คำนิยามตัวแปร / วิธี / คลาสโดยอัตโนมัติแม้ว่าจะไม่ได้อยู่ในไฟล์หรือโฟลเดอร์เดียวกัน
  • ทำลายข้อยกเว้นที่ไม่ได้จัดการและจัดการ

ฉันสามารถไปต่อ


2
เอ่อ ... นั่นไม่ใช่คำถาม
vmarquez

2
สิ่งเหล่านี้ล้วนเป็นคุณสมบัติที่ดีของ IDE เช่นกัน แต่ส่วนใหญ่เกี่ยวข้องกับสิ่งที่เรียกว่า "การแก้ไขอัจฉริยะ" ฉันเข้าใจถึงคุณค่าของเครื่องมือแก้ไขอัจฉริยะ แต่การแก้ไขจุดบกพร่องด้วยภาพเป็นสิ่งที่ฉันต้องการจะถาม
Bill Karwin

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