![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Просмотр значений строк списка при отладке [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^ для доступа именно к значению, а не адресу, по которому это значение расположено.