<rmcreative>

RSS

Улучшенное сообщение об ошибке для Yii

20 июля 2010

http://rmcreative.ru/playground/yii_trace/thumb.png

Подумал над улучшением и без того довольно неплохих сообщений об ошибках Yii в режиме отладки. Реализовал несколько идей. В итоге получился довольно полезный обработчик. В дополнение к тому, что умеет стандартный:

  • Умеет показывать параметры stack trace.

  • Различает статические и динамические вызовы.

  • Выглядит немного получше.

Для сравнения, вот результаты работы старого и нового обработчиков для одной и той же ошибки.

Опробовать обработчик в деле можно забрав код из SVN.

Стоит ли включать эти изменения в ядро Yii? Что ещё можно доработать?

UPD: включено в состав ядра Yii.

Комментарии RSS

  1. №2731
    rosko
    rosko 20 июля 2010 г., 2:58:00

    Супер. Выглядит действительно удобнее.

  2. №2732
    tipugin
    tipugin 20 июля 2010 г., 3:11:12

    круто! хочу такие в 1.2

  3. №2733
    Ti
    Ti 20 июля 2010 г., 6:59:56

    Можно добавить возможность открывать файл в IDE по ссылке.

    Для это можно создать ссылки вида:

    <a href="edit:ClassName@projectName">ClassName</a>
    

    и/или

    <a href="edit:dir/path.php@projectName">dir/path.php</a>
    

    Пути используем относительные т.к. в продакшин абсолютные пути отличаются.

    1. Пишим скрипт который из edit:... получает путь к файлу и передает его IDE.

    2. В браузере добавляем обработку протокола edit нашим скриптом.

    3. Enjoy.

    Можно использовать не только в отладке. Например на debug панели сайта вывести ссылку на контроллер и шаблон

    P.S. Кто знает как в eclipse через cli открывать файл на конкретной строке?

  4. №2734
    idle
    idle 20 июля 2010 г., 8:05:50

    А я покритикую.

    • Стак трейс стал нагляднее бесспорно, но at в нём полагаю лишним.

    • Можно и без оступов слева — всё и так по полочкам.

    • Сейчас обратил внимание, что подсветка строки с ошибкой почти не видна, вот если бы выделить номер строки (00377) в листинге полужирным, а саму строку оставить пусть даже с такой подсветкой, то будет значительно проще ориентироваться.

    • Описание ошибки ведь уже выделено шрифтом, так что бокс ему вряд ли в чём поможет.

    Александр, у меня стойкое ощущение, что подписка на комментарии не работает :)

  5. №2735
    White Shadow
    White Shadow 20 июля 2010 г., 8:44:10

    я бы еще нумерацию обратную сделал.

  6. №2736
    Nick
    Nick 20 июля 2010 г., 9:04:34

    Блин и почему мне ни то что слева ни то что справа ни о чем не говорит, кроме первой строчки =(

  7. №2737
    Serge Bezborodov
    Serge Bezborodov 20 июля 2010 г., 10:00:37

    Stack Trace стал нагляднее, бесспорно, но в тоже время очень увеличился в высоту, раньше все умещалось на одной странице и не пришлось бы делать прокрутку

    возможно стоит его чуть сжать?

  8. №2738
    Иван
    Иван 20 июля 2010 г., 10:20:06

    В Kohana v3 поинтереснее будут: тыц :)

  9. №2741
    Alexander Hramov
    Alexander Hramov 20 июля 2010 г., 11:32:07

    Новый экран значительно лучше. Хотя дейтсивтельно имело бы смысл еще и номера строк полужирным выделить.

  10. №2742
    Sam
    Sam 20 июля 2010 г., 12:09:55

    tipugin

    Уже сейчас можно подключить и использовать.

    Ti

    Попробую… вот только тестировать не на чем.

    idle

    • at разделяет жирный номер и жирный объект.

    • с отступами ещё соберу отзывы.

    • с подсветкой хорошая идея.

    • с боксом поиграюсь.

    Подписке давно уже очень плохо :( Сапожник без сапог…

    White Shadow

    Обратную нумерацию чего?

    Serge Bezborodov

    Попробую посжимать.

    Иван

    А что именно интересней?

    Из полезного вижу подсветку кода и окружение. Остальное вроде имеется.

  11. №2743
    Иван
    Иван 20 июля 2010 г., 13:49:56

    Именно так. А что еще надо от хорошего сообщения? :)

    Для любого из вызовов, упомянутых в списке, можно посмотреть строки, вызывавшие ошибку, а если переданы параметры - то и их тоже. Ну и конечно подсветка синтаксиса.

    PS. Только сейчас обнаружил, что на той ссылке косяк с разворачиванием подробностей (видимо из-за вложения в Userguide), смотреть лучше как-то так.

  12. №2744
    Sam
    Sam 20 июля 2010 г., 14:31:27

    Да, так смотреть приятней. Спасибо.

  13. №2745
    idle
    idle 20 июля 2010 г., 15:34:46
    • Про at. Номера в трейсе не несут особой смысловой нагрузки. Мы по ним определяем а) последовательность, б) глубину (ценность этого пункта вообще сомнительна). Поэтому полужирность этим номерам, наверное, тоже никчему.

    Кстати, интересно почему последовательность с нуля начинается?

  14. №2746
    Sam
    Sam 20 июля 2010 г., 15:36:05

    PHP так нумерует трейс. Я не стал менять.

  15. №2747
    Psih
    Psih 20 июля 2010 г., 16:39:18

    Так точно лучше. Вообще в трейсе сильно не хватало списка параметров с их значениями. Иногда без этого не понять что же там случилось :)

  16. №2748
    Sam
    Sam 20 июля 2010 г., 16:53:43

    Ну вообще они там были, но показывалось их явно маловато.

  17. №2750
    Ekstazi
    Ekstazi 20 июля 2010 г., 19:19:20

    А мне нравится. По поводу at думаю что нужно оставить. А вот про непонятку со строкой в которой ошибка полностью согласен. Надо как-то получше выделить.

  18. №2751
    White Shadow
    White Shadow 20 июля 2010 г., 20:21:15

    именно нумерацию стека вызовов функций я и имел ввиду, что Zend, что в Kohan'a, что в Yii самая верхняя функция выводится как 0, хотя она вызвана последней и по идее она должна иметь максимальный номер.

  19. №2755
    Иван
    Иван 21 июля 2010 г., 8:51:52

    @White Shadow

    Это обратный отсчет от точки останова. В случае ошибки распутываем клубок вызовов, от конца к началу.

  20. №2767
    White Shadow
    White Shadow 21 июля 2010 г., 21:42:10

    @Иван

    Обратный отсчет это как раз 18-17... и я не говорю что функции надо пересортировать, просто та которая сейчас имеет номер 0 по логике должна иметь номер 18.

  21. №2768
    White Shadow
    White Shadow 21 июля 2010 г., 21:54:24

    ~ так:

    18 CDbCommand->queryInterval('fetchAll',2,array())

    17 CdbCommand->queryAll()

    16 CActiveRecord->query(CDbCriteria, 1)

    ...

    Как уже писали выше смысловая нагрузка у этого номера действительно не большая (и "at" там действительно не нужно), а так сразу видно вложенность, естественно на вкус и цвет.

    ЗЫ.

    Понравилась идея от Ti (#3) со ссылками на файлы... ушел прикручивать к Kohana)

  22. №2824
    Владимир
    Владимир 05 авг. 2010 г., 13:15:39

    У меня одного это расширение не завелось?

    Вызов:

    'components'=>array(
            'errorHandler' => array(
                'class' => 'share.extensions.improvedErrorHandler.EImprovedErrorHandler'
            ),
        ),

    в итоге:

    Warning: include() [function.include]: Filename cannot be empty in E:0 projectsyiibaseCErrorHandler.php on line 242
    
    
    
    Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.;E:0 projectsasiteprivatefrontendcomponents;E:0 projectsasiteprivatefrontendmodels;E:0 projectsasiteprivatefrontendconfig/../../shareextensionsarrayDataProvider;E:0 projectsasiteprivatefrontendconfig/../../shareextensionsshoppingCart;E:0 projectsasiteprivatefrontendconfig/../../sharecomponents;E:0 projectsasiteprivatefrontendconfig/../../sharemodels;/usr/local/php5/PEAR') in E:0 projectsyiibaseCErrorHandler.php on line 242
    
  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.