2010-12-09 3 views
3

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

Мой вопрос, учитывая функции, как

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

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

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

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

+0

линия 5, строка 7: назначены и никогда не используются, устранены оптимизатором – 2010-12-10 10:50:29

ответ

7

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

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

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

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

5

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

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

+0

+1 за OutputDebugString – RRUZ 2010-12-09 21:02:47

8

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

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

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

+1

12 лет Delphi, и я не знаю, что это! Кто-нибудь знает, когда он был добавлен? – 2010-12-09 23:15:09

+1

@Gerry: Delphi 7 по крайней мере. Может быть, 5 или 6; не устанавливайте их для проверки. – 2010-12-10 00:12:40

0

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

1

Другие ответы правильные.

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

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

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

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

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

0

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

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 ;