คำถามติดแท็ก debugging

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

4
วิธีที่ถูกต้องในการจัดการกับการแก้ปัญหาการส่งออกใน Java คืออะไร
ในขณะที่โครงการ Java ปัจจุบันของฉันเติบโตขึ้นเรื่อย ๆ ฉันรู้สึกว่าจำเป็นที่จะต้องเพิ่มการดีบักเอาต์พุตในหลาย ๆ จุดของโค้ดของฉัน หากต้องการเปิดใช้งานหรือปิดใช้งานคุณลักษณะนี้อย่างเหมาะสมขึ้นอยู่กับการเปิดหรือปิดเซสชันการทดสอบฉันมักจะใส่private static final boolean DEBUG = falseจุดเริ่มต้นของชั้นเรียนที่การทดสอบของฉันกำลังตรวจสอบอยู่และใช้วิธีนี้เล็กน้อย (เช่น): public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } และไม่ชอบ แต่นั่นไม่ได้ทำให้ฉันสุขใจเพราะแน่นอนว่ามันใช้ได้ แต่อาจมีหลายคลาสเกินไปที่จะตั้งค่า DEBUG ให้เป็นจริงถ้าคุณไม่จ้องมองเพียงสองสามคน ในทางกลับกันฉัน (เหมือน - ฉันคิดว่า …

20
คุณจะรับมือกับข้อผิดพลาดที่แปลกประหลาดจริงๆที่ทำให้คุณงงมานานกว่า 10 ชั่วโมงได้อย่างไร? [ปิด]
คุณรู้ว่าพวกเขาข้อผิดพลาดที่ไม่เหมาะสม ในที่ที่มันดูเหมือนว่าเครมลินเพิ่งกระโดดเข้าไปในชิปของคุณและทำบางสิ่งบางอย่างให้เลอะ คุณเดินเล่นเขียนเรื่องเรียกลุงหรือเปล่า

13
วิธีปรับปรุงความสามารถในการดีบักโค้ดที่มีอยู่ [ปิด]
งานทั่วไปในโลกแห่งการทำงานนั้นเกี่ยวข้องกับโค้ดที่มีอยู่ แต่มีบั๊กกี้ อะไรคือเคล็ดลับในการพัฒนาทักษะของคุณในฐานะนักดีบัก?
29 debugging 

3
คำสำหรับคุณสมบัติ 'ลวง' หรือข้อผิดพลาดโดยเจตนาคืออะไร [ปิด]
ฉันลืมคำศัพท์การเขียนโปรแกรมสแลง สิ่งนี้เป็นข้อผิดพลาดโดยเจตนาหรือคุณสมบัติล่อที่ใช้เป็นสิ่งที่ทำให้ไขว้เขว ตัวอย่างการใช้งาน "สวัสดี Bob, QA กำลังทำการตรวจสอบวันนี้ใส่$THINGลงในโมดูลเพื่อให้พวกเขามีปัญหาในการค้นหาจริง" สิ่งนี้สามารถนำไปใช้ในเชิงลบเพื่อให้มีข้อบกพร่องโดยเจตนาที่ชัดเจนมากที่จะค้นพบว่าเป็นสิ่งที่ทำให้ไขว้เขวจากปัญหาจริง นอกจากนี้ยังสามารถใช้ในเชิงบวก มันเหมือนกับวิธีที่คุณปล่อยให้สุนัขกู้ภัย 'ค้นหา' ผู้ที่ตกเป็นเหยื่อเมื่อค้นหาพื้นที่ภัยพิบัติ นอกจากนี้ยังสามารถใช้ในการตรวจสอบว่ากระบวนการ QA จับข้อบกพร่องได้จริง คำศัพท์ที่ฉันกำลังมองหาคืออะไร?

10
เหตุใดโปรแกรมเมอร์ใหม่จึงไม่สนใจข้อความแสดงข้อผิดพลาดของคอมไพเลอร์ / ข้อความแสดงข้อยกเว้นรันไทม์ [ปิด]
ฉันคิดว่าเราทุกคนเห็นสิ่งนี้แล้ว ผู้เริ่มต้นถามคำถามเกี่ยวกับ Stack Overflow ที่เป็นไปตามเค้าร่างพื้นฐาน ... ฉันกำลังพยายามทำ(คำอธิบายเป้าหมายที่คลุมเครือมาก)แต่มันไม่ทำงาน / ฉันได้รับข้อผิดพลาด / ข้อยกเว้น กรุณาช่วย! มันไม่แปลกที่หลายคนคิดว่าไม่จำเป็นต้องวางข้อความแสดงข้อผิดพลาด? ฉันสงสัยว่าจิตวิทยาของสิ่งนี้คืออะไร เกี่ยวกับข้อความแสดงข้อผิดพลาดที่ทำให้คนเริ่มคิดว่าพวกเขาไร้ประโยชน์และไม่คุ้มค่าที่จะให้ความสนใจอะไร คำตอบที่ฉันค้นหาไม่ใช่ “ พวกเขาไม่เข้าใจข้อความแสดงข้อผิดพลาด” นั่นไม่ได้อธิบายว่าทำไมพวกเขาถึงไม่บอกคนอื่นที่อาจเข้าใจ

2
ฉันจะดีบัก JSP ได้อย่างไร
ฉันพยายามแก้ไข JSP สำหรับโครงการและฉันได้รับ NullPointerException ที่ไหนสักแห่งใน JSP เมื่อได้รับการร้องขอจากเซิร์ฟเวอร์ของฉัน เว็บเซิร์ฟเวอร์ของฉัน (JBoss) กำลังรายงานข้อยกเว้น แต่ให้หมายเลขบรรทัดปลอม มีการรายงานว่ามีข้อยกเว้นเกิดขึ้นที่บรรทัด 702 แต่ JSP ของฉันมีความยาวเพียง 146 บรรทัดดังนั้นฉันจึงไม่สามารถระบุว่าสายใดสำลัก เทคนิคที่ดีในการแก้ไขข้อผิดพลาดใน JSP มีอะไรบ้าง ฉันใช้ IntelliJ 9 Ultimate เป็น IDE ของฉัน ขอบคุณ
26 java  ide  debugging  jsp  intellij 

7
แยกการคำนวณค่าส่งคืนและคำสั่งส่งคืนในวิธีเดียวหรือไม่
ฉันได้พูดคุยกับเพื่อนร่วมงานเกี่ยวกับการทำลายreturnคำสั่งและคำสั่งที่คำนวณค่าส่งคืนในสองบรรทัด ตัวอย่างเช่น private string GetFormattedValue() { var formattedString = format != null ? string.Format(format, value) : value.ToString(); return formattedString; } แทน private string GetFormattedValue() { return format != null ? string.Format(format, value) : value.ToString(); } รหัสฉลาดฉันไม่เห็นคุณค่าในตัวแปรแรก สำหรับฉันหลังมีความชัดเจนโดยเฉพาะอย่างยิ่งสำหรับวิธีการที่สั้น ข้อโต้แย้งของเขาไม่ว่าอะไรก็ตามที่ตัวแปรในอดีตนั้นง่ายต่อการตรวจแก้จุดบกพร่อง - ซึ่งค่อนข้างจะเป็นข้อดีเล็กน้อยเนื่องจาก VisualStudio ช่วยให้เราสามารถตรวจสอบข้อความได้อย่างละเอียดมากเมื่อการดำเนินการหยุดลงเนื่องจากจุดแตกหัก คำถามของฉันคือถ้ามันยังคงเป็นจุดที่ถูกต้องในการเขียนรหัสที่ชัดเจนน้อยลงเพียงเพื่อให้การดีบักการเหลือบง่ายขึ้น? มีข้อโต้แย้งเพิ่มเติมสำหรับตัวแปรที่มีการคำนวณแยกและreturnคำสั่งหรือไม่

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

3
ฉันจะวินิจฉัย async / รอคอยการหยุดชะงักได้อย่างไร
ฉันกำลังทำงานกับ codebase ใหม่ที่ใช้ async / await อย่างหนัก คนส่วนใหญ่ในทีมของฉันก็ค่อนข้างใหม่สำหรับ async / คอย โดยทั่วไปเรามักจะยึดถือแนวทางปฏิบัติที่ดีที่สุดตามที่ระบุไว้โดย Microsoftแต่โดยทั่วไปต้องการบริบทของเราที่จะไหลผ่านการเรียกใช้ async และทำงานกับไลบรารีที่ไม่ConfigureAwait(false)ต้องการ รวมทุกสิ่งเหล่านั้นเข้าด้วยกันและเราพบ aslock deadlock ที่อธิบายไว้ในบทความ ... ทุกสัปดาห์ พวกเขาจะไม่ปรากฏขึ้นในระหว่างการทดสอบหน่วยเพราะแหล่งข้อมูลของเราเยาะเย้ย (มักจะผ่านTask.FromResult) ไม่เพียงพอที่จะเรียกการหยุดชะงัก ดังนั้นในระหว่างการทดสอบรันไทม์หรือการรวมการบริการบางอย่างเพิ่งออกไปทานอาหารกลางวันและไม่ส่งคืน นั่นจะฆ่าเซิร์ฟเวอร์และโดยทั่วไปก็ทำสิ่งต่าง ๆ เป็นระเบียบ ปัญหาคือการติดตามจุดที่เกิดข้อผิดพลาด (โดยปกติแล้วจะไม่เป็นแบบซิงค์ตลอดเวลา) โดยทั่วไปแล้วจะเกี่ยวข้องกับการตรวจสอบรหัสด้วยตนเองซึ่งใช้เวลานานและไม่สามารถใช้งานได้โดยอัตโนมัติ วิธีที่ดีกว่าในการวินิจฉัยสิ่งที่ทำให้เกิดการหยุดชะงักคืออะไร
24 c#  debugging  async 

13
กลายเป็นดีกว่า Bug-ผู้ให้บริการ
ฉันรักการเป็นโปรแกรมเมอร์ ที่นั่นฉันพูดมัน อย่างไรก็ตามด้วยที่กล่าวว่าฉันได้ตระหนักว่าเมื่อเร็ว ๆ นี้ว่าฉันไม่สามารถยืนแก้ไขข้อผิดพลาด เลย ในความเป็นจริงในขณะที่ฉันกำลังพัฒนาบางสิ่งบางอย่างผลผลิตของฉันสูงมาก แม้ว่าการเขียนการทดสอบหน่วยและทำการทดสอบด้วยตนเองของการพัฒนาของฉันฉันมักจะมีประสิทธิผลจริงๆ ฉันสามารถโฟกัสได้ดีและสามารถทำงานให้เสร็จได้ อย่างไรก็ตามเมื่อเวลา QA มาถึงและฉันกำลังทำงานเพื่อแก้ไขข้อบกพร่องแรงบันดาลใจของฉันใช้จิกหัวอย่างมาก ฉันต้องบังคับตัวเองด้วยมาตรการที่รุนแรง (คุณรู้ว่าเพลง BPM สูงคาเฟอีนในปริมาณที่มากเกินไป ฯลฯ ) เพื่อทำสิ่งใดให้เสร็จ งานของฉันมักจะเกี่ยวข้องกับการก้าวเข้าสู่โครงการขนาดใหญ่ที่มีอยู่และเพิ่มคุณสมบัติใหม่หรือแก้ไขข้อบกพร่องดังนั้นฉันจึงไม่สามารถบอกนายจ้างของฉันว่าฉันต้องการสองสามสัปดาห์ในการเขียนการทดสอบหน่วยสำหรับรหัสทั้งหมดของพวกเขา :) นอกจากนี้ เทคโนโลยีเซิร์ฟเวอร์ที่เรามักใช้นั้นเป็นสิ่งที่ห้ามไม่ให้ทดสอบและรวมเข้าด้วยกันเนื่องจากมีปัญหาเกี่ยวกับตัวโหลดคลาส Java เล็กน้อย ฉันไม่ได้ต่อต้านการแก้ไขบั๊กอย่างสมบูรณ์บางครั้งมันก็สนุก แต่ก็ไม่สนุกเลย เมื่อคุณต้องทำการเปลี่ยนแปลงเล็กน้อยและรอ 30 วินาทีถึง 3 นาทีเพื่อให้สามารถดูว่าพวกเขาทำงานหรือไม่ (เนื่องจากวิธีการทำงานของระบบ) ฉันจะปรับปรุงประสิทธิภาพและแรงจูงใจในการแก้ไขข้อผิดพลาดได้อย่างไร เป็นสิ่งที่โปรแกรมเมอร์ส่วนใหญ่จัดการกับนี้หรือไม่?

