Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает breakpoint, В одной из программ. 
:(
    Опции темы
LamerTM
Дата 25.11.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Стоит Delphi 7. В одной из программ не срабатывает Breakpoint. Вообще. В чем может быть причина?
В других прогах срабатывает (напр. если новый проект сделать, кинуть кнопку на форму, поставить брейк в buttonclick, то при нажатии на кнопку он сработает).
PM MAIL   Вверх
AKATAN
Дата 25.11.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: 1
Всего: 1



Значит данный кусок кода не выполняется.

Приведите пример, и по возможности скрин того, как Вы ставите брейкпоинт.
PM MAIL ICQ   Вверх
Bose
Дата 25.11.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Проект должен быть скомпилирован с включением отладочной информации. 

Project->Options->Compiler
Здесь должны быть включены галочки:
Debug information, Local symbols, Reference info, Definitions only, Assertions.

А галочка Optimization должна быть выключена.

PM MAIL WWW Skype   Вверх
AKATAN
Дата 25.11.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: 1
Всего: 1



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

PM MAIL ICQ   Вверх
Bose
Дата 25.11.2008, 21:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(AKATAN @  25.11.2008,  21:29 Найти цитируемый пост)
Но не уверен что включение галочки Optimization будет влиять на отладку. Оптимазиция касается бинарного в не исходного кода.

С оптимизацией некоторые куски кода не отладить.
PM MAIL WWW Skype   Вверх
THandle
Дата 25.11.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



AKATAN, ну а попробовать? smile 

Возьмем самый простой пример:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := 5;
end;


Поставим бряк на строку с присвоением переменной i числа 5.
При отладке эта строчка будет пропущена.

А теперь попробуем так:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  {$O+}
  i := 5;
  {$O-}
end;


При отладке строка не пропускается...
PM   Вверх
LamerTM
Дата 25.11.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



В проекте несколько форм. Соответственно несколько модулей. Брейкпоинт работает во всех модулях кроме одного. Не работает только в unit5.
Проявляется это по-разному.
Например, если поставить брейкпоинт в процедуру FormCreate и запустить прогу по F9, то после компиляции (т.е. уже во время работы программы) картинка становится такой:

user posted image

Код FormCreate отрабатывает. Это установлено однозначно, потому что появляется messagebox. Брейкпоинт не срабатывает (хотя по картинке и не должен, но почему он такой цвет имеет ?)


Если поставить брейкпоинт в другой процедуре того же модуля, и запустить прогу (F9), то после компиляции картинка такая:

user posted image

При нажатии кнопки, соответствующей этой процедуре, этот код запускается, что видно по появляющемуся messagebox. Но брейкпоинт не срабатывает. Цвет полоски брейкпоинта остается таким же как на картинке.

Насчет настроек Project->Options->Compiler. Все галочки установлены как надо.
PM MAIL   Вверх
Bose
Дата 25.11.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(LamerTM @  25.11.2008,  21:47 Найти цитируемый пост)
Насчет настроек Project->Options->Compiler. Все галочки установлены как надо. 

Возможно, компилятор всё-таки использует dcu-шки без отладочной ифнормации.

Попробуй, сделать принудительный Build: Project->Build project.

PM MAIL WWW Skype   Вверх
AKATAN
Дата 25.11.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: 1
Всего: 1



THandle, спасибо. Точно. Че-то не стыкался с подобным. Хотя возникнуть может такое лишь в довольно кривом коде.

На счет брейкпоинтов. Хм...
Данный цвет брейкпоинта (блевотно-зеленый, что-ли =) ) обозначает, что он - "unreachable breakpoint" (недосягаем)

Может все дело в многопоточности? Возможно данный код исполняется раньше, чем до него доходит отладчик, который шустрит другой поток... Хотя это лишь предположение. У меня такое встречалось. Решал, либо вставкой мусорного кода, либо немного переделывал сам код...
PM MAIL ICQ   Вверх
LamerTM
Дата 25.11.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(Bose @ 25.11.2008,  22:33)
Попробуй, сделать принудительный Build: Project->Build project.

Не сработало. Пробовал удалить dcu - тоже не помогает.
Скопировал проект на другой комп (там тоже delphi 7 установлена) - тот же результат. То есть дело в проекте (а то я тут уже делфи пару раз сносил и устанавливал.  smile ).

Добавлено @ 23:04
Цитата(AKATAN @ 25.11.2008,  22:51)
На счет брейкпоинтов. Хм...
Данный цвет брейкпоинта (блевотно-зеленый, что-ли =) ) обозначает, что он - "unreachable breakpoint" (недосягаем)

