คำถามติดแท็ก error-messages

9
โปรแกรมเมอร์สามเณรผิดหวังเพราะไม่มีคำศัพท์ในคอมไพเลอร์ผิดพลาด
เพื่อนในครอบครัวของฉันขอความช่วยเหลือจากเขาเมื่อเขาเรียนรู้การเขียนโปรแกรม (ในภาษา C) ในขณะที่เรากำลังพูดถึงเขาแสดงความไม่พอใจเกี่ยวกับการมีเวลาที่ยากลำบากในการทำความเข้าใจข้อความแสดงข้อผิดพลาดที่คอมไพเลอร์ของเขา (GCC) ให้เขาเมื่อเขาทำผิด เขาไม่เข้าใจคำศัพท์ทั้งหมดที่ใช้และบางครั้งเป็นการรวมกันของพวกเขาซึ่งอยู่นอกเหนือความเข้าใจของเขา เขาถามฉันว่า "ทำไมคอมไพเลอร์ของเอกสารถึงไม่รวมคำอธิบายข้อความผิดพลาดอีกต่อไปแล้ว?" - และฉันไม่มีคำตอบที่ดีสำหรับเขา ฉันเอง - ในฐานะโปรแกรมเมอร์ที่มีประสบการณ์มาก - ไม่ค่อยเกิดขึ้นในสถานการณ์นี้ แต่สิ่งที่เกิดขึ้นได้ยากเหล่านั้นเกิดขึ้น - ข้อความแสดงข้อผิดพลาดแปลกใหม่ที่ฉันไม่เคยพบมาก่อน ฉันจัดการโดยค้นหาข้อความแสดงข้อผิดพลาดในเครื่องมือค้นหา แต่ดูเหมือนจะไม่ได้ผลสำหรับเขา - โดยเฉพาะอย่างยิ่งเนื่องจากข้อผิดพลาดที่เขาพบพบบ่อยและเกิดขึ้นในหลายกรณีที่แตกต่างกันซึ่งเขามีปัญหาเกี่ยวกับเขา ด้วยตัวเอง ดังนั้นโปรแกรมเมอร์มือใหม่ควรเข้าหาความท้าทายในการทำความเข้าใจข้อความแสดงข้อผิดพลาดของคอมไพเลอร์อย่างไร? โดยเฉพาะกับการรวมกันของ C และ GCC?

