gxachaturov: (Default)
[personal profile] gxachaturov
Наконец начал класть последние мазки на своего монстра, хромающего сразу на все лапы. Ну, думаю сейчас половлю остатних блох, и... Как бы не так.

Вылез StackOverflowException. При входе в какой-то конструктор. Че делать? Ну, ладно завтра на работе на компе с большей памятью погоняю. Но сегодня-то что делать?

Date: 20 May 2012 18:06 (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Ну это какая-то плохая рекурсия, наверное. Нормально так stackoverflow случиться не может, если не совсем уже извратиться и -Xss1k написать.

У тебя же есть stacktrace; ну там всё и видно.

Date: 20 May 2012 18:53 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Я же проверяю в пошаговом режиме. Рекурсия там где-то валяется, но до нее не доходит. У меня есть конструктор в нем и лежит рекурсия. При самом входе в него, до начала рекурсии летит оверфло. Думаю, ладно, а что если создам объект пустым конструктором, а уже потом переприсвою его с помощью рекурсивного. Вставил. Ага, теперь оверфло вылетает в другом месте, до того как успеваю вызвать пустой конструктор.

А в стэктрейсе некоторые системные куски отладчик не прослеживает.

Моя гипотеза, что просто мало оперативной памяти. Дома всего 1Г. Некоторые другие домашние глюки на работе не проявляются.

Date: 23 May 2012 21:18 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Нужна идея. 5-й день не понимаю как локализовать ошибку.

Вылезает StackOverflowException. Пытаюсь локализовать плохую рекурсию, а не могу.

Очевидно, что проблема связана с одним новым классом, с его конструктором, но проследить не могу: стэк не показывает.

Запускаю пакет как под VS2008 так и под 2010.

В пошаговом режиме под отладчиком в 2008 ошибка вываливается в момент, когда я вызываю квадратный корень, на операции

х=sqrt(х); !

Без отладчика вываливается в другой момент, несколько позже. Причем в этом случае, подозрительный конструктор, сука, отрабатывает до конца по крайней мере один раз!

Под 2010 картина похожая, но вываливание немного в другие моменты.

Какие идеи, чтобы визуализовать ошибку моей логики?

Date: 26 May 2012 13:35 (UTC)
From: [identity profile] txtarunz.livejournal.com
по моему, это выглядит как затирание памяти, происходящее из бага в другой части кода. Я бы искала, отключая куски кода в коммент, методом "деления кода пополам".

Date: 26 May 2012 14:17 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Да, но не затирание, а попытка затирания. Но деление пополам не понимаю как реализовать: Вываливаемся при входе в пустой конструктор.

Т.е. до входа все ок, когда же входим, то не исполняется 1-я же операция.

По моиму ощущению, дело в том, что здесь конфликт между философией компиляции и интерпретации. Отладчик - это пошаговая интерпретация. Построение пустого объекта - это просто (заранее, в компилируемом режиме!) просчитывание и выделение памяти под него. Когда ошибка именно здесь, то отладчик ВС мне не дает средств проследить ее в пошаговом режиме. Сам то он об нее спотыкается, но где-то у себя в кишках.

Вот если бы он построил объект, то дальше могу работать пошагово.

Date: 26 May 2012 15:03 (UTC)
From: [identity profile] txtarunz.livejournal.com
- как реализовать деление пополам :
я бы вспомнила, какой код был добавлен после той версии, которая еще работала, и его отключила. А потом делила его пополам. А если не помнишь, то отключала бы очень крупные куски, сверху вниз.
И все это без пошаговой отладки, просто смотреть, грохнется ли, и если да - то в каком месте (последнее может ускорить локализацию вредоносного куска).
Правда, все это получается когда компиляция выполняется за приемлемое время.

Date: 26 May 2012 16:03 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Последный работающий код от неработающего отличается конструктором одного единственного нового класса, который я придумал для добавочной функционалности. До самой функциональности сейчас (в переделаной версии) дело не доходит: все падает в пустом конструкторе.

А старой версии, ошибка вела себя как ртутный шарик: когда в отладчике работаешь, то вываливется не там, когда без него. Плюс к тому, по разному в 2008 и 2010. И как при этом делить пополам?
Edited Date: 26 May 2012 16:04 (UTC)

Date: 26 May 2012 17:23 (UTC)
From: [identity profile] txtarunz.livejournal.com
То-есть, баг был всегда, просто проявлялся по разному?
Тогда и надо начать с самого верха.

Date: 26 May 2012 19:06 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Нет, я так не думаю. Баг появился вместе с созданием нового класса, соданного для новой цели.

Однако, в эти часы наметился прогресс:

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

Но дальше идут новые чудеса, в которых пока не могу разобратся:

Начинаю по существу инициализировать переменную Х

(подкласс_большого_класса Х; )

моего объекта-пустышки, вызываю конструктор:

Х=подкласс_большого_класса (параметры конструктора);

внутри этого конструктора все делается верно. Выхожу из конструктора - Х остался каким был, т.е. неопределенным.

вставляю в эту програмку вспомогательную переменную того же подкласса:

подкласс_большого_класса темп(параметры конструктора);
Х=темп;

Результат: темп правильный, Х остался как был.

Date: 27 May 2012 02:32 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Новости с фронта.

У меня на компе 2 версии винда XP: 32 и 64х. В каждой своя версия VS 2008.

Предыдущие чудеса были на 32. Они исчезли без каких либо изменений в 64. Программа продвинулась значительно дальше. Проблем с новым конструктором никаких: прекрасно сработал. Никаких бяк из прошлого поста.

Но потом случилось новое чудо. Я в текущей версии объект нового класса и несколько старых засунул в один супер-класс. И работаю с глобалным объектом этого суперкласса, сделав старые функции его членами. Короче, нахожусь в функции А этого класса вызванной из глобалного объекта, выполняю функцию Б. 'this' из А виден и в прекрасном состоянии, вызываю функцию С того же класса. При входе - stack оверфло, и this перестает быть виден изнутри С.

При этом вызове не строится ничего, не работает ни один конструктор. Ни одной команды С не успевает выполнится.
Edited Date: 27 May 2012 02:34 (UTC)

Date: 27 May 2012 19:07 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Сейчас эффект в обеих (32 и 64) операционках стабильно одинаков, как он описан в предыдущем комменте для 64. И куда дальше делить пополам?

Для любопытствующих (интересно, кто из богов отвечает на небесах за программирование?), засунул прект в его текущем состоянии на http://newton.uam.mx/xgeorge/bicub_v_2008.rar.

Date: 28 May 2012 01:11 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Ага, детектив, так детектив. Буду поддерживать интригу до конца.

Родилась дикая идея: в этом подлом случае надо делить пополам не назад, а вперед.

Поделю-ка тот модуль, котором не сработала ни одна команда, и посмотрю что выйдет.

Date: 29 May 2012 02:13 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Ну что вам сказать, коллеги... Идея была продуктивна. Но дело не в этом. Найдя место, где все валилось, я сделал маленькое изменение, после чего эффект исчез.

Наверно я никогда не узнаю почему.

Ведь замена

cloud_of_ms_cl_in_3x3 *p_var;
p_var = new cloud_of_ms_cl_in_3x3(iii, jjj);
AT.CLD=*p_var;
delete p_var;

//AT.CLD= cloud_of_ms_cl_in_3x3(iii, jjj);

комментированного кода на некоментированный в одной из подпрограммок, не объясняет ничего. Кода у меня больше 500Кб и я всегда писал как в комментированном коде. Ничего плохого в этом не было.

Это как если бы в детективе труп неожиданно бесследно сперли, а мы продолжаем искать убийцу.
Edited Date: 29 May 2012 02:23 (UTC)

Date: 26 May 2012 14:21 (UTC)
From: [identity profile] gxachaturov.livejournal.com
Сорри, пояснение. После первого моего вопля, я переструктурировал весь проект, так что текущая клиника не совсем та, что была в первом посте. В новой версии все стабилизировалось и происходит при вызове пустого конструктора.

Profile

gxachaturov: (Default)
gxachaturov

July 2025

S M T W T F S
   1 23 45
6789101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 6 July 2025 02:41
Powered by Dreamwidth Studios