Jak debugować elisp?
Zwykle najprostszym sposobem debugowania jest użycie printf
. Co mogę zrobić, aby debugować emacs-lisp? Jak Mogę wydrukować coś do edytora emacs z elisp? Lub czy jest jakiś sposób na debugowanie kodu elisp?
Na przykład, Jak mogę sprawdzić, czy poniższy kod jest uruchamiany w pliku .emacs
?
(load "auctex.el" nil t t)
5 answers
Debuger (edebug) jest dość prosty w użyciu. Przejdź do definicji funkcji i wpisz M-x edebug-defun . Następnym razem, gdy zostanie wywołany, będziesz mógł przejść przez KOD, jak w przypadku każdego innego debugera. Typ ?Aby uzyskać listę skrótów klawiszowych, zapoznaj się z dokumentacją edebug.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 17:26:41
W GNU Emacs są dwa debuggery:
- edebug -- wyjaśnione w innym poście tutaj
- debug
Używam debug
. Są to wspólne punkty wejścia (sposoby jego wykorzystania):
M-x debug-on-entry
po którym następuje funkcja, którą chcesz wprowadzić za pomocą debuggera.M-x toggle-debug-on-error
-- Wprowadź debugger, gdy wystąpi błąd.-
M-x toggle-debug-on-quit
-- Wprowadź debugger, gdy użytkownik naciśnie C-G. - umieszczanie jawnych wywołań funkcji
debug
w określonych miejscach (punktach przerwania) w kodzie, aby wprowadzić debugger w tych miejscach:
(debug)
Przechodzisz przez debugger używając d , lub c , aby pominąć szczegóły konkretnej oceny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-21 02:16:06
Jest to przydatne do drukowania wartości
(message "Hello (%s)" foo)
Ale nie działa tak dobrze dla struktur danych. W tym celu użyj
(prin1 list-foo)
Lub (prin1-to-string), aby osadzić go w (wiadomości).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-10 18:05:26
Najprostszym sposobem debugowania może być interaktywne uruchamianie kodu. Możesz to zrobić w buforze Lispu, umieszczając swój punkt za wyrażeniem i uruchamiając C-x C-e (eval-last-sexp
).
Alternatywnie:
(message "hello world")
C-h F message aby dowiedzieć się więcej o wbudowanej funkcji wiadomości. Jeśli generujesz dużo wiadomości, możesz chcieć dostosować zmienną message-log-max
do większej wartości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 17:29:25
Aby odpowiedzieć na twoje pytania jeden po drugim:
- Wydrukuj coś: jest milion sposobów. (wiadomość "Hello") umieszcza łańcuch w obszarze ECHA; (insert "hello") umieszcza łańcuch w bieżącym buforze w punkcie...
- Jak mogę sprawdzić, czy następujący kod jest uruchomiony: po prostu zamieniłbym " auctex.el "z (powiedzmy)" frotzumotzulous "(tzn. dowolny ciąg znaków, o ile nie nazywa prawdziwego pliku), a następnie sprawdź, czy otrzymasz komunikat o błędzie. Jeśli nie pojawi się błąd, to wyraźnie, że kod nie jest bycie uciekającym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 23:08:46