В чем разница между "procedure" и "module" (функци

Тема в разделе "Lotus - Программирование", создана пользователем fedotxxl, 18 янв 2008.

  1. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    LSI_THREAD_CALLPROC Get the name of the calling procedure
    LSI_THREAD_CALLMODULE Get the name of the calling module

    Первое возвращает человеческое значение, второе - бред всякий...

    Чего я хочу получить? Я хочу написать DebugTracker, который бы возвращал не только ошибку, процедуру, номер и т.д., но так же и название агента/представления/формыподформы т.д... Каким более менее разумным способом можно получить, где исполнялась процедура?
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Второе в агенте на сервере тоже возвращает человеческое значение.
    Сам это не проверял, но на форумах писали что это так.

    Кстати, именно сейчас у меня то же та же проблема: как расшифровать эту фигню, что возвращается.
    Это какой-то код ноты, в которой вызвана ошибка, т.к. ф-ии из одной биб-ки имеют один и тот же код.
     
  3. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    вопрос не в тему.. а зачем вообще создавать очень сложный DebugTracker ?
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: Kee_Keekkenen
    А он не очень сложный
    Он вообще без параметров :)
     
  5. Yakov

    Yakov Гость

    Для: fedotxxl
    Покажите, пожалуйста, пример обработки исключения с вызовом вашего DebugTracker'а.
    Может, достаточно в каждом модуле создать константу Private Const MODULE_NAME = "MyCoolLib", которую каким-либо образом передавать в Tracker?
    Либо использовать обработчик типа
    Код (Text):
            On Error Goto errorHandler

    Exit Sub
    errorHandler:
    Error Err, Error$ & Chr$(10) & MODULE_NAME & "." & Typename(Me) & "." & Getthreadinfo(1) & " at line " & Cstr(Erl)
    Exit Sub
    В итоге, клиент получит сообщение об ошибке, содержащее весь стек вызовов, вида:
    Код (Text):
    Divide by zero
    MyCoolLib.SUPERCLASS.SUPERMETHOD at line 2
    ThirdPartyLib.MEGACLASS.MEGAMETHOD at line 149
    Для: Omh
    Утилитой NotesPeek посмотрите на поле $ScriptLib_O документа библиотеки. По смещению 0x0210 находится некая "фигня" вида "*.4.A.6.3.F.F.4.". Ничего не напоминает? :) Кстати, далее идут вполне читаемые строки. К слову, с этого места начинается таблица символов библиотеки. В ней находятся все текстовые строки, используемые в модуле.
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Для: Yakov
    Информация выглядит полезной :)
    Вернусь на работу - посмотрю.

    У меня раньше был errorhandler с параметрами, вроде того, что ты показал.

    Сейчас решил немного редизайнить его: не использовать параметры вообще, а внутри брать информацию из GetThreaInfo() с параметрами LSI_THREAD_CALLPROC/LSI_THREAD_CALLMODULE и функций возвращающих код, название и линию ошибки.
     
Загрузка...

Поделиться этой страницей