W jaki sposób pliki preferencji ulegają uszkodzeniu?

10

Przeczytałem kilka różnych artykułów na temat rozwiązywania problemów oraz pytania i odpowiedzi, w których sprawcą jest uszkodzony plik preferencji dla aplikacji lub procesu. Zazwyczaj rozwiązaniem jest usunięcie niepoprawnego pliku preferencji i zezwolenie na utworzenie nowego domyślnego pliku preferencji po zrestartowaniu dowolnego oprogramowania, które źle działało.

W jaki sposób plik preferencji ulega uszkodzeniu? Czy jest to po prostu błąd odczytu / zapisu niskiego poziomu, czy w niektórych przypadkach występuje błąd wyższego poziomu? Czy to po prostu źle sformułowany lub błędnie napisany kod XML?

Wydaje mi się, że mogę plutilpowiedzieć, czy w pliku występuje błąd składniowy, ale w jaki sposób błąd został wprowadzony? Nie mam pewności co do zwykłego źródła tych uszkodzonych plików. Dzięki.

wxs
źródło

Odpowiedzi:

6

Może to być spowodowane przez wiele rzeczy, ale uważam, że najczęstszą przyczyną jest to, gdzie plik jest zapisywany, a aplikacja kończy pracę przed zakończeniem zapisywania pliku. Może to być spowodowane zbyt dużymi narzutami systemu, aby w tym momencie pomyślnie zapisać.

Błędy sprzętowe z dyskiem twardym lub pamięcią mogą również powodować błędy danych, ale wyobrażam sobie, że do tego czasu będą to najmniejsze problemy.

AlanJC
źródło
4
Jestem sceptyczny. Jeśli tak się dzieje, aplikacja musiała być bardzo źle napisana, ponieważ potrzeba dosłownie 2 dodatkowych słów, aby uniknąć tego oczywistego błędu. Przykładowy kod Apple do pisania listy odtwarzania używa metody -writeToFile:atomically:YES(„dane są zapisywane w pliku kopii zapasowej, a następnie - przy założeniu braku błędów - nazwa pliku kopii zapasowej jest zmieniana na podaną nazwę”). Funkcja POSIX rename()gwarantuje, że plik będzie istniał „nawet jeśli system ulegnie awarii w trakcie operacji”.
Ken
3

Założę się, że w prawie każdym przypadku w pliku plist nie ma nic składniowego. Funkcje Apple do ładowania i zapisywania danych plist zyskują wiele uwagi i są bardzo użyteczne. Prawie każdy błąd został z pewnością znaleziony i naprawiony.

(Weź pod uwagę, że listy są używane do wszelkiego rodzaju rzeczy, takich jak przeciąganie i upuszczanie i schowek, uprawnienia piaskownicy do uruchamiania aplikacji, interfejsy użytkownika dla każdej aplikacji, a nawet która ikona wyświetlana w Finderze. Byłoby niewiarygodne, gdyby wystąpił błąd w kodzie pisania list, który akurat zepsuł pliki preferencji dla niektórych aplikacji, ale żadna z tych innych rzeczy!)

Plik preferencji aplikacji (plist) po prostu przechowuje niektóre struktury danych w pamięci na dysku. Więc jeśli aplikacja ma błąd, który powoduje, że coś jest ustawione nieprawidłowo, zostaje zapisana.

Często, gdy aplikacja zaczyna źle funkcjonować, możesz po prostu ją zamknąć i uruchomić ponownie. To resetuje wiele jego części i może rozwiązać problem. Pliki preferencji są ponownie ładowane z dysku, więc jeśli dotknięta część aplikacji została zapisana w stałej preferencji, ponowne uruchomienie aplikacji nie będzie miało wpływu: zła wartość zostanie ponownie załadowana. Wtedy pomocne może być usunięcie pliku preferencji. To jak ponowne uruchomienie aplikacji, ale dla rzeczy, które zostały zapisane.

Te rzeczy mogą się zdarzyć, ponieważ programiści zakładają, że dane ich aplikacji są poprawne. Jeśli kolor można wybrać tylko przez kliknięcie standardowego koła kolorów, użytkownik prawdopodobnie nie wykonuje żadnej dodatkowej pracy, aby sprawdzić, czy jest prawidłowy przed użyciem. (Dla porównania, aplikacja taka jak Safari wykonuje mnóstwo dodatkowej pracy, weryfikując wszystko, ponieważ ładuje i uruchamia pliki bezpośrednio z Internetu.)

Plusem jest to, że prawie zawsze jest poprawna i jest o wiele łatwiej, jeśli założymy, że wartości wewnętrzne są prawidłowe. Minusem jest to, że jeśli jakaś zła wartość w jakiś sposób się wślizguje (na przykład, że użytkownik zrobił coś zupełnie nieoczekiwanego), rzeczy mogą się zwariować, dopóki wszystko nie zostanie zresetowane.

Rozpoznać
źródło
To interesujące. Mówisz, że problem jest generalnie związany z aplikacją i wiąże się z błędem lub niedopatrzeniem, które pozwala na ustawienie złych wartości i ich weryfikację przed późniejszym użyciem, a nie z jakimkolwiek odczytem / zapisem lub ogólną obsługą listy. Wciąż wydaje mi się to tak dziwne, że coś tak powszechnego (i oficjalnego) jak Dock ( apple.stackexchange.com/questions/33950/... ) miałoby problem, chociaż być może jest to wyjątek i naprawdę jest to błąd odczytu / zapisu.
wxs
walker: Jeśli ktoś ma jeden z tych uszkodzonych plików Plist Docka, łatwo to sprawdzić. Moje pieniądze nadal zawierają błąd w aplikacji (Preferencje systemowe lub Dock), a nie kod Plist.
Ken
1

Jako starszy obywatel, któremu podważono problemy techniczne, odkryłem, że mój plik preferencji iTunes jest uszkodzony i powodowałem, że umowa licencyjna pojawiała się przy każdym otwarciu iTunes. Ponadto wszystkie moje preferencje musiały zostać zresetowane. Uważam, że powyższe odpowiedzi są poprawne, ponieważ tuż przed tym problemem miałem zmuszony do wyłączania komputera (problemy elektryczne w okolicy) i kilkakrotnego ponownego uruchamiania / połowy ponownego uruchamiania. Aplikacje zostały zakończone przed ukończeniem instrukcji / pisania. Ale naprawa odradzania nowego pliku preferencji iTunes została pokazana online i bardzo łatwa do zrobienia. Naprawił problem.

Bob Foss
źródło