16
ทักษะการดีบักมีความสำคัญต่อการเป็นโปรแกรมเมอร์ดีหรือไม่?
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ โปรแกรมเมอร์ควรต้องการทักษะการดีบั๊กหรือไม่? หากฉันมีผู้สมัครที่ไม่สามารถค้นหาข้อผิดพลาดในโปรแกรมที่กำหนด แต่สามารถแก้ปริศนาและโปรแกรมทั้งหมดได้ฉันควรพิจารณาเขาสำหรับงานนี้หรือไม่? แก้ไข: - ปริศนาเป็นลูกบอลสีแดงปกติสีฟ้าและสีแดงสีน้ำเงิน โปรแกรมเปรียบเสมือนการค้นหาค่าศูนย์ k ต่อเนื่องในอาร์เรย์ โปรแกรมการดีบักเป็นสิ่งที่ล้มเหลวเนื่องจากเงื่อนไขซึ่งควร>> แต่เป็น> ทุกอย่างอยู่บนกระดาษ
24 debugging 

5
การดีบักหน่วยความจำเสียหาย
ก่อนอื่นฉันรู้ว่านี่ไม่ใช่คำถามสไตล์คำถาม & คำตอบที่สมบูรณ์แบบด้วยคำตอบที่สมบูรณ์ แต่ฉันไม่สามารถคิดถ้อยคำใด ๆ ที่จะทำให้มันดีขึ้น ฉันไม่คิดว่าจะมีวิธีแก้ปัญหาที่สมบูรณ์สำหรับเรื่องนี้และนี่คือหนึ่งในเหตุผลที่ฉันโพสต์ไว้ที่นี่แทนที่จะเป็น Stack Overflow เมื่อเดือนที่แล้วฉันได้เขียนรหัสเซิร์ฟเวอร์ (mmorpg) ที่ค่อนข้างเก่าเพื่อให้ทันสมัยและง่ายต่อการขยาย / ดัดแปลง ฉันเริ่มต้นด้วยส่วนเครือข่ายและใช้ห้องสมุดบุคคลที่สาม (libevent) เพื่อจัดการสิ่งต่าง ๆ สำหรับฉัน ด้วยการเปลี่ยนแฟคตอริ่งและการเปลี่ยนรหัสใหม่ฉันได้แนะนำคอร์รัปชั่นหน่วยความจำบางแห่งและฉันพยายามดิ้นรนหาว่ามันเกิดอะไรขึ้น ฉันดูเหมือนจะไม่สามารถทำซ้ำได้อย่างน่าเชื่อถือบนสภาพแวดล้อมการพัฒนา / การทดสอบของฉันแม้ว่าจะใช้บอตแบบดั้งเดิมเพื่อจำลองการโหลดบางอย่างฉันจะไม่เกิดข้อผิดพลาดอีกต่อไป (ฉันแก้ไขปัญหาเรื่องเสรีภาพซึ่งทำให้บางสิ่ง) ฉันได้ลองแล้ว: Valgrinding นรกออกมาจากมัน - ไม่มีการเขียนที่ไม่ถูกต้องจนกว่าสิ่งที่จะเกิดปัญหา (ซึ่งอาจใช้เวลา 1+ วันในการผลิต .. หรือเพียงหนึ่งชั่วโมง) ซึ่งทำให้ฉันงงงันจริง ๆ ในบางครั้งมันจะเข้าถึงหน่วยความจำที่ไม่ถูกต้อง โอกาส? (มีวิธีการ "กระจาย" ช่วงที่อยู่หรือไม่) เครื่องมือวิเคราะห์รหัส ได้แก่ ความครอบคลุมและ cppcheck ในขณะที่พวกเขาชี้ให้เห็นถึง .. ความร้ายกาจและคดีขอบในรหัสไม่มีอะไรร้ายแรง บันทึกกระบวนการจนกว่ามันจะล้มเหลวด้วย gdb …
23 c++  debugging  memory 

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

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

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

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