Windows vs Linux - Как десктоп
, и игровая станция.
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.169] |
|
|
Правила раздела:
| Страницы: (1182) « Первая ... 794 795 [796] 797 798 ... 1181 1182 ( Перейти к последнему сообщению ) |
Windows vs Linux - Как десктоп
, и игровая станция.
|
Сообщ.
#11926
,
|
|
|
|
Цитата Guderian @ Так что фраза "дичайше глючит" - лично с моей точки зрения звучит странно, тем более, что основано на каком-то единичном примере. Либо надо давать характеристику - что такое "дичайше". Дичайше в данном случае обозначает, что поиск двух ошибок, которых нет это ни что иное, как дичь, не зависимо от того сколько раз этот глюк "выстрелит". Не забывай, после пары таких глюков ты на КАЖДУЮ ошибку будешь автоматом думать "а не глюк ли студии это?" И что тебе в таком случае делать? Искать ошибку? Или на всякий пожарный перегрузить студию сначала? Потери времени ты представляешь, я думаю. Цитата Guderian @ А Астарот нам не сказал, какая версия используется. Может это шестая и была. Хотя сейчас услышим ли мы правду Не сказал потому что не знаю. Вот вот начнутся очередные скачки a-la сайгак, так что если буду пролетать в тех краях и не забуду, то спрошу. |
|
Сообщ.
#11927
,
|
|
|
|
Цитата Астарот @ Не сказал потому что не знаю. Вот вот начнутся очередные скачки a-la сайгак, так что если буду пролетать в тех краях и не забуду, то спрошу. Я в последний раз такой баг видел неделю назад. На 2005 студии. В проекте на шарпе. |
|
Сообщ.
#11928
,
|
|
|
|
Для компиляции студия использует промежуточные obj-файлы. Их скармливают линковщику, который делает EXE. При простой компиляции (не Build Solution) используются созданные ранее промежуточные файлы, при условии, что исходник не изменился. Исходя из этого напрашивается вывод, что неправильно определено, что исходник изменялся, то есть OBJ-файл не был перекомпилирован после изменения. Такое может быть если был исходник без ошибки, потом внесли какие-то изменения, скомпилировали, а потом обнаружили, что появилась ошибка и убрали изменения с помощью Undo. Что в таком случае происходит? Дата последнего изменения исходника смещается на дату возвращенного с помощью Undo изменения. Компилятор смотрит, что OBJ-файл новее, чем дата последнего изменения, и не перекомпилирует его. Вот и вся проблема. Из возможных путей решения: внести какие-то изменения в файл принудительно, или сделать полный Build проекта, может даже очистить солюшен перед этим.
Это общая проблема всех средств разработки и никто от этого не застрахован. Опытный разработчик должен это знать. |
|
Сообщ.
#11929
,
|
|
|
|
Цитата Smike @ Из возможных путей решения: внести какие-то изменения в файл принудительно, или сделать полный Build проекта, может даже очистить солюшен перед этим. В моем случае это не помогало. Даже вручную удалял промежуточные файлы. Причем было это все несколько раз. А вот после открытия/закрытия все разрулилось. Вывод напрашивается сам. |
|
Сообщ.
#11930
,
|
|
|
|
Smike, во-первых так было бы делать крайне глупо, а во-вторых, в IDEA, по крайней мере, точно не так, так что не надо про "общие для всех". Я уверен, что и в студии не так, просто ее нет под рукой сейчас, чтобы проверить. Но я уверен, что там тоже сделано не так, а по нормальному. Так что источник глюка другой.
|
|
Сообщ.
#11931
,
|
|
|
|
Цитата Smike @ Для компиляции студия использует промежуточные obj-файлы. Их скармливают линковщику, который делает EXE. При простой компиляции (не Build Solution) используются созданные ранее промежуточные файлы, при условии, что исходник не изменился. Исходя из этого напрашивается вывод, что неправильно определено, что исходник изменялся, то есть OBJ-файл не был перекомпилирован после изменения. Такое может быть если был исходник без ошибки, потом внесли какие-то изменения, скомпилировали, а потом обнаружили, что появилась ошибка и убрали изменения с помощью Undo. Что в таком случае происходит? Дата последнего изменения исходника смещается на дату возвращенного с помощью Undo изменения. Компилятор смотрит, что OBJ-файл новее, чем дата последнего изменения, и не перекомпилирует его. Вот и вся проблема. Из возможных путей решения: внести какие-то изменения в файл принудительно, или сделать полный Build проекта, может даже очистить солюшен перед этим. Потрясающе, Smike! Откуда такие познания в области компиляции проектов ?! Кинь линк на первоисточник если возможно. |
|
Сообщ.
#11932
,
|
|
|
|
Цитата Unhealer @ Но я уверен, что там тоже сделано не так, а по нормальному. А что значит "по нормальному"? ![]() Правда тут основную роль играет скорее всего даже не дата, а именно флаг изменения файла. Итак, имеем: файл был сохранен, открыт в студии. В него были внесены изменения, файл стал измененным. Впоследствии изменения были отменены, — статус измененности, который кстати тоже сохраняется в буфере Undo, возвратился к своему начальному виду. Компилятор просматривает открытые файлы на предмет наличия изменений (правильно, он ведь берет их в данном случае не с диска!) и видит, что файл XXX не был изменен (флаг изменения сбросился). Вот он его и не перекомпилирует. "По нормальному" было бы наверно делать хеш. Но это будет в ущерб производительности, т.к. придется при каждой компиляции получать хеши всех файлов проекта, сверять их с хешами, сохраненными в промежуточных файлах и при наличии каких-либо отклонений производить перекомпиляцию. Но это будет дольше, в таком случае мы не получим никакой оптимизации по сравнению с процессом обычного билда. Так что мне кажется, что данная схема работы достаточно приемлима, просто нужно знать: если после Undo файл становится неизмененным, то нужно один раз сделать полный билд проекта или принудительно внести какие-то изменения в исходник. Цитата juice @ Откуда такие познания в области компиляции проектов ?! Кинь линк на первоисточник если возможно.Знания почерпнуты из собственного опыта |
|
Сообщ.
#11933
,
|
|
|
|
не. в студии этот вариант не пройдет.
Там происходит так - делаешь изменение - собираеш проект - во время сборки все несохраненные файлы сохраняются. создается obj. делаешь undo - и видиш что студия предлагает опять сохранится! И если ты сохранишся, то дата уже будет текущая, а если начнеш сборку, то сохранится все автоматом. |
|
Сообщ.
#11934
,
|
|
|
|
Цитата Smike @ "По нормальному" было бы наверно делать хеш. Но это будет в ущерб производительности, т.к. придется при каждой компиляции получать хеши всех файлов проекта, сверять их с хешами, сохраненными в промежуточных файлах и при наличии каких-либо отклонений производить перекомпиляцию. Но это будет дольше, в таком случае мы не получим никакой оптимизации по сравнению с процессом обычного билда. Так что мне кажется, что данная схема работы достаточно приемлима, просто нужно знать: если после Undo файл становится неизмененным, то нужно один раз сделать полный билд проекта или принудительно внести какие-то изменения в исходник. Студия, в принципе, сама может знать, что файлы изменились. В студии ведь файлы меняются. Да и не в этом дело. При полном удалении всех временных файлов эта штука остается. |
|
Сообщ.
#11935
,
|
|
|
|
Цитата Smike @ А что значит "по нормальному"? ![]() По нормальному, это когда система ведет себя так, как я ожидаю. Если я внес изменения, даже если это undo, то проект должен быть собран с учетом этих изменений. Какие там флаги, времена и почему что-то откатилось меня не волнует. |
|
Сообщ.
#11936
,
|
|
|
|
Цитата В моем случае это не помогало. Даже вручную удалял промежуточные файлы. Причем было это все несколько раз. А вот после открытия/закрытия все разрулилось. Вывод напрашивается сам.ни разу не встречался с ситуацией, когда бы Rebuild All не помогал. |
|
Сообщ.
#11937
,
|
|
|
|
Бобёр, это ведь не выход ребилдить целиком проект, только что бы убедится, что ошибка не наведенная, а реальная.
|
|
Сообщ.
#11938
,
|
|
|
|
Цитата Астарот @ это ведь не выход ребилдить целиком проект Выход. Всяко бывает, среды/компиляторы/линкеры тоже глючат. Цитата Бобёр @ ни разу не встречался с ситуацией, когда бы Rebuild All не помогал. Аналогично |
|
Сообщ.
#11939
,
|
|
|
|
Smike, то есть, ты предлагаешь делать так: если при компиляции всплыла ошибка, то нужно сделать ребилд, если не поможет - перезапустить студию. Может потом еще перезагрузиться, а? Или студию переставить? Ведь
Цитата Smike @ Всяко бывает И только если не помогло, то искать ошибку, да? |
|
Сообщ.
#11940
,
|
|
|
|
Цитата Unhealer @ Smike, то есть, ты предлагаешь делать так: если при компиляции всплыла ошибка, то нужно сделать ребилд, если не поможет - перезапустить студию. Может потом еще перезагрузиться, а? Или студию переставить? Ведь Смотря какая ошибка. Если написано - пропуск ; в конце строки. То проще поставить ; в конце, а не проверить компилятор еще раз ребилдом. |