11.07.2005, 13:11 | #1 |
Участник
|
Как отловить отладчиком DoUpdate, DoDelete?
Периодически при поиске ошибок просто необходимая вещь...
|
|
11.07.2005, 13:47 | #2 |
1C
|
Поставить точку останова в месте их вызова.
__________________
Разница между теорией и практикой на практике больше, чем в теории |
|
11.07.2005, 13:48 | #3 |
NavAx
|
ИМХО, никак. Ну или поиск по АОТ и установка точек останова на каждом doUpdate, doDelete, doInsert.
|
|
11.07.2005, 13:48 | #4 |
Участник
|
YVAS, это английский хумор такой специфичный?
|
|
11.07.2005, 13:49 | #5 |
Участник
|
Цитата:
Изначально опубликовано raz
ИМХО, никак. Ну или поиск по АОТ и установка точек останова на каждом doUpdate, doDelete, doInsert. |
|
11.07.2005, 13:49 | #6 |
Участник
|
Если есть пчелы - значит должен быть мед - если есть метод DoUpdate - значит где-то есть его код.. Понятно что на слое sys он точно есть.. но может что-то связанное с выполнением этого кода.. другое место в системе какое-то доступное и привязаное к этому коду..
|
|
11.07.2005, 14:02 | #7 |
Модератор
|
Цитата:
Изначально опубликовано MironovI
Если есть пчелы - значит должен быть мед - если есть метод DoUpdate - значит где-то естьс его код.. Они напрямую выполняются. С Уважением, Георгий |
|
11.07.2005, 14:04 | #8 |
Участник
|
Уточните понятие "напрямую" - система все-таки должна где-то сгенерить запрос к базе и выполнить его.. Может копать надо не конкретный doInsert конкретной таблицы, а место связанное с вставкой изменением вообще.. типа Info.add()..
|
|
11.07.2005, 14:09 | #9 |
Administrator
|
Она генерит.... только ядром (ax32.exe). А туда аксаптийный отладчик не вхож
Если только SQL Profiler (если у вас SQL Server) - но это уже на уровне базы. Есть и еще способ - перекрестные ссылки - и там отфильтровка по Read/Write... Но если они не построены - то проще искать по АОТ |
|
11.07.2005, 14:22 | #10 |
Участник
|
Неужто ядром? Я надеялся хотя бы на слой sys.. Все Reed/write можно конечно, но не в случае с таблицами типа LedgerTrans - попробовал посмотреть перекрестными ссылками где она используется.. десять минут уже ищет.. потом фильтрану по write будет еще десять минут - потом буду ставить лапы по 500 местам где этот LedgerTrans апдейтится - сколько по времени - ну не знаю - наши руки не для скуки Потом придет менеджер проекта и спросит чем я занимался весь день )
|
|
11.07.2005, 14:28 | #11 |
Участник
|
Приблизительное, и не оочень красивое решение у меня конечно есть - включить журнализацию запросов к базе данных, найти код где эти запросы собственно фиксируются, поставить там в коде уловие типа IF('поискать в текте запроса нужную строку апдейта') и лапу на него.. но это уж край..
|
|
11.07.2005, 14:32 | #12 |
Administrator
|
слой sys означает что код все-таки есть. Изначально смысл методов do* состоит в том, чтобы сделать черное дело , которое нельзя отменить или перекрыть. Все что есть на слое sys можно изменить на слое usr, и работать будет usr-слой. И поэтому методы do* реализованы в ядре (\System Documentation\Classes\xRecord\do*).
|
|
11.07.2005, 15:01 | #13 |
Участник
|
Цитата:
Изначально опубликовано MironovI
Приблизительное, и не оочень красивое решение у меня конечно есть - включить журнализацию запросов к базе данных, найти код где эти запросы собственно фиксируются, поставить там в коде уловие типа IF('поискать в текте запроса нужную строку апдейта') и лапу на него.. но это уж край.. |
|
11.07.2005, 15:57 | #14 |
Moderator
|
Возвращаясь к теме перекрестных ссылок, можно получить ссылки непосредственно на вызов метода doUpdate(), например, для LedgerTrans. У меня их получилось 12 штук. А дальше - лапа и т.д.
__________________
Андрей. |
|
11.07.2005, 17:56 | #15 |
MaratRZ@mail.ru
|
Добрый день!
Можно сделать следующим образом - вешаешь на таблицу триггер на удаление/добавление/изменение, который выдает ошибку, потом ставишь точку останова на Info/add и далее по стеку ... PHP код:
|
|
|
За это сообщение автора поблагодарили: Proba (1). |
11.07.2005, 20:19 | #16 |
Banned
|
Хороший вариант Marat предложил. А еще можно включить протоколирование базы данных и поставить breakpoint в метод \Classes\Application\logInsert().
|
|
12.07.2005, 11:53 | #17 |
Участник
|
Цитата:
Изначально опубликовано Dron AKA andy
Возвращаясь к теме перекрестных ссылок, можно получить ссылки непосредственно на вызов метода doUpdate(), например, для LedgerTrans. У меня их получилось 12 штук. А дальше - лапа и т.д. |
|
12.07.2005, 11:55 | #18 |
Участник
|
Цитата:
Изначально опубликовано EVGL
Хороший вариант Marat предложил. А еще можно включить протоколирование базы данных и поставить breakpoint в метод \Classes\Application\logInsert(). |
|
12.07.2005, 11:57 | #19 |
Участник
|
Цитата:
Изначально опубликовано MaratRZ
Добрый день! Можно сделать следующим образом - вешаешь на таблицу триггер на удаление/добавление/изменение, который выдает ошибку, потом ставишь точку останова на Info/add и далее по стеку ... PHP код:
|
|
12.07.2005, 12:34 | #20 |
Moderator
|
Как получить ссылки на doUpdate() и другие используемые методы, невидимые в репозитар
Сервис / Средства разработки / Перекрестные ссылки / Объекты по именам.
Открывается форма "Объекты по именам" и вылезает запрос. В поле "Имя типа" вводится имя объекта (напр., название таблицы), в поле "Наименование" - название метода. Фильтр применяется, и в форме остаются только найденные объекты. Далее кнопарь "Чем используется" - и вуаля.
__________________
Андрей. |
|
|
За это сообщение автора поблагодарили: Logger (7), imir (1). |