Может все дело в многопоточности? Возможно данный код исполняется раньше, чем до него доходит отладчик, который шустрит другой поток... Хотя это лишь предположение. У меня такое встречалось. Решал, либо вставкой мусорного кода, либо немного переделывал сам код...

Я многопоточность не использую. Потому что не знаю как её использовать.  smile 

Сейчас я сделал так. В файле .dpr есть команда Application.CreateForm(TForm5, Form5); Она вызывает понятно какую процедуру (скрин её я приводил). Я поставил брейкпоинт прямо на эту команду в модуле .dpr
Результат: брейкпоинт сработал (потому что он везде работает кроме unit5). Дальше я нажал F7 чтобы зайти в Unit5.FormCreate. И получил ошибку Access Violation. Если вместо F7 нажать F8, то ошибок никаких нет. (При простом запуске программы тоже нет ошибок)
Окно ошибки было такое: 
в заголовке: "Debugger Exception Notification"
Текст в окне: "Project <имя exe-файла> raised exception class EAccessViolation with message 'Access violation at address 0052E05D in module '<имя exe-файла>'. Write of address 01960A14. Process stopped. Use Step or Run to continue."

Полоска дебагера (которая указывает на текущую команду) оказалась в какой-то левой процедуре в unit5, которая в это время никак выполняться не могла.

Это сообщение отредактировал(а) LamerTM - 25.11.2008, 23:14
PM MAIL   Вверх
LamerTM
Дата 26.11.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Я тут подумал, а может быть причиной глюка большой размер исходного кода модуля? Он у меня 794 КБ. Когда был 750Кб все работало нормально (у меня старая версия сохранена, там всё ОК).
PM MAIL   Вверх
AKATAN
Дата 26.11.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: 1
Всего: 1



Цитата

...быть причиной глюка большой размер исходного кода модуля...

Не думаю. У меня бывали сорцы и по пару метров.

А то что ты не юзаешь многопоточность, не значит, что процесс имеет всего один поток. Возможно ты используешь всякие stream'ы (Например filestream...) что сами по себе создают свои потоки. Это легко проверить с помощью проги ProcesXP (http://www.sysinternals.com/). Она покажет все процессы, потоки, семафоры, мютексы и прочий бред. Скачай, запусти приложение и посмотри. Мне аж самому интересно стало... smile 
PM MAIL ICQ   Вверх
Akella
Дата 26.11.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(AKATAN @  25.11.2008,  21:29 Найти цитируемый пост)
Но не уверен что включение галочки Optimization будет влиять на отладку

Будет. Если Выключена, то нужно включить и обязательно перекомпилировать весь проект.
PM MAIL   Вверх
CodeMonkey
Дата 26.11.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(LamerTM @  25.11.2008,  21:47 Найти цитируемый пост)
Если поставить брейкпоинт в другой процедуре того же модуля

1. Можете переместить код AbortButtonClick рядом к FormCreate, сделать Build, а потом - скриншот этих двух процедур? Хочу посмотреть на синие точки. Бряки ставить не обязательно.
2. Проверьте, что стоит у формы в её FormCreate в инспекторе объектов.
3. Проверьте ещё вот это: IDE.Delphi.Отладка.Неправильная нумерация строк.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
LamerTM
Дата 26.11.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(CodeMonkey @ 26.11.2008,  10:10)
Цитата(LamerTM @  25.11.2008,  21:47 Найти цитируемый пост)
Если поставить брейкпоинт в другой процедуре того же модуля

1. Можете переместить код AbortButtonClick рядом к FormCreate, сделать Build, а потом - скриншот этих двух процедур? Хочу посмотреть на синие точки. Бряки ставить не обязательно.
2. Проверьте, что стоит у формы в её FormCreate в инспекторе объектов.
3. Проверьте ещё вот это: IDE.Delphi.Отладка.Неправильная нумерация строк.

1. Вот:

user posted image

Синих точек нет (я сделал всё правильно: переместил код AbortButtonClick и нажал Build Project). Их нет вплоть до 6058 строки. С 6059 строки и ниже они есть. Если ставить бряк туда где нет синих точек, то он становится с крестиком и не срабатывает. Если где есть синие точки - тогда с галочкой.

После того как переставил процедуру AbortButtonClick бряки с галочкой стали срабатывать, но при этом выдается ошибка AccessViolation. Вот такая:

---------------------------
Debugger Exception Notification
---------------------------
Project aaa.exe raised exception class EAccessViolation with message 'Access violation at address 00406384 in module 'aaa.exe'. Write of address 0000000A'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------



2. Стоит имя процедуры FormCreate.


3. Что-то похожее, но у меня по-другому. У меня до 6058 строки синих точек нет вообще, а ниже они стоят четко напротив нужных команд (не напротив пустых строк или коментов).
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1217 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.