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

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

Как работать с дебагером лиспа?

Ответ
Поиск в этой теме
Непрочитано 12.09.2007, 15:04 #1
Как работать с дебагером лиспа?
Wo1and
 
СтолидЦа
Регистрация: 12.09.2007
Сообщений: 7

Устанавливаю брейк поинт, а дебагер на нее ноль внимания и ваапче прерывает выполнение скрипта только ежели поставить галочку StopOnce, а потом листать до нужного места по ф8. ужос ... люди как заставить его останавливаться там где надо?
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Просмотров: 2464
 
Непрочитано 12.09.2007, 15:17
#2
Кулик Алексей aka kpblc
Moderator

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


Ну значит у тебя просто до этой точки не доходит выполнение
Полный код покажь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.09.2007, 15:50
#3
Wo1and


 
Регистрация: 12.09.2007
СтолидЦа
Сообщений: 7
<phrase 1=


ну эт врятли. когда по ф8 листаю, то доходит и выполнятцо выполняетцо, а не стопитЦа.
пробовал в разных местах кода вплоть сразу за defun
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Wo1and вне форума  
 
Непрочитано 12.09.2007, 16:03
#4
Кулик Алексей aka kpblc
Moderator

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


Дык ента... Код можно? И исходные условия проверки и неработы?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.09.2007, 16:14
#5
Wo1and


 
Регистрация: 12.09.2007
СтолидЦа
Сообщений: 7
<phrase 1=


например этот ....
______________________________
Код:
[Выделить все]
(defun drorder (sss)
  	(if (= (last sss) nil) 
	(progn
		(if (and (setq point1 (getpoint)) (setq point2 (getcorner point1)))
		(progn
			(if (setq sss (ssget "_w" point1 point2 '((0 . "line,spline")))) 
			(progn
				(setq sss (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex sss)))))
			));progn if
		));progn if
	));progn if
	(setq gor nil)
  	(foreach ss sss
		(setq sx (car (vlax-curve-getstartpoint ss))
			sy (cadr (vlax-curve-getstartpoint ss))
			ex (car (vlax-curve-getendpoint ss))
			ey (cadr (vlax-curve-getendpoint ss)))
		(if (< (abs(- ex sx)) (abs(- ey sy))) 			
			(progn	(setq temp1 (vlax-vla-object->ename ss) 	;если вертикальная 
			   	temp (ssadd temp1))
				(SSSETFIRST nil temp) (command "_DRAWORDER" "_b")))
	  		(progn (setq temp1 (vlax-vla-object->ename ss) 		;если горизонтальная 
			   	gor (ssadd temp1)))
		);if
  	);foreach

  	(if (setq sss (ssget "_x" '((0 . "wipeout"))))(progn
		(SSSETFIRST nil sss) (command "_DRAWORDER" "_f"))
  	); if

	(if (/= gor nil) (progn
	  (SSSETFIRST nil gor) (command "_DRAWORDER" "_f"))
	);if
	
	(if (setq sss (ssget "_x" '((-4 . "<not") (0 . "line,spline,block,mtext,text") (-4 . "not>"))))(progn
		(SSSETFIRST nil sss) (command "_DRAWORDER" "_f"))
  	); if

  	(if (setq sss (ssget "_x" '((0 . "block"))))(progn
		(SSSETFIRST nil sss) (command "_DRAWORDER" "_f"))
  	); if
  
	(if (setq sss (ssget "_x" '((0 . "mtext,text"))))(progn
		(SSSETFIRST nil sss) (command "_DRAWORDER" "_f"))
  	); if
    
);defun
_________________________
брейк стоит на первой скобке в строке (if (setq sss (ssget "_x" '((0 . "wipeout"))))(progn
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Wo1and вне форума  
 
Непрочитано 12.09.2007, 16:53
#6
Кулик Алексей aka kpblc
Moderator

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


1. Возможен вариант, что ошибка сразу в первом цикле возникает.
2. Переведи все переменные в локальные. То есть заголовок у тебя получится:
Код:
[Выделить все]
(defun drorder (sss / point1 point2 ss sx sy ex ey temp temp1 gor)
3. Если бы не первое указание набора через точки, то можно было бы сделать примерно так (использован вариант Alaspher'a с http://dwg.ru/forum/viewtopic.php?p=172493 ) :
Код:
[Выделить все]
(defun demo (/ adoc dict nbl sort start end lst_top lst_bottom)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        dict (vla-getextensiondictionary (pl:get-active-space adoc))
        sort (vl-catch-all-apply
               (function vla-getobject)
               (list dict "ACAD_SORTENTS")
               ) ;_ end of vl-catch-all-apply
        ) ;_ end of setq
  (vla-startundomark adoc)
  (if (vl-catch-all-error-p sort)
    (setq sort (vla-addobject dict "ACAD_SORTENTS" "AcDbSortentsTable"))
    ) ;_ end of if
  (vlax-for blk_def (vla-get-layouts adoc)
    (vlax-for subent blk_def
      (cond
        ((and (= (member (strcase (vla-get-objectname subent) t))
                 '("acdbline" "acdbspline")
                 ) ;_ end of =
              (< (abs (- (car (vlax-curve-getstartpoint subent))
                         (cadr (vlax-curve-getstartpoint subent))
                         ) ;_ end of -
                      ) ;_ end of abs
                 (abs (- (cadr (vlax-curve-getendpoint subent))
                         (car (vlax-curve-getendpoint subent))
                         ) ;_ end of -
                      ) ;_ end of abs
                 ) ;_ end of <
              ) ;_ end of and
         (setq lst_bottom (cons subent lst_bottom))
         )
        ((not (member (strcase (vla-get-objectname subent) t)
                      '("acdbtext"          "acdbmtext"
                        "acdbblockreference"
                        "acdbline"          "acdbspline"
                        )
                      ) ;_ end of member
              ) ;_ end of not
         (setq lst_top (cons subent lst_top))
         )
        ) ;_ end of cond
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  (vla-movetobottom
    sort
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst_bottom))))
      lst_bottom
      ) ;_ end of vlax-safearray-fill
    ) ;_ end of vla-movetobottom
  (vla-movetotop
    sort
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst_top))))
      lst_top
      ) ;_ end of vlax-safearray-fill
    ) ;_ end of vla-movetotop
  ) ;_ end of defun
