Показать сообщение отдельно
Старый 27.12.2013, 09:28   #16  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от konfet Посмотреть сообщение
Ситуация такая. Время от времени у пользователей возникает некая ошибка (полю автоматически присваивается то значение, которое не должно присваиваться).
Нужно "размотать" ситуацию и понять, что именно в бизнес процессе и/или настройках и/или коде неправильно.
Я локализовал то место в коде, которое в конечном счете инициирует ошибку, и куда выполнение при данном наборе условий по идее не должно "проваливаться".
НО: код очень сложный, многоуровневый, этот набор условий - большой, воссоздать ситуацию и вычленить именно то условие или событие, которое привело к ошибке - трудно да и нет времени.
Хочу иметь на руках полную "картину преступления" в тот момент, когда в данное ошибочное место пользователь "провалится" в следующий раз.
Собственно вопрос: есть ли в аксапте некий метод (назовем его getSnapshot()), вызов которого запишет в некий журнал - таблицу БД или в файл следующую информацию:
  1. Стек вызова;
  2. Значения всех локальных и объектных переменных того места, откуда метод был вызван, а также всех локальных и объектных переменных всех уровней выполнения выше по стеку (кроме BLOB);
  3. Возможно, выдаст и некое уведомление о факте проваливания, например на емейл.
Подозреваю, что похожая задача в аксапте решалась многими, и не хочу изобретать лисапед.

AX 4.0 sp3.
Мне кажется где то уже писалось на форуме, но что то не могу найти.
Я для поиска "откуда это ... взялось" использую следующее:
1. Добавялете поле "CallStack" в журнал БД (SysDataBaseLog) (можно сделать отдельную связную табличку, что бы не корячить SysDataBaseLog).
2. Доработать метод insert() на таблице SysDataBaseLog, что бы в добавленное поле писался стэк вызова (xSession::xppCallStack()).
3. На проблемную таблицу включить Журнал БД.
4. Когда начнут жаловатся, открываем журнал БД и смотрим стэк вызова.

Первые два пункта мне кажется на форуме где то есть, можете поискать.

Конечно заполнение данного поля приведет к распуханию БД. Поэтому лучше сделать параметр, который бы включал и выключал запись стэка вызова в БД. И включать этот параметр только при необходимости (при ловле "блох" )

P.S. мне это ОЧЕНЬ помогает в жизни, т.к. приходится работать с кодом очень низкого качества. Только так смогли выудить кучу различных багов, которые делают полный бред, но в глаза не брасаются
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем