Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Просмотр значений строк списка при отладке [Delphi, Windows]


2Nat ©   (2002-10-28 17:34:00) 

При отладке программы не получается посмотреть значения строк списка PStrList. Обычно при наведении курсора на элемент программы можно увидеть его значение или в WatchList посмотреть. Здесь же количество строк в любом списке что-то типа 4204748, а значение SL.Items[i] = "Access violation at ... accessing FFFFFFFF". Значения простых переменных видны.
Что сделать? Программа слишком большая, а ошибки лучше поймать сразу. Нет больше сил выводить значения через ShowMessage.
Заранее спасибо.


Vladimir Kladov   (2002-11-02 07:53:00) [1]


> В Evaluate/Modify, если в качестве значения набрать SL^
> и нажать Inspect, то на вкладке Properties появившейся панельки
> среди прочих свойств увидим Count (то что надо)и Items.
> Если выделить Items, то даже можно увидеть его адрес. Но
> быстро в режиме отладки строки из Items посмотреть не получается.
>


Увы, приходится смотреть FCount, FItems[ I ] и т.д. Инспектор
отладчика не понимает свойства в objects по-нормальному. Хорошо хоть, компилится корректно.

Если часто в одном месте приходится смотреть много разных полей, но не хочется много вбивать в Watcher, могу предложить такое:
{$IFDEF DEBUG}
var TmpCount: integer; TmpValue: string;
{$ENDIF}
...
{$IFDEF DEBUG}
TmpCount := MyList.Count;
TmpValue := MyList.Items[ I ];
{$ENDIF}

останавливаемся и смотрим TmpXXX.

Вообще, при хорошем программировании такие фокусы обычно не нужны - все и так работает :)


> SPeller © (29.10.02 16:25)
> У меня счас нет времени смотреть исходники, уравками так
> вылезаю в этот форум. Поэтому если тебе показывают адрес
> чего-либо, то после имени переменной надо поставить крышечку
> эту незамысловатую, чтобы тебе показали значение.

Крышечка - это чтобы посмотреть, на что указывает указатель. Если
нужно конкретное поле, крышечка особо не нужна, delphi и так поймет. Единственное место, когда крышечка необходима по синтаксису - это в
with:

with MyObj^ do ...

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


SPeller   (2002-10-29 16:25:00) [2]

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


2Nat   (2002-10-29 14:13:00) [3]

В Evaluate/Modify, если в качестве значения набрать SL^ и нажать Inspect, то на вкладке Properties появившейся панельки среди прочих свойств увидим Count (то что надо)и Items. Если выделить Items, то даже можно увидеть его адрес. Но быстро в режиме отладки строки из Items посмотреть не получается.
Понимаю, что ворос из области "KOL" перешел в область "программирование для чайников", но все же... Буду очень признательна за помощь :)
Всяческие махинации с перестановками значка адресной операции не помагают. Help


SPeller   (2002-10-29 01:02:00) [4]

А если воспользоваться окнами Evaluate/Modify или Watches ? Эффект тот же? По-моему они дожны помочь тебе сполна.


2Nat   (2002-10-28 19:24:00) [5]

:)))
Для SL^.Count и наведении чего надо на крышечку видим в скобках список параметров списка, среди них fCount - похоже на количество.
Как посмотреть сами строки. Там в перечне свойств виднелся указатель ...,fList:$XXXXX, ... Может это оно, как его смотреть.
Извиняюсь, если отвлекаю от чего-нибудь более высокого.



SPeller   (2002-10-28 18:54:00) [6]

А если так: SL^.Count; ? У тебя же SL - указатель на объект-список строк. И потом наводишь мышу на крышку и получаешь то что тебе надо.


> SL.Count^

:-))


2Nat   (2002-10-28 18:36:00) [7]

Не получается :(
В WatchList пишу SL.Count^ (или (SL.Count)^) - результат "Pointer type required". В данный момент список точно существует и и содержит строки.


SPeller   (2002-10-28 17:57:00) [8]

ЗЫ: И курсор наводи на крышечку ^


SPeller   (2002-10-28 17:56:00) [9]

Просто тебе показывают значения указателей. Используй запись вида Variable^ для доступа именно к значению, а не адресу, по которому это значение расположено.


Наверх

Титульная страница Поиск, карта сайта Написать письмо