|
технологический журнал - стек вызовов | ☑ | ||
---|---|---|---|---|
0
oleg_km
25.12.13
✎
12:18
|
Хочу записывать все исключения, которые возникают в программе. Т.к. многие только показываются пользователям, но в журнал регистрации не пишутся. Кроме того, мне нужен стек вызовов, но у объекта ИнформацияОбОшибке его нет. Пытаюсь настроить logcfg.xml, чтобы писал все исключения с контекстами:
<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <dump create="false"/> <log location="c:\logs" history="48"> <event> <eq property="name" value="EXCP"/> </event> <event> <eq property="name" value="EXCPCNTX"/> </event> <property name="all"/> <property name="context"> <event> <eq property="name" value="EXCP"/> </event> </property> </log> </config> Всякую лабуду пишет, а сециально в модуль вставил: а = 1 / 0; Этого нигде нет Кто занимался этим вопросом, подскажите |
|||
1
Maxus43
25.12.13
✎
12:22
|
>>но у объекта ИнформацияОбОшибке его нет
он есть, глубже в него сомтри отладчиком |
|||
2
oleg_km
25.12.13
✎
12:27
|
(1) Причем здесь отладчик? Мне нужно чтобы когда приложение запускает пользователь, а у него возникают какие-то необработанные исключения, чтобы они писались и со стеком вызовов.
|
|||
3
H A D G E H O G s
25.12.13
✎
12:30
|
(2) В информации об ошибке есть это
|
|||
4
H A D G E H O G s
25.12.13
✎
12:30
|
Функция ПолучитьРасширенноеОписаниеОшибки(ТекстОшибки,Информация) Экспорт
ТекстВозврата=ТекстОшибки; ТекстВозвратаРасширенный=""; ЕстьТекстВозвратаРасширенный=Ложь; ТекущаяИнформация=Информация; Префикс=""; Пока Истина Цикл ТекстВозвратаРасширенный=ТекстВозвратаРасширенный+Префикс+ТекущаяИнформация.Описание+?(ЗначениеЗаполнено(ТекущаяИнформация.ИмяМодуля), ". Модуль:"+ТекущаяИнформация.ИмяМодуля,"")+?(ЗначениеЗаполнено(ТекущаяИнформация.НомерСтроки), ". Строка:"+ТекущаяИнформация.НомерСтроки,""); ЕстьТекстВозвратаРасширенный=Истина; Если ТекущаяИнформация.Причина=Неопределено Тогда Прервать; КонецЕсли; ТекущаяИнформация=ТекущаяИнформация.Причина; Префикс=Символы.ПС; КонецЦикла; Возврат ?(ЕстьТекстВозвратаРасширенный,ТекстВозвратаРасширенный,ТекстВозврата); КонецФункции |
|||
5
oleg_km
25.12.13
✎
12:40
|
(4) Вот тестовый пример
Процедура ИсклНажатие(Элемент) Попытка Тест(); Исключение обОшибка = ИнформацияОбОшибке(); Сообщить(ПодробноеПредставлениеОшибки(обОшибка)); КонецПопытки; КонецПроцедуры Процедура Тест() Тест1(); КонецПроцедуры Процедура Тест1() а = 1 / 0; КонецПроцедуры В обОшибка.Причина = Неопределено |
|||
6
H A D G E H O G s
25.12.13
✎
12:42
|
(5) Ну не зря же мы в моей процедуре во входных параметрах видим параметр
Информация |
|||
7
H A D G E H O G s
25.12.13
✎
12:43
|
А,не, понял.
|
|||
8
H A D G E H O G s
25.12.13
✎
12:46
|
Нет, хрень какая-то.
|
|||
9
H A D G E H O G s
25.12.13
✎
12:46
|
Ты мрак пишешь
|
|||
10
oleg_km
25.12.13
✎
12:49
|
Информация - это что? Это объект, полученный функцией ИнформациейОбОбъекте. Дальще ты рекурсивно из этого объекта разматываешь причины. Так вот, причины это не стэк. В каких-то случаях там есть информация о вышестоящих фукнциях, в большинстве ничего нет.
Просто было как-то обсуждение, что пропросить от 1С. Я сказал, хочу информацию о стэке. Кто-то сказал, бери в технологическом журнале. Вот хочу понять, он просто так сказал или конкретно что-то имел ввиду (9) В чем мрак? У меня есть функция, которая работает с файлами. Используется в стопятьсот местах программы. В ней срабатывает исключение. Как мне узнать, какой из стопятьсот вызовов привел к исключению? Я так понимаю, нужно теперь добавить стопятьсот обработок исключений к каждому вызову этой функции |
|||
11
H A D G E H O G s
25.12.13
✎
12:55
|
(10) Я так понимаю, поле Причина - заполнено для сложных ошибок, например, почти уверен, оно будет заполнено для ошибки доступа к базе после 1-ой ошибки в активной транзакции
("В данной транзакции уже происходили ошибки"). У тебя ошибка - простая - деление на 0. |
|||
12
oleg_km
25.12.13
✎
13:47
|
(11) Ну вернее даже, где-то ошибка возникла, а в другом месте ее последствия проявляются. Но все это слабо задокументировано и мне не подходит. Мне нужен надежный способ записывать все исключения в некий журнал отладки и в идеале с локальными переменными, стеком вызовов и пр. Если кто-то этим заморачивался - поделитесь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |