Повисание на этапе "Идет отладка" [РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Повисание на этапе "Идет отладка" [РЕШЕНО]

Сообщение sign » 09.07.2011 09:24:16

Лазарус 0.9.31
FPC 2.4.4
WIN XP

Ничего не предвещало беды.

Внёс небольшие изменения в одну процедуру и всё.
После компиляции виснет на этапе "Идёт отладка...".

Пересобрал лазарус. Пофиг.

Что делать и как с этим бороться?
Последний раз редактировалось sign 11.07.2011 09:35:31, всего редактировалось 1 раз.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Повисание на этапе "Идет отладка"

Сообщение svk12 » 09.07.2011 18:33:50

sign писал(а):Лазарус 0.9.31
FPC 2.4.4
WIN XP

Ничего не предвещало беды.

Внёс небольшие изменения в одну процедуру и всё.
После компиляции виснет на этапе "Идёт отладка...".

Пересобрал лазарус. Пофиг.

Что делать и как с этим бороться?


Может, упомянутую процедуру вернуть в исходное состояние?
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: Повисание на этапе "Идет отладка"

Сообщение minoshi » 10.07.2011 00:52:27

sign писал(а):Что делать и как с этим бороться?


понятия не имею (да и никто на этом сайте), пока Вы :

1) Не скажите откуда брали Ваш Лазарус и что он из себя есть. Я так подозреваю, что это срез, но какая версия?
2) не назовете, что за юнит, в котором Вы вносили изменения (часть Вашей программы? часть Лазаруса?)
3) не покажете проблемный код в двух вариантах (что было и что стало) и заодно не скажете, что вы хотели добиться.
4) не покажете, что пишет Лазарус в окне "Сообщения". Если Лазарус виснет наглухо и скопировать сообщения не возможно, то хотя бы сделайте снимок с экрана.

Только после этого, можете смело надеяться, что над Вашей проблемой подумают и может чего и подскажут.

Где-то так ...
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Повисание на этапе "Идет отладка"

Сообщение sign » 10.07.2011 06:06:04

minoshi писал(а):1) Не скажите откуда брали Ваш Лазарус и что он из себя есть. Я так подозреваю, что это срез, но какая версия?

Lazarus-0.9.31-31276-fpc-2.4.4-20110619-win32.exe
Вот отсюда - http://www.hu.freepascal.org/lazarus/
Это не первый запуск данной версии лазаруса, я уже работал, отлаживал, запускал на исполнение. Всё шло хорошо.
Завтра попробую другую версию.

minoshi писал(а):2) не назовете, что за юнит, в котором Вы вносили изменения (часть Вашей программы? часть Лазаруса?)

Это часть моей программы.
Одна процедура была сокращена, обнаружил упрощение. Размер процедуры строк 50.

minoshi писал(а):3) не покажете проблемный код в двух вариантах (что было и что стало) и заодно не скажете, что вы хотели добиться.

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

minoshi писал(а):4) не покажете, что пишет Лазарус в окне "Сообщения". Если Лазарус виснет наглухо и скопировать сообщения не возможно, то хотя бы сделайте снимок с экрана.

Упс!
Я неправильно выразился.
Лазарус не виснет. Если кликнуть по красному квадратику "Остановить", процесс компиляции прекращается и можно спокойно работать дальше.
Но, если снова запустить на исполнение, снова Лазарус "стоит" на этапе "Идёт отладка...". Как будто он циклит внутри себя.
Процессор занят на 50%.

На мою программу Лазарус не ругается.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Повисание на этапе "Идет отладка"

Сообщение Vadim » 10.07.2011 06:20:11

sign
Тогда не запускайте программу из Лазаруса, а просто откомпилируйте. Меню "Запуск -> Собрать..." и посмотрите, что будет.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Повисание на этапе "Идет отладка"

Сообщение Ask » 10.07.2011 09:29:57

