Отладка кода в Delphi XE - PullRequest
       36

Отладка кода в Delphi XE

4 голосов
/ 09 декабря 2010

Я долгое время являлся разработчиком Delphi, и в прошлом я использовал сторонний инструмент для регистрации и отладки при разработке (называемый Smart Inspect), однако теперь, когда я обновился до Delphi XE, я хочу попробовать и использовать IDE дляотладка.

У меня такой вопрос: если у меня есть функция типа

procedure MyFunction;
var
    str : string;
begin
    str := 'Foo';
    //Debug, show value of str?
    str := AnotherFunction(str);
    //Debug, show value of str?
end;

, как я могу отладить и получить значение str, не делая глупых вещей, таких как showmessage (str);

если где-то есть видео (или статья), то я более чем рад прочитать.

Есть ли способ просмотреть / вывести значение переменных.

Ответы [ 6 ]

9 голосов
/ 09 декабря 2010

Если вы хотите использовать только IDE Debugger, сделайте следующее:

  • поместите точку останова где-нибудь
  • щелкните правой кнопкой мыши по кругу точки останова и выберите «Свойства точки останова».. "
  • нажмите кнопку" Дополнительно ", чтобы отобразить дополнительные параметры
  • снимите флажок" Разрыв "
  • , затем используйте поля ввода" Сообщение сообщения "и" Выражение Eval "для ввода трассировки.значения

Такие сообщения будут отправляться на панель отладчика «Журнал событий».Щелкните правой кнопкой мыши на панели и выберите «Свойства».Там вы можете фильтровать («Сообщения») / hilight («Цвета») сообщения трассировки по вашему желанию.

8 голосов
/ 09 декабря 2010

Ну, Delphi XE поставляется с журналированием CodeSite, но у меня такое ощущение, что вы говорите о самом отладчике.

Если вы поместите точку останова в подпрограмму, она сломается в отладчике, когда попадет в нее. Оттуда у вас есть панель Local Variables и Watches вдоль левой стороны IDE. Локальные переменные будут показывать значение всех локальных переменных, а Watches позволяет вам устанавливать выражения, значение которых будет отслеживать.

Вы также можете получить что-то похожее на часы, но с более подробной информацией (особенно для структурированных типов, таких как объекты), используя Inspect (Alt-F5). Кроме того, Evaluate / Modify (Ctrl-F7) позволит вам вводить выражения и оценивать их. Он не такой подробный, как Inspect, но дает вам большую гибкость.

Если вы ознакомитесь с этими инструментами, отладка окажется намного проще.

5 голосов
/ 09 декабря 2010

1) Вы можете использовать функцию OutputDebugString для вывода строки в окно отладки

2) Вы можете использовать CodeSite Express.Я рекомендую видео с CodeRage 5 в качестве отправной точки для использования CodeSite

1 голос
/ 10 декабря 2010

Все остальные ответы верны.

Мой личный любимый прием (такой же, как ответ da-soft) - создать точку останова, которая регистрирует сообщение в журнале событий, содержащее значение, которое я хочу зарегистрировать, и на самом деле не «ломается» (то есть выполнение продолжается без нажатия на значок «Выполнить». Затем каждый раз, когда достигается эта строка кода, я получаю свое сообщение и свои значения в журнале. Поскольку я могу вернуться и прочитать историю, а также увидеть текущие значения, я считаю это более полезным, чем просто использование окна просмотра отладчика.

Но поскольку Delphi XE включает CodeSite, вы можете пойти гораздо дальше того, что для вас делает оценка выражений в точках останова. Сайт Code, однако, требует, чтобы вы изменили свой код, чтобы добавить некоторые записи. Но это намного лучше, чем окно сообщения.

Вы также можете использовать OutputDebugString (PChar (s)) для вывода любой строки в отладчик. Поскольку он может содержать все, что вы хотите, это очень хороший способ отладки, но не показывать вещи конечному пользователю.

Во многих моих приложениях у меня есть специальный буфер трассировки, который является круглым (то есть он хранит только последние 500 или около того строк). Когда я вижу проблему, я не только получаю трассировку стека, но и сохраняю этот журнал трассировки в памяти, поэтому у меня есть история того, что происходило незадолго до моей проблемы.

Вы также можете ознакомиться с проектом Log 4 Delphi .

0 голосов
/ 15 апреля 2011

Ничего плохого в любом другом ответе, но я просто хотел добавить эти полезные функции.

procedure DebugString ( const s : string ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( s ) ) ;
  {$ENDIF}
end ;

procedure DebugString ( const s : string ; args : array of const ) ; overload ;
begin
  {$IFDEF DEBUG}
  OutputDebugString ( PChar ( Format ( s , args ) ) ) ;
  {$ENDIF}
end ;
0 голосов
/ 10 декабря 2010

Я предпочитаю подсказки отладчика. Перейдя к отладчику, наведите курсор мыши на «str» в любом месте вашего кода, и вы увидите его текущее значение. Также вы можете выделить какое-то утверждение мышью и оценить его. Например, выделите «AnotherFunction (str)» и наведите на нее мышь.

...