6
ทำให้การค้นหารหัสโดยใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลก
รูปแบบทั่วไปสำหรับการค้นหาจุดบกพร่องตามสคริปต์นี้: สังเกตความแปลกประหลาดเช่นไม่มีเอาต์พุตหรือโปรแกรมหยุดทำงาน ค้นหาข้อความที่เกี่ยวข้องในบันทึกหรือผลลัพธ์ของโปรแกรมเช่น "ไม่พบ Foo" (ข้อมูลต่อไปนี้เกี่ยวข้องเฉพาะในกรณีที่เป็นเส้นทางที่ใช้ในการค้นหาจุดบกพร่องหากการติดตามสแต็กหรือข้อมูลการดีบักอื่น ๆ พร้อมใช้งานนั่นเป็นอีกเรื่องหนึ่ง) ค้นหารหัสที่ข้อความถูกพิมพ์ ตรวจแก้จุดบกพร่องรหัสระหว่างสถานที่แรกที่ Foo ป้อน (หรือควรป้อน) รูปภาพและที่พิมพ์ข้อความ ขั้นตอนที่สามนั้นเป็นขั้นตอนที่กระบวนการดีบั๊กมักจะหยุดชะงักเนื่องจากมีหลายสถานที่ในรหัสที่พิมพ์ "ไม่พบ Foo" (หรือสตริงเทมเพลตCould not find {name}) ในความเป็นจริงการสะกดผิดหลายครั้งช่วยให้ฉันค้นหาตำแหน่งจริงได้เร็วกว่าที่ฉันคาดไว้ - ทำให้ข้อความที่ไม่ซ้ำกันในทั้งระบบและบ่อยครั้งทั่วโลกส่งผลให้เครื่องมือค้นหาที่เกี่ยวข้องเข้าชมทันที ข้อสรุปที่ชัดเจนจากสิ่งนี้คือเราควรใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลกในรหัสการเข้ารหัสอย่างหนักเป็นส่วนหนึ่งของสตริงข้อความและอาจตรวจสอบว่ามีการเกิดขึ้นเพียงครั้งเดียวของแต่ละ ID ในฐานรหัส ในแง่ของการบำรุงรักษาชุมชนนี้คิดว่าอะไรคือข้อดีและข้อเสียที่สำคัญที่สุดของวิธีการนี้และคุณจะใช้งานวิธีนี้อย่างไรหรือจะทำให้แน่ใจได้อย่างไรว่าการดำเนินการนั้นไม่จำเป็นเลย (สมมติว่าซอฟต์แวร์

6
ควรแสดงข้อมูลเกี่ยวกับข้อผิดพลาดแก่ผู้ใช้มากน้อยเพียงใด
แอปพลิเคชันสามารถโยนข้อผิดพลาดได้เสมอ หากมีข้อผิดพลาดเกิดขึ้นผู้ใช้ควรได้รับการแจ้งเตือนเพราะสิ่งที่เขาขอให้แอปพลิเคชันทำไม่สำเร็จ อย่างไรก็ตามผู้ใช้ควรได้รับข้อมูลเท่าไหร่? ฉันคิดว่าพวกเราส่วนใหญ่เห็นด้วยที่จะไม่แสดงการติดตามสแต็ก ( ควรติดตามสแต็กในข้อความแสดงข้อผิดพลาดที่ปรากฏแก่ผู้ใช้หรือไม่ ) แต่ฉันไม่พบคำถามเกี่ยวกับเนื้อหาข้อผิดพลาดที่เหลือหรือสิ่งที่จะแสดงต่อ ผู้ใช้งาน ตัวอย่างเช่นภาษาที่รองรับข้อยกเว้น (.net, java) มีประเภทข้อยกเว้นที่จะแบ่งปันโดยที่ข้อยกเว้นเกิดขึ้นและข้อความที่ค่อนข้างชัดเจนเพื่อให้สอดคล้องกับข้อยกเว้น สิ่งนี้ควรถูกซ่อนจากผู้ใช้ด้วยหรือไม่ หรือเราควรแสดงสิ่งนี้ต่อไป? หรือเราควรแสดงข้อความทั่วไป? หรือเราควรแสดงหนึ่งในจำนวนข้อความตามข้อยกเว้นพื้นฐานคืออะไร

3
ที่อยู่ 0000000C เป็นที่อยู่พิเศษหรือไม่
เมื่อการเขียนโปรแกรมบางครั้งสิ่งที่แตก คุณทำผิดพลาดและโปรแกรมของคุณพยายามอ่านจากที่อยู่ผิด สิ่งหนึ่งที่โดดเด่นสำหรับฉันที่มักจะมีข้อยกเว้นเหล่านั้น: Access violation at address 012D37BC in module 'myprog.exe'. Read of address 0000000C. ตอนนี้ฉันเห็นบันทึกข้อผิดพลาดมากมายและสิ่งที่โดดเด่นสำหรับฉันคือ: 0000000C นี่เป็นที่อยู่ "พิเศษ" หรือไม่ ฉันเห็นการละเมิดการเข้าถึงอื่น ๆ ที่มีการอ่านที่ไม่ดี แต่ที่อยู่ดูเหมือนจะสุ่ม แต่ที่นี่กลับมาในสถานการณ์ที่แตกต่างกันโดยสิ้นเชิง

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

12
นักพัฒนามีปัญหาอะไรกับข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์? [ปิด]
มันยังคง astounds ฉันว่าในวันนี้และอายุผลิตภัณฑ์ที่มีปีของการใช้งานภายใต้เข็มขัดของพวกเขาสร้างขึ้นโดยทีมงานมืออาชีพยังคงไปในวันนี้ - ไม่ให้ข้อความผิดพลาดที่เป็นประโยชน์ให้กับผู้ใช้ ในบางกรณีการเพิ่มข้อมูลเพิ่มเติมเพียงเล็กน้อยอาจช่วยให้ผู้ใช้ไม่ต้องประสบปัญหาอีกต่อไป โปรแกรมที่สร้างข้อผิดพลาดสร้างขึ้นด้วยเหตุผล มีทุกสิ่งที่จำเป็นเพื่อแจ้งให้ผู้ใช้ทราบถึงสาเหตุที่ทำให้เกิดข้อผิดพลาด และดูเหมือนว่าการให้ข้อมูลเพื่อช่วยเหลือผู้ใช้มีความสำคัญต่ำ ฉันคิดว่านี่เป็นความล้มเหลวครั้งใหญ่ ตัวอย่างหนึ่งมาจาก SQL Server เมื่อคุณลองและกู้คืนฐานข้อมูลที่ใช้งานอยู่มันจะไม่ถูกต้องนัก SQL Server รู้ว่ากระบวนการและแอปพลิเคชันใดกำลังเข้าถึง เหตุใดจึงไม่สามารถรวมข้อมูลเกี่ยวกับกระบวนการที่ใช้ฐานข้อมูลได้ ฉันรู้ว่าทุกคนไม่ส่งApplicatio_Nameแอตทริบิวต์ในสตริงการเชื่อมต่อของพวกเขา แต่แม้แต่คำแนะนำเกี่ยวกับเครื่องที่เป็นปัญหาอาจมีประโยชน์ ตัวเลือกอื่นเช่น SQL Server (และ mySQL) คือstring or binary data would be truncatedข้อความแสดงข้อผิดพลาดที่น่ารักและรายการเทียบเท่า บ่อยครั้งที่การอ่านคำสั่ง SQL อย่างง่าย ๆ ที่สร้างขึ้นและตารางแสดงว่าคอลัมน์ใดเป็นผู้ร้าย นี่ไม่ใช่กรณีเสมอไปและหากเอ็นจิ้นฐานข้อมูลหยิบขึ้นมาบนข้อผิดพลาดทำไมมันไม่สามารถช่วยเราได้ในเวลานั้นและเพียงแค่บอกเราว่ามันเป็นคอลัมน์ใด ในตัวอย่างนี้คุณสามารถยืนยันว่าอาจมีการแสดงที่มีประสิทธิภาพในการตรวจสอบและสิ่งนี้อาจเป็นอุปสรรคต่อผู้เขียน ใช่ฉันจะซื้อมัน เมื่อกลไกจัดการฐานข้อมูลรู้ว่ามีข้อผิดพลาดจะทำการเปรียบเทียบอย่างรวดเร็วหลังจากความจริงระหว่างค่าที่จะถูกจัดเก็บเทียบกับความยาวคอลัมน์ จากนั้นแสดงให้ผู้ใช้เห็น Adaptors Table ที่น่ากลัวของ ASP.NET ก็มีความผิดเช่นกัน สามารถดำเนินการค้นหาและสามารถได้รับข้อความแสดงข้อผิดพลาดที่บอกว่าข้อ จำกัด บางแห่งกำลังถูกละเมิด …

3
เหตุใดข้อความข้อผิดพลาดเทมเพลต C ++ จึงน่ากลัวมาก
เทมเพลต C ++ มีชื่อเสียงในด้านการสร้างข้อความแสดงข้อผิดพลาดที่ยาวและไม่สามารถอ่านได้ ฉันมีความคิดทั่วไปว่าทำไมข้อความแสดงข้อผิดพลาดแม่แบบใน C ++ จึงแย่มาก โดยพื้นฐานแล้วปัญหาคือว่าข้อผิดพลาดจะไม่ถูกเรียกจนกระทั่งคอมไพเลอร์พบไวยากรณ์ที่ไม่ได้รับการสนับสนุนจากบางประเภทในแม่แบบ ตัวอย่างเช่น: template <class T> void dosomething(T& x) { x += 5; } หากTไม่รองรับ+=ผู้ปฏิบัติงานคอมไพเลอร์จะสร้างข้อความแสดงข้อผิดพลาด และหากสิ่งนี้เกิดขึ้นลึกลงไปในห้องสมุดบางแห่งข้อความแสดงข้อผิดพลาดอาจยาวหลายพันบรรทัด แต่แม่แบบ C ++ นั้นเป็นเพียงกลไกสำหรับการพิมพ์เป็ดเวลาคอมไพล์ ข้อผิดพลาดแม่แบบ C ++ เป็นแนวคิดคล้ายกับข้อผิดพลาดประเภทรันไทม์ที่อาจเกิดขึ้นในภาษาแบบไดนามิกเช่น Python ตัวอย่างเช่นพิจารณารหัสไพ ธ อนต่อไปนี้: def dosomething(x): x.foo() ที่นี่หากxไม่มีfoo()วิธีใดตัวแปลภาษา Python จะแสดงข้อยกเว้นและแสดงการติดตามสแต็กพร้อมกับข้อความแสดงข้อผิดพลาดที่ค่อนข้างชัดเจนซึ่งระบุถึงปัญหา แม้ว่าข้อผิดพลาดจะไม่ถูกเรียกใช้จนกว่าล่ามจะอยู่ลึกเข้าไปในฟังก์ชั่นของห้องสมุด แต่ข้อความข้อผิดพลาดเกี่ยวกับรันไทม์ยังไม่ใกล้เคียงเท่าที่อาเจียนไม่สามารถอ่านได้โดยคอมไพเลอร์ C ++ ทั่วไป แล้วทำไมคอมไพเลอร์ C ++ ไม่สามารถบอกได้ชัดเจนว่าเกิดอะไรขึ้น …

9
ทำไม PHP Devs หลายคนเกลียดการใช้ isset () และ / หรือฟังก์ชั่นการป้องกันที่คล้ายกันของ PHP อย่างใดอย่างหนึ่งเช่น empty ()
ใน stackoverflow ฉันเห็นปัญหานี้หมดไปตลอดเวลา: E_NOTICE? == E_DEBUG หลีกเลี่ยง isset () และ @ พร้อม error_handler ที่ซับซ้อนยิ่งขึ้น วิธีการตั้งค่า PHP ไม่ให้ตรวจสอบการเลิกค้นหาดัชนีสำหรับ $ _GET เมื่อ E_NOTICE เปิดอยู่ วิธีหยุด PHP จากการบันทึกข้อผิดพลาด PHP Notice ฉันจะปิดประกาศ PHP 5.3 ดังกล่าวได้อย่างไร แม้แต่Pekka (ผู้ที่ให้คำแนะนำ PHP ที่เป็นของแข็งจำนวนมาก) ก็เจอกับE_NOTICEสัตว์ประหลาดที่หวั่นกลัวและหวังว่าจะได้ทางออกที่ดีกว่าการใช้isset(): isset () และเปล่า () ทำให้โค้ดน่าเกลียด โดยส่วนตัวแล้วฉันใช้isset()และempty()ในหลาย ๆ ที่เพื่อจัดการการไหลของแอปพลิเคชันของฉัน ตัวอย่างเช่น: public function do_something($optional_parameter = NULL) …

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

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

5
เครื่องหมายอัศเจรีย์ในข้อความแสดงข้อผิดพลาด [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา คุณคิดอย่างไรเกี่ยวกับการใช้เครื่องหมายอัศเจรีย์ในข้อความแสดงข้อผิดพลาด เช่น "ที่อยู่ไม่ถูกต้อง!" โดยส่วนตัวแล้วฉันคิดว่ามันไม่เพิ่มอะไรดูถูกผู้ใช้และทำให้ผลิตภัณฑ์ดูเหมือนว่าเขียนใน TRS-80 BASIC โดยเด็กอายุ 12 ปี

4
คุณจะกำหนดรหัสข้อผิดพลาดได้อย่างไร
เมื่อพัฒนาโครงการขนาดกลางคุณจะระบุสร้างและรักษารหัสข้อผิดพลาดได้อย่างไร ฉันสำหรับชีวิตของฉันไม่สามารถคิดวิธีที่ง่ายและสะอาดในการทำเช่นนั้น ความคิดของฉันบางส่วนเปลี่ยนชื่อคลาสและชื่อเมธอดเป็นสตริงจำนวนเต็ม แต่นั่นเป็นวิธีที่จะแสดงต่อผู้ใช้นานกว่าข้อเท็จจริงที่ว่าชื่อเมธอดและชื่อคลาสอาจเปลี่ยนไป (หวังว่าจะไม่!) คนอื่น ๆ กำลังใช้ระบบบันทึกที่เพิ่มขึ้น (เช่นเมื่อฉันสร้างข้อความแสดงข้อผิดพลาดขึ้นมาใหม่ให้เพิ่ม 1 ลงใน id ข้อความแสดงข้อผิดพลาดล่าสุด) แต่นั่นก็ไม่มีการรวบรวมกันอย่างสมบูรณ์ จะเจาะจงมากขึ้นฉันกำลังพูดถึงรหัสข้อผิดพลาดเช่น: Error 401 Unauthorized.

3
Python - ยืนยันกับ if & return
ฉันกำลังเขียนสคริปต์ที่ทำบางสิ่งบางอย่างกับไฟล์ข้อความ (สิ่งที่ไม่เกี่ยวข้องกับคำถามของฉัน) ดังนั้นก่อนที่ฉันจะทำบางสิ่งกับไฟล์ฉันต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่ ฉันสามารถทำสิ่งนี้ได้โดยไม่มีปัญหา แต่ปัญหาคือความสวยงาม นี่คือรหัสของฉันใช้สิ่งเดียวกันในสองวิธีที่แตกต่างกัน def modify_file(filename): assert os.path.isfile(filename), 'file does NOT exist.' Traceback (most recent call last): File "clean_files.py", line 15, in <module> print(clean_file('tes3t.txt')) File "clean_files.py", line 8, in clean_file assert os.path.isfile(filename), 'file does NOT exist.' AssertionError: file does NOT exist. หรือ: def modify_file(filename): if not os.path.isfile(filename): return …

4
รวมลิงก์ไปยังเอกสารที่เกี่ยวข้องในข้อความแสดงข้อผิดพลาดหรือไม่
เราสร้างห้องสมุดเชิงพาณิชย์และตัวอย่างรหัสที่ผู้พัฒนาภายนอกใช้ เรามีเอกสาร (ปิดให้บริการสำหรับผู้ใช้ที่ลงทะเบียน) ซึ่งอธิบายวิธีการใช้ห้องสมุดอย่างกว้างขวาง นักพัฒนาหลายคนเป็นผู้ใช้ครั้งแรกดังนั้นจึงพบข้อผิดพลาดพื้นฐานมากมาย เหมาะสมหรือไม่ที่จะรวมลิงค์ไปยังเอกสารในบันทึกข้อผิดพลาด? ข้อเสียที่เป็นไปได้คืออะไร? ฉันสามารถคาดการณ์บางอย่าง แต่มันเป็นไปได้ที่จะเอาชนะต่อไปนี้ URL เอกสารคู่มือล้าสมัย ข้อผิดพลาดเฉพาะรุ่นที่ไม่ปรากฏในเอกสารล่าสุด มีบางอย่างผิดปกติและเรากำลังเสียเวลาของผู้พัฒนาโดยส่งเขาไปยังเอกสารที่ไม่เกี่ยวข้อง ด้านล่างเป็นตัวอย่างของสิ่งที่ฉันหมายถึงมันเป็นความคิดที่ดีที่จะเพิ่มข้อความหนา? [ข้อผิดพลาด] ล้มเหลวในการดำเนินการเป้าหมาย org.apache.maven.plugins: maven-archetype-plugin: 1.2.3: สร้าง (default-cli) ในโครงการ standalone-pom: archetype ที่ต้องการไม่มีอยู่ (com.example.library ต้นแบบ: library-archetype-blank: 1.2.3.0) -> โปรดดูhttp://example.com/docs/setting-up-an-archetypeสำหรับข้อมูลเพิ่มเติมและการแก้ไขปัญหาที่เป็นไปได้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.