Имя: Пароль:
1C
1С v8
технологический журнал - стек вызовов
,
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) Ну вернее даже, где-то ошибка возникла, а в другом месте ее последствия проявляются. Но все это слабо задокументировано и мне не подходит. Мне нужен надежный способ записывать все исключения в некий журнал отладки и в идеале с локальными переменными, стеком вызовов и пр. Если кто-то этим заморачивался - поделитесь.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн