Salesforce debugger - отладка кода
Salesforce предоставляет разработчику ряд инструментов для отладки приложения. Здесь я покажу как я пользуюсь этими инструментами, распишу ряд методик, которые выработал для себя.
Кому интересно почитать первоисточник прощу сюда Understanding the Debug Log
1. Запись в лог
Выполнение любого написанного кода оставляет в логах salesforce массу информации. Анализ данный информации помогает найти ошибки в коде, увидеть состояние переменных, результаты SOQL и DML операций.
Получить лог можно двумя способами:
- Developer console
- Setup -> Monitoring -> Debug Logs
Откройте Developer console в новом окне. Перейдите на любую созданную страницу. Я покажу пример log при работе страницы Hello World, созданной здесь.
В верхней части находится список логов, который автоматически пополняется по ходу выполнения кода на орге. Открыть нужный лог можно в двух разных представлениях: обычном (лог парсится и представляется в виде кучи секций со своей информацией) и в исходном виде (Raw log). Ниже представлены оба представления одного и того же лога.
Я предпочитаю использовать Raw log потому что информация представляется в обычном текстовом виде, который можно скопировать или использовать возможности браузера для поиска (Ctrl + F). Обычный лог (обычно большой) долго парсится и часто глючит. К тому же у обычного лога есть ограничение по размеру и если лог получается слишком большой, то developer console все равно вернет его в Raw формате. Поэтому делаем так - выделяем нужный лог и нажимаем кнопку Open Raw Log.
Конечно разбираться с километрах строк не самое приятное занятие. Поэтому вот мой практический совет. Активно используем
System.Debug('some info');
При чем совет еще практичнее вначале выводимой строки ставить маркер, который поможет потом быстро найти строчку логе.
Я, например, использую делаю так:
System.Debug('XXXXX0 - some info');
После этого достаточно открыть лог и быстро найти строку обычным текстовым поиском.
Я добавил строку для вывода информации в debug log в наш контроллер для Hello World страницы и перезапустил ее. После этого в браузере поиском (Crtl+F) нашел строку по маркеру.
Разберем строку из debug log
23:49:26.214 (214347000)|USER_DEBUG|[3]|DEBUG|XXXXX0 - hello world debug info
23:49:26.214 (214347000) - время в формате HH:mm:ss.SSS + в скобках время в наносекундах прошедщее с момента прихода запроса
USER_DEBUG - событие, которое инициировало вывод информации в лог.
[3] - номер строки в коде
DEBUG - тип выводимой информации
XXXXX0 - hello world debug info - собственно сама информация.
Если искать логи в Setup -> Monitoring -> Debug Logs , то появляется дополнительная возможность - можно (и даже нужно) указать пользователя, для которого необходимо выводить логи. Это очень полезно, когда работаешь под администратором (Administrator), а надо узнать почему не работает код для другого пользователя (с другим профилем). Это в основном происходит из-за неправильной или неполной настройки прав доступа для разных категорий пользователей.
2. Вывод переменных на страницу.
Не самый красивый, для многих примитивный метод. Но он работает. И работает быстрее чем лог :)
Воспользуемся замечательных инструментом salesforce - системой сообщений. Есть замечательный кусочек кода, который позволяет вывести на странице в красивом виде любую текстовую информацию.
в контроллере надо разместить такую строчку:
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'my first debug info'));
а на странице - тег:
<apex:pageMessages />
Вот усовершенствованный код тестовой страницы:
На странице должен появиться вот такой симпатичный вывод сообщений. При чем очень полезной фишкой является красивый вывод содержимого списка контактов. Если вы попытаетесь вывести этот список в debug log, то строка будет обрезана до какого-то там максимального количества символов.
Кому интересно почитать первоисточник прощу сюда Understanding the Debug Log
1. Запись в лог
Выполнение любого написанного кода оставляет в логах salesforce массу информации. Анализ данный информации помогает найти ошибки в коде, увидеть состояние переменных, результаты SOQL и DML операций.
Получить лог можно двумя способами:
- Developer console
- Setup -> Monitoring -> Debug Logs
Откройте Developer console в новом окне. Перейдите на любую созданную страницу. Я покажу пример log при работе страницы Hello World, созданной здесь.
В верхней части находится список логов, который автоматически пополняется по ходу выполнения кода на орге. Открыть нужный лог можно в двух разных представлениях: обычном (лог парсится и представляется в виде кучи секций со своей информацией) и в исходном виде (Raw log). Ниже представлены оба представления одного и того же лога.
Я предпочитаю использовать Raw log потому что информация представляется в обычном текстовом виде, который можно скопировать или использовать возможности браузера для поиска (Ctrl + F). Обычный лог (обычно большой) долго парсится и часто глючит. К тому же у обычного лога есть ограничение по размеру и если лог получается слишком большой, то developer console все равно вернет его в Raw формате. Поэтому делаем так - выделяем нужный лог и нажимаем кнопку Open Raw Log.
Конечно разбираться с километрах строк не самое приятное занятие. Поэтому вот мой практический совет. Активно используем
System.Debug('some info');
При чем совет еще практичнее вначале выводимой строки ставить маркер, который поможет потом быстро найти строчку логе.
Я, например, использую делаю так:
System.Debug('XXXXX0 - some info');
После этого достаточно открыть лог и быстро найти строку обычным текстовым поиском.
Я добавил строку для вывода информации в debug log в наш контроллер для Hello World страницы и перезапустил ее. После этого в браузере поиском (Crtl+F) нашел строку по маркеру.
Разберем строку из debug log
23:49:26.214 (214347000)|USER_DEBUG|[3]|DEBUG|XXXXX0 - hello world debug info
23:49:26.214 (214347000) - время в формате HH:mm:ss.SSS + в скобках время в наносекундах прошедщее с момента прихода запроса
USER_DEBUG - событие, которое инициировало вывод информации в лог.
[3] - номер строки в коде
DEBUG - тип выводимой информации
XXXXX0 - hello world debug info - собственно сама информация.
Если искать логи в Setup -> Monitoring -> Debug Logs , то появляется дополнительная возможность - можно (и даже нужно) указать пользователя, для которого необходимо выводить логи. Это очень полезно, когда работаешь под администратором (Administrator), а надо узнать почему не работает код для другого пользователя (с другим профилем). Это в основном происходит из-за неправильной или неполной настройки прав доступа для разных категорий пользователей.
2. Вывод переменных на страницу.
Не самый красивый, для многих примитивный метод. Но он работает. И работает быстрее чем лог :)
Воспользуемся замечательных инструментом salesforce - системой сообщений. Есть замечательный кусочек кода, который позволяет вывести на странице в красивом виде любую текстовую информацию.
в контроллере надо разместить такую строчку:
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'my first debug info'));
а на странице - тег:
<apex:pageMessages />
Вот усовершенствованный код тестовой страницы:
public with sharing class Hello_World_Controller {
public List<Contact> Contacts { get{
SYSTEM.DEBUG('XXXXX0 - hello world debug info');
List<Contact> contacts = [SELECT Id, Name, Email, Account.Name FROM Contact LIMIT 1000];
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'hello page messages'));
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'contacts.size() = '+contacts.size()));
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'contacts - '+contacts));
return contacts;
} set;}
}
<apex:page controller="Hello_World_Controller">
<apex:pageMessages />
<apex:pageBlock title="Contacts">
<apex:pageBlockTable value="{!Contacts}" var="c">
<apex:column value="{!c.Name}"/>
<apex:column value="{!c.Email}"/>
<apex:column value="{!c.Account.Name}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:page>
На странице должен появиться вот такой симпатичный вывод сообщений. При чем очень полезной фишкой является красивый вывод содержимого списка контактов. Если вы попытаетесь вывести этот список в debug log, то строка будет обрезана до какого-то там максимального количества символов.
Действительно полезно это знать!
ОтветитьУдалить