Это чаще всего происходит из-за проблем либо внутри gdb, либо во взаимодействии gdb и Lazarus
В таких случаях, чтобы "отвиснуть", можно отстрелить руками процесс gdb.exe
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Повисание на этапе "Идет отладка"

Сообщение minoshi » 10.07.2011 18:32:33

sign писал(а):Но, если снова запустить на исполнение, снова Лазарус "стоит" на этапе "Идёт отладка...". Как будто он циклит внутри себя.Процессор занят на 50%.


поддерживаю Ask - скорее всего gdb.

Теперь запустите программу не через лазаря, а напрямую. Работает?
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Повисание на этапе "Идет отладка"

Сообщение sign » 10.07.2011 18:34:34

Спасибо за совет,завтра на работе попробую и отпишусь о результатах.

Добавлено спустя 12 часов 41 минуту 3 секунды:
Я то думал, что когда Лазарус кажит сообщение "идет отладка", он там что-то своё делает, ан нет, он программу уже запустил и всё виснет в ней.

Нашёл место, где случилась беда.
Причём непонятно почему, ещё позавчера тут всё работало.
Есть процедура, которая формирует и выполняет запрос к базе:

Код: Выделить всё
...
    qList: TSQLQuery;
...
procedure TDM.OpenList(_Date: TDate; _Filter: Boolean = False);
var Un: Int64;
    L: TStringList;
begin
  L := CurrentSQLList.MakeSQL(_Date, _Filter);
  if Assigned(L) then begin
    qList.Close;
    qList.SQL.Clear;
    qList.SQL.Assign(L);
    L.Free;
    qList.SQL.SaveToFile('c:\txt.txt');
    qList.ParamByName('Yr1').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn1').AsInteger := MonthOf(_Date);
    qList.ParamByName('Yr2').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn2').AsInteger := MonthOf(_Date);
    Un := CurrentSQLList.Un;
    qList.Open;
    qList.Locate('Un', Un, []);
  end;
end;


Когда руками выполняешь этот запрос (корпипаст в диалогом окне и запуск) - всё идёт отлично.
На этапе выполнения висит на строке qList.Open;.
При попытке выполнить F7 - никакой реакции. Т.е. что-то чего-то ждёт.
При клике по кнопке "Приостановить",
Получаю вот это:
1.png


Запущены только Опера и лазарус.
И чего лазарус ждет, какой ресурс оказался занят?
Это как-то можно узнать?


Сам запрос такой -
Код: Выделить всё
SELECT L.Un, L.FIO, L.Phone, L.Info, L.Comm,   R.NNPCTO, R.NNPCTO_Sponsor, R.NNPCTO_Status, R.NNPCTO_DC, R.Virta_Status, R.NNPCTO_DateIn, R.NNPCTO_IsDel, R.NNPCTO_IsMy,   R.CIINS, R.CIINS_Sponsor, R.CIINS_DC, R.CIINS_Status, R.CIINS_IsDel, R.CIINS_IsMy,   M0.SNNPCTO as SN0, M0.SVirta as SV0, M0.SCIINS as SC0,   M1.SNNPCTO as SN1, M1.SVirta as SV1, M1.SCIINS as SC1 FROM list L   LEFT JOIN reg R ON L.Un = R.Un   LEFT JOIN (SELECT       Un, SUM(BallNNPCTO*CountBuy) As SNNPCTO, SUM(BallVirta*CountBuy) As SVirta, SUM(BallCIINS*CountBuy) As SCIINS FROM move0     WHERE EXTRACT(YEAR FROM DateOp)=:Yr1 and EXTRACT(Month FROM DateOp) = :Mn1     GROUP BY Un     ORDER BY Un) M0 ON L.Un = M0.Un   LEFT JOIN (SELECT       Un, SUM(BallNNPCTO*CountBuy) As SNNPCTO, SUM(BallVirta*CountBuy) As SVirta, SUM(BallCIINS*CountBuy) As SCIINS   FROM move1   WHERE EXTRACT(YEAR FROM DateOp)=:Yr2 and EXTRACT(Month FROM DateOp) = :Mn2  GROUP BY Un   ORDER BY Un) M1 ON L.Un = M1.Un
WHERE ((L.Info = 0)
AND ((NOT ((NNPCTO_IsDel and CIINS_IsDel AND (M0.SNNPCTO=0 AND M0.SVirta=0 AND M0.SCIINS=0)) or (NNPCTO=0 and CIINS_IsDel AND (M0.SNNPCTO=0 AND M0.SVirta=0 AND M0.SCIINS=0)) or (CIINS=0 and NNPCTO_IsDel AND (M0.SNNPCTO=0 AND M0.SVirta=0 AND M0.SCIINS=0))))))
ORDER BY NNPCTO_IsMy, NNPCTO
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Повисание на этапе "Идет отладка"

