Как определить номер строки программы на лиспе, вызвавшей ошибку ?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как определить номер строки программы на лиспе, вызвавшей ошибку ?

Как определить номер строки программы на лиспе, вызвавшей ошибку ?

Ответ
Поиск в этой теме
Непрочитано 01.06.2010, 10:10 #1
Как определить номер строки программы на лиспе, вызвавшей ошибку ?
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

Вопрос в теме. Есть такая возможность ?
AutoCAD 2008
Просмотров: 3246
 
Непрочитано 01.06.2010, 10:15
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ошибки бывают разные - синтаксические и логические. Номер строки мало что даст и при одних, и при других. Вот, например, код, гарантированно вызывающий ошибку при попытке загрузки:
Код:
[Выделить все]
(defun test( / ent)
  (if (=(type (setq ent (vl-catch-all-apply
                 (function
       (lambda()
     (car (entsel "\nSelect an entity <Cancel> : ")))))))'ename
(progn (princ (strcat "\nEntity type : " (cdr(assoc 0 (entget ent))))))
(progn (princ "\nYou didn't select any entity!"))))
Номер строки не поможет - ошибка будет не в ней.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2010, 10:24
#3
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Но ошибку вызывает вполне конкретная функция. Её-то можно определить ?
Как мне реагировать на подобное сообщение:
ошибка: неверный тип аргумента: lselsetp nil
swkx вне форума  
 
Непрочитано 01.06.2010, 10:28
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Как реагировать? Анализировать код. Или код на форум, и плюс описание ситуации, которая порождает ошибку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2010, 10:37
#5
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Алексей,

да я нашел ошибку, это не так уж и сложно. Мне непонятно, почему Лисп сам не тыкнет пальцем в функцию, вызвавшую ошибку.
swkx вне форума  
 
Непрочитано 01.06.2010, 10:45
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


swkx, ну не реализовано это в нем. Зато внимательности учит
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2010, 10:55
#7
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Вот теперь я получил ответ на свой вопрос
swkx вне форума  
 
Непрочитано 01.06.2010, 10:57
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Хотя, может, и реализовано...
Ха! Точно, реализовано: http://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.06.2010, 11:09
#9
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Алексей, я читал эту статью и раньше, и сейчас не понял, где именно нужная мне информация?
Разве что коммертарий Елпанова не видел «...Как раз, трассировщик ошибок и помогает увидеть код, который вызвал ошибку,...»
Это каким образом ?
swkx вне форума  
 
Непрочитано 01.06.2010, 11:11
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Так именно про трассировщик ошибок я и говорил. Скажу честно - я им не пользуюсь (обычно запускаю пошаговое выполнение, это мне хватало). Может, Евгений появится и прокомментирует...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2010, 12:44
#11
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


А что мешает использовать встроенный в редактор отлов ошибок?
В редакторе Vlide в меню "отладка" (для русской версии) ставим галочку на "останов на ошибке"!
Теперь при запуске исходных лисп-файлов (не компилированных) при возникновеннии ошибки на участке кода программа сама останавливается на этом участке кода, сохраняются значения всех переменных на этот момент. Чтобы увидеть место в коде где произошла ошибка: в меню "отладка" -> "причина последнего останова", и этот участок выделится!!! чтобы выйти из этого режима - есть кнопки "сброс" или "выход" или же эти пункты в меню отладка.
Евгений А. вне форума  
 
Автор темы   Непрочитано 01.06.2010, 13:06
#12
swkx


 
Регистрация: 22.01.2010
Сообщений: 311


Мешает незнание этого механизма. Мне, например, подобное описание не попадалось.
Попробовал. Просто и наглядно.
Евгений, спасибо большое!

Правда, у меня пункт меню «Прервать на ошибке»
swkx вне форума  
 
Непрочитано 01.06.2010, 13:30
#13
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Все довольно просто...
Выполняем код, например такой:
Код:
[Выделить все]
(defun test_error (/ i l)
 (setq i 5)
 (repeat 10
  (setq i (1- i)
        l (cons (/ 1 i) l)
  ) ;_  setq
 ) ;_  repeat
) ;_  defun
(test_error)
вываливается ошибка
Код:
[Выделить все]
TEST_ERROR 
_$ 
; error: divide by zero
_$
далее вызываем трассировщик и видим результаты вычислений и возможность выделить код, который вызвал ошибку...
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как определить номер строки программы на лиспе, вызвавшей ошибку ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Огнестойкость здания. как определить Makc Прочее. Архитектура и строительство 53 26.05.2016 15:19
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
Как определить характеристики здания? Amadeus Прочее. Архитектура и строительство 1 05.10.2007 15:35
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46