Показать сообщение отдельно
Старый 13.02.2010, 01:50   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
отладочная печать через вспомогательную таблицу
хочу поделиться идеей, подсказанной мне добрым феем wildguess

я отлаживал класс (EventActionEmail), который вызывался фреймворком пакетной обработки (batch processing) и был невиден в отладчике (4-я версия) - по точкам останова ничего не происходило.

поэтому была добавлена таблица следующей структуры (см. рис. 1) и статическим методом addInfo(),

X++:
// store the debug info and the name of calling method
static void addInfo(str _s, str _method)
{
    _SisDebugInfo   sisDebugInfo;
    ;
    ttsBegin;
    sisDebugInfo.Info = _s;
    sisDebugInfo.Method = _method;
    sisDebugInfo.insert();
    ttsCommit;
    // unfortunately, it does not work in case of any exception :-(
}
в которую по мере надобности и выводилась отладочная информация.

X++:
  for (i = 1 ; i <= conLen(users) ; i++)
    {
        // add debug info
        //-->
        _SisDebugInfo::addInfo(strfmt("userId = %1", conPeek(users, i)), funcname());
        //<--
        userInfo = SysUserInfo::find(conPeek(users, i));

        select firstonly alertInboxLocal
            where alertInboxLocal.GroupEventInboxId == alertInbox.GroupEventInboxId
               && alertInboxLocal.UserId == userInfo.Id;

        alertInbox = alertInboxLocal;
        alertInboxLocal = null;
    //;

это, конечно, не полноценный дебаггинг, но кое-что при таком подходе можно увидеть (см. рис. 2).

к сожалению, в случае исключительной ситуации записи в эту таблицу не происходит.
__________________
Felix nihil admirari

Последний раз редактировалось wojzeh; 27.10.2019 в 19:35.