Сообщение dunin » 11.07.2011 08:59:07

может как-то так попробовать?
Код: Выделить всё
...
    qList.SQL.Clear;
    qList.SQL.Assign(L);
    //L.Free;
    qList.SQL.SaveToFile('c:\txt.txt');
    qList.ParamByName('Yr1').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn1').AsInteger := MonthOf(_Date);
    qList.ParamByName('Yr2').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn2').AsInteger := MonthOf(_Date);
    Un := CurrentSQLList.Un;
        showmessage(qList.SQL.text);
        qList.Open;
        L.Free;
    qList.Locate('Un', Un, []);
...

в c:\txt.txt все как надо сохраняется?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Повисание на этапе "Идет отладка"

Сообщение sign » 11.07.2011 09:04:49

Хм...
Взял и сделал вот так.
Код: Выделить всё
procedure TDM.OpenList(_Date: TDate; _Filter: Boolean = False);
var Un: Int64;
    L: TStringList;
begin
  L := CurrentSQLList.MakeSQL(_Date, _Filter);
  if Assigned(L) then begin
    qList.Close;
    qList.SQL.Clear;
    qList.SQL.Assign(L);
    qList.ParamByName('Yr1').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn1').AsInteger := MonthOf(_Date);
    qList.ParamByName('Yr2').AsInteger := YearOf(_Date);
    qList.ParamByName('Mn2').AsInteger := MonthOf(_Date);
//    qList.Open;
  qTmp.Close;
  qTmp.SQL.Clear;
  qTmp.SQL.Assign(qList.SQL);
  qTmp.ParamByName('Yr1').AsInteger := YearOf(_Date);
  qTmp.ParamByName('Mn1').AsInteger := MonthOf(_Date);
  qTmp.ParamByName('Yr2').AsInteger := YearOf(_Date);
  qTmp.ParamByName('Mn2').AsInteger := MonthOf(_Date);
  qTmp.Open;
    Un := CurrentSQLList.Un;
    qList.Locate('Un', Un, []);
    L.Free;
  end;
end;           


qTmp.Open замечательно выполнилась.
Что за хрень творится?

Добавлено спустя 17 минут 7 секунд:
dunin писал(а):в c:txt.txt все как надо сохраняется?

Да, запрос нормально формируется.
Мало того, если сделать qList.ExecSQL, то данный запрос проходит чётко, но, для вывода в грид, нужно сделать open.
Вот тут-то и спотыкнулась программа.

Причём, как мне сейчас видно, не понравился ей qList.
Причём, мне совершенно не понятно, что так Лазарус не взлюбил вдруг эту переменную.

Добавлено спустя 13 минут 14 секунд:
Тфу, блин!

Когда руки растут из того на чём сидят...

Короче, есть у меня процедура, которая qListAfterScroll.
Как только об оной вспомнил, так сразу всё встало на свои места.
Там у меня идет проверка на то, что за перец её вызвал.
Так вот как-то случайно вот тут всё и поломалось. Соотвественно, зациклилось. :cry:

Всем спасибо за участие.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru