Kiedy wystąpi błąd wewnątrz wartownika procesu lub podczas blokowania czcionek, Emacs nie pokazuje śladu wstecznego, mimo że debug-on-error
wcześniej był włączony.
Rozumiem, dlaczego te błędy są wychwytywane, ten sam błąd może zostać ponownie uruchomiony podczas próby przedstawienia śledzenia wstecznego. Jednak gdy chcę naprawdę debugować ten błąd, nie jest to bardzo pomocne. Wolę ryzykować, że Emacs przestanie odpowiadać, niż będę musiał z tego pracować:
error in process sentinel: Wrong type argument: stringp, nil
W końcu mogę po prostu rozpocząć drugą instancję, jeśli pierwsza zacznie wariować. Nieco większy kontekst pomógłby, gdy istnieje wiele miejsc, w których teoretycznie taki błąd mógłby teoretycznie wystąpić w wartowniku.
Jak więc zmusić Emacsa do pokazania debug-on-error
śladu wstecz, nawet w przypadkach, gdy nie ma to żadnego efektu?
Odpowiedzi:
Jeśli chodzi o wartowników procesowych, nie sądzę, żeby był to dobry powód. IOW Myślę, że to po prostu brakująca funkcja, więc sugeruję
M-x report-emacs-bug
.W przypadku blokowania czcionek problem jest trudniejszy, ponieważ tak naprawdę dzieje się tak, że błąd jest wyzwalany podczas blokowania jit, tj. Podczas ponownego wyświetlania, i nie możemy łatwo wejść do debuggera w tym momencie (IIRC w pewnym momencie Gerd próbował zrobić działa, ale nadal były poważne problemy). Możesz więc debugować go na jeden z następujących sposobów:
M-x jit-lock-debug-mode
która zmienia blokadę jit, aby działała zaraz po ponownym wyświetleniu, abyśmy mogli wejść do debuggera.M-: (setq font-lock-support-mode nil) RET
a następnie wyłącz + włącz ponownie blokadę czcionek. W ten sposób font-lock nie używa jit-locka, więc działa podczas polecenia użytkownika, a nie podczas kolejnego ponownego wyświetlania.źródło
debug-on-error
wydaje się , że działa dobrze na procesorach.--eval
a nie--debug-init
. Również jego obejście nie pomaga mi wrócić do.emacs.d