Код не тестировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.09.2007, 17:07
#7
Wo1and


 
Регистрация: 12.09.2007
СтолидЦа
Сообщений: 7
<phrase 1=


дак с кодом та никаких траблов нет ... он работает. проблемма с дебагером пачему не стопится ... акад выполняет код без всяких сообщений и заковырок хотя там брейк стоит
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Wo1and вне форума  
 
Непрочитано 12.09.2007, 17:10
#8
Кулик Алексей aka kpblc
Moderator

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


Намек понял. Попробуй поставить break в самом начале, и переходи не простым F8, а Shift + F8 - по крайней мере внутрь циклов заходить не будешь. Одно "но" - перед этим у тебя будет выделяться область выполнения, проверь ее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.09.2007, 17:32
#9
Wo1and


 
Регистрация: 12.09.2007
СтолидЦа
Сообщений: 7
<phrase 1=


мож я чо не так делаю
поставил брейк
сохранил скрипт(не закрывая)
перешел в акад
загрузил скриптовый файл (acad2008.lsp)
вызвал нужную функцию....
далее функция с довольным видом отрабатывает как положено поплевывая сверху на брейки которых в ней понатыкано цельный километр
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Wo1and вне форума  
 
Непрочитано 12.09.2007, 20:52
#10
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я начал ковырять твой код, два месяца за лиспом не сидел и тут уже успел все забыть. Тем кто читал мои ляпусы отвечу:
Добавлено: Все, узнал - примитивы отсутствовали в наборе.


Вот, может пригодится:

(command "_.select" "BOX" (setq point1 (getpoint)) (setq point2 (getcorner point1)) ^C^C)
(setq ss1 (if (< (car point1) (car point2)) (ssget "_W" point1 point2) (ssget "_C" point1 point2)))

Усе работает в цвете!
Supermax вне форума  
 
Непрочитано 12.09.2007, 21:29
#11
Кулик Алексей aka kpblc
Moderator

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


Ставишь break. Загрузка кода (не выходя из vlide). Проверяешь, не исчез ли стоп. Если исчез - по новой его ставишь и снова загрузка кода (Ctrl + Alt + E). Потом вызов функции и вперед.
Добавлено: Замени свою конструкцию ssget "_W" point1 point2 на более простую:
Код:
[Выделить все]
(setq sss (cond (sss)
(t (ssget "_:L" '((0 . "LINE,SPLINE")))))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2007, 21:51
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Kpblc, ты забыл одну закрывающуюся скобку.
Supermax вне форума  
 
Непрочитано 12.09.2007, 22:12
#13
Кулик Алексей aka kpblc
Moderator

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


Ххе, при условии незапущенного када и не такое иногда проскальзывает Хотя мог бы и notepad++ запустить - но было лень
Вот, например, только сейчас сообразил, что (ssget '((0 . "BLOCK"))) всегда будет возвращать nil - нет такого примитива, как BLOCK. INSERT есть. А вот BLOCK - фигушки.
Добавлено:
Так, вру. Собственно BLOCK теоретически существует, но только как обозначение начала описания блока. Выбирать по нему - бесполезно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.09.2007, 11:59
#14
Wo1and


 
Регистрация: 12.09.2007
СтолидЦа
Сообщений: 7
<phrase 1=


КрЫс спасиб )) дествительна с первого раза почемута брейк пропадает ставишь второй раз и все работаеть ))
зы и насчет блоков тожа спс - дествительна insert писать надобно
зыы и ваапче в том скипте обнаружились ошибочки седня поправил. ежели кому надорбно то Ask ))
__________________
Самурай без меча подобен самураю с мечом, тока без меча.
Wo1and вне форума  
 
Непрочитано 13.09.2007, 12:01
#15
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А че мужики, не ставить пробел между скобками так задумано?
))))(progn :?:
Supermax вне форума  
 
Непрочитано 13.09.2007, 12:10
#16
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Supermax
А че мужики, не ставить пробел между скобками так задумано?
))))(progn :?:
(принципиально(это(разве(а))))(сработает(верно(равно(все(лисп))))) :?:
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как работать с дебагером лиспа?