ไฟล์การตั้งค่าทำอย่างไรเสียหาย?


10

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

ไฟล์ค่ากำหนดเสียหายอย่างไร? นี่เป็นข้อผิดพลาดในการอ่าน / เขียนระดับต่ำหรือมีข้อผิดพลาดระดับสูงกว่าในบางกรณีหรือไม่ มันเป็นเพียง XML ผิดรูปแบบหรือสะกดผิด?

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

คำตอบ:


6

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

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


4
ฉันไม่เชื่อ หากเป็นกรณีนี้แอปจะต้องเขียนไม่ดีมากเนื่องจากต้องใช้ 2 คำพิเศษเพื่อหลีกเลี่ยงข้อผิดพลาดที่เห็นได้ชัดนี้ โค้ดตัวอย่างของ Apple สำหรับการเขียนโปรแกรมใช้วิธีการ-writeToFile:atomically:YES("ข้อมูลถูกเขียนลงในไฟล์สำรองแล้ว - โดยสมมติว่าไม่มีข้อผิดพลาดเกิดขึ้น - ไฟล์สำรองจะถูกเปลี่ยนชื่อเป็นชื่อที่ระบุ") rename()ฟังก์ชั่นPOSIX รับประกันว่าไฟล์จะมีอยู่ "แม้ว่าระบบจะผิดพลาดในระหว่างการดำเนินการ"
เคน

3

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

(พิจารณาว่ามีการใช้ plists สำหรับทุกสิ่งเช่น drag-n-drop และคลิปบอร์ด, สิทธิ์ sandbox สำหรับเปิดแอพ, ส่วนต่อประสานผู้ใช้สำหรับทุกแอพและแม้แต่ไอคอนที่จะแสดงใน Finder มันน่าเหลือเชื่อถ้า มีข้อผิดพลาดในรหัสการเขียนแบบ plist ซึ่งเพิ่งเกิดขึ้นเพื่อไขไฟล์การตั้งค่าสำหรับแอพบางตัว แต่ไม่ใช่สิ่งอื่นใด!)

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

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

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

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


นั่นดูน่าสนใจ. คุณกำลังบอกว่าปัญหานี้เป็นปัญหาเฉพาะแอปและเกี่ยวข้องกับข้อบกพร่องหรือการกำกับดูแลที่อนุญาตให้ตั้งค่าที่ไม่ถูกต้องและไม่ได้รับการตรวจสอบก่อนการใช้งานในภายหลังไม่ใช่การอ่าน / เขียนหรือการจัดการทั่วไปของเพลท มันยังคงทำให้ฉันประหลาดแม้ว่าจะมีบางอย่างที่เหมือนกัน (และเป็นทางการ) เหมือน Dock ( apple.stackexchange.com/questions/33950/… ) จะมีปัญหาแม้ว่าอาจจะเป็นข้อยกเว้นและเป็นข้อผิดพลาดในการอ่าน / เขียนจริงๆ
wxs

วอล์คเกอร์: ถ้าใครบางคนมีหนึ่งในไฟล์ plist Dock ที่เสียหายเหล่านี้มันเป็นเรื่องง่ายที่จะตรวจสอบ เงินของฉันยังคงเป็นจุดบกพร่องในแอพ (การตั้งค่าระบบหรือ Dock) ไม่ใช่รหัส plist
Ken

1

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

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