|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
28.07.2011, 13:25 | #1 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Debug - как заставить Delphi точно указать на строку кода вызывающую ошибку?
Здравствуйте!
В замороченном проекте с кучей кода и окон в одном месте постоянно выскакивает "Could not convert variant of type (Null) into type (Double)". (Небольшая ремарка - конечно это само по себе бред полный, тк Null это "пусто" и при переделке "пусто" в любой формат хоть строки, хоть числа, чего угодно всё равно должно получиться "пусто", ну да ладно, оставим это на совести разработчиков Delphi.) Проблема том, что в месте где возникает ошибка происходит подряд целая цепь событий: создание окна, загрузка данных, выбор данных, создание другого окна, передача параметров, обновление данных БД, формирование отчёты FastReport. Много всего и куча данных - понять что где глючит не зная места и данных невозможно. Пробовал ставить BreakPoints, запускать в режиме Trace To Next Source Lines, жать break когда выскакивает ошибка, итд - без толку, ошибка просто появляется и откуда берётся непонятно! (Понятно лишь, что при нажатии на кнопку, но там такое кол-во сразу выполняется процедур и данных, что ого-го.) Если ли какой-то способ заставить Delphi чётко указать на строку кода, в которой возникает ошибка и желательно отобразить переменную и данные в удобоваримом виде которые вызывают ошибку? PS Попутно вопрос по датам - если при вводе Дата не указана, то может ли она везде (Delphi,Firebird,FastReport) быть null? или null в контексте Даты вызывает ошибку? Как тогда передавать "дата не указана", чтобы в БД сохранилось как null? Последний раз редактировалось delphicoding; 28.07.2011 в 13:49. |
28.07.2011, 13:49 | #2 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Если ошибка в недрах фастрепорта, строку оно не покажет, максимум CPU. Можно включить компиляцию с отладочными версиями модулей (Use debug .dcus), и смотреть по стеку, кто кого вызвал. Но, имхо, толку от этого не много. Выяснится, что у вас где-то в отчёте поле с датой, а в базе Null. Ну и чем поможет вам конкретная строка? Настройки отчета надо менять, скорей всего.
> E2010 Incompatible types: 'TStrings' and 'string'. Ну дык, TStrings — это список строк, а не строка. У него есть свойство Text, если нужны все строки слепленные оттуда. > конечно это само по себе бред полный...всё равно должно получиться "пусто" Null для того и ввели, чтобы отличать пустую строку от строки, которую не ввели. Не в обиду, но ваши ремарки очень напоминают одного известного литературного героя ) Цитата:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
28.07.2011, 13:56 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
эмм MadExcept, EurekaLog?
Отладка построчно? |
28.07.2011, 15:08 | #4 | |||
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Цитата:
Цитата:
Цитата:
На*уй нужен такой дебагинг не показывающий значений и названий переменных ?! Последний раз редактировалось delphicoding; 28.07.2011 в 15:11. |
|||
28.07.2011, 17:32 | #5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
видимо вы не умеете отлаживать. Все показывает. можно смотреть и значения переменных... что угодно в общем.
|
28.07.2011, 18:22 | #6 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Подскажите, пожалуйста, как же можно узнать имя переменной и значение, которое вызвало ошибку?
|
28.07.2011, 18:36 | #7 | |||
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Цитата:
По теме, построчная отладка практически всегда дает результат...Следовательно, инструмент в "зубы" и искать ошибку...И да, как говорили, на крайний случай можно EurekaLog воспользоваться... Цитата:
Цитата:
Будь проще и люди к тебе потянутся
Последний раз редактировалось spamer; 28.07.2011 в 18:38. |
|||
28.07.2011, 21:26 | #8 | |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Как написано в первом постинге открывающем тему - построчная отладка использовалась, но однозначного ответа получено не было, тк строка на которой всё встало - передаёт массу значений в другой юнит... что именно вызвало ошибко и как называется эта переменная - неизвестно...
Цитата:
Придумал как можно проверить, только не знаю как это реализовать... вопрос разумеется тупой - есть юнит DataModule, то есть без формы, в нём много чего происходит, а на выходе должен быть заполнен Datasource данными. Как можно из этого DataModule при помощи чистого кода создать нечто вроде текстового окна с кнопкой ОК/Закрыть и залить в это окно или некий графический объект все данные из Datasource (или Dataset) - чтобы наконец таки проверить все значения... Последний раз редактировалось Stilet; 29.07.2011 в 07:49. |
|
28.07.2011, 23:14 | #9 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
кстати, если процедура ваша, то есть сорцы на нее есть, то можно войти внутрь нее, что еще точнее выяснить ошибку. ну а если нет сорцов, то...проверять пять раз параметры, и читать справку по тому, какие параметры какое значение могут принимать, а каким нельзя передавать. блин, я пишу сейчас на С++(под голым MinGW), то есть без отладчика, умудряюсь отлаживать программу, а вы с отладчиком не можете проверить параметры...ну на крайняк можете написать Код:
Цитата:
ну а если хотите сами, то создаете форму с мемо, и заполняете. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 28.07.2011 в 23:17. |
|||
29.07.2011, 00:57 | #10 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
Имея опыт работы с наборами данных, могу предположить что проблема в нем.
На счет "маркера" Null, в наборе данных, при при редактировании поля записи, если в нем не содержится символов то функция возвращает True при вызове IsNull. Возможные ошибки в методе GetFieldData класса TDataSet (набора данных). FastReport и др. компоненты используют БД, а именно набор данных, который содержит ошибки. Советую найти/написать (не советую, пару выброшенных месяцев) набор данных. какую СУБД и набор данных используете? Хотелось бы задать автору еще один вопрос: проект уже относительно большой, как Вы пишите программу, без тестирования каждой своей подпрограммы? На счет отладки программы: знания места, которое вызвало исключительную ситуацию не всегда даст однозначное решение устранения ошибки, но дает программисту повод задуматься в эти слова...
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
Последний раз редактировалось chertovich; 29.07.2011 в 01:00. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли заставить рассматривать некую строку текста | kaljan775 | Общие вопросы C/C++ | 4 | 14.01.2011 05:17 |
Как заставить Delphi игнорировать регистр? | Akronis | Общие вопросы Delphi | 2 | 20.11.2009 23:30 |
Указать на ошибку | valerij | Microsoft Office Excel | 15 | 26.10.2008 13:31 |
Как заставить Delphi 2005 проигрывать сжатые DivX'ом AVI-файлы??? | Valdis | Компоненты Delphi | 5 | 16.09.2007 23:25 |
Как заставить Delphi 2005 проигрывать сжатые DivX'ом AVI-файлы? | Valdis | Общие вопросы Delphi | 1 | 08.09.2007 19:20 |