И это он ещё до UB не дошёл. :)
Ого С++ почти как... почти всё.
Сталкиваешься с ошибкой, тратишь весь рабочий день, чтобы её локализовать, исправить или хотя бы обойти. Следующий день тратишь на поиск информации в сети. Находишь древний всеми забытый форум где описывается твоя проблема в комментарии за 2001 год. А следующим комментом идёт ответ из 2010, где ему отвечают, что новые разработчики CBuilder данную проблему решили в одном из патчей в 2005 году. Совместимости со старыми проектами в новых версиях нет.
За пару часов пересоздаёшь проект с полным копированием всего кода и компонентов. Работает.
За пару часов пересоздаёшь проект с полным копированием всего кода и компонентов. Работает.
один друг, адепт низшего пищевого звена программирования, интересуется - а как можно пофиксить проблему пересоздавая проект? Типа юзая рефы на обновлённые апи либ, или в чём цимес?
Умер стандартный компонент кнопки в стандартной библиотеке. Переподключение её в проекте результатов не дало.
Условно, на форме три стандартные кнопки. Созданы в мохнатых годах не мной, десяток лет их код точно никто не трогал. В один момент, даже не после апдейта программы, а просто в случайное время, одна кнопка перестала работать. Нажимаешь, а там ошибка с набором буквоцифр, и краш программы.
Крашит сразу после прохода всего кода на кнопке. Переносишь код на соседнюю кнопку, этот код на другой кнопке работает.
Если удаляешь весь код внутри, кнопка всё равно крашит.
Если создаёшь новую пустую кнопку на форме, она ТОЖЕ КРАШИТ!
Смотришь прошлые версии программы, там эта кнопка тоже не работает.
Весь код этого компонента идентичен коду соседних, но которые работают. ctrl+C ctrl+V рабочей кнопки создаёт нерабочую.
Открываешь другой рабочий проект, создаёшь пустую кнопку, она работает.
Просто в одном конкретном проекте перестал работать стандартный компонент кнопки. Причём только одна из старых и каждая новая. Проект был большой. но я быстро его перенёс в новый пустой проект, просто перенося код и расставляя те же компоненты с теми же настройками. Но эта херня с кнопками потом опять повторилась спустя пол года, но уже для другой кнопки в другом небольшом приложении. Так же внезапно, без вмешательств.
Только стандартные библиотеки от Borland CBuilder 5 и 6.
Условно, на форме три стандартные кнопки. Созданы в мохнатых годах не мной, десяток лет их код точно никто не трогал. В один момент, даже не после апдейта программы, а просто в случайное время, одна кнопка перестала работать. Нажимаешь, а там ошибка с набором буквоцифр, и краш программы.
Крашит сразу после прохода всего кода на кнопке. Переносишь код на соседнюю кнопку, этот код на другой кнопке работает.
Если удаляешь весь код внутри, кнопка всё равно крашит.
Если создаёшь новую пустую кнопку на форме, она ТОЖЕ КРАШИТ!
Смотришь прошлые версии программы, там эта кнопка тоже не работает.
Весь код этого компонента идентичен коду соседних, но которые работают. ctrl+C ctrl+V рабочей кнопки создаёт нерабочую.
Открываешь другой рабочий проект, создаёшь пустую кнопку, она работает.
Просто в одном конкретном проекте перестал работать стандартный компонент кнопки. Причём только одна из старых и каждая новая. Проект был большой. но я быстро его перенёс в новый пустой проект, просто перенося код и расставляя те же компоненты с теми же настройками. Но эта херня с кнопками потом опять повторилась спустя пол года, но уже для другой кнопки в другом небольшом приложении. Так же внезапно, без вмешательств.
Только стандартные библиотеки от Borland CBuilder 5 и 6.
Я был бы рад постигнуть единение с машиной, чтобы говорить на их языке, но увы. Мне и самому интересно, в чём могла быть причина такого поведения программы.
первое, что в голову приходит - это перелинковка. Но ни я, ни мой друг не шарят. И друг просто в восторге, что с его скриптовым говном, проблем такого плана не существует) Спасибо за инфу
Похоже на ошибку работы с памятью. То самое UB. Поведение зависит от рандома, который оказывается в определённом блоке памяти. В вашем случае вышло так, что в 99% случаев оно не сказывается на поведении. Но когда наступает этот 1% - начинаются чудеса.
Гейзенбаги в C/C++ всегда связаны с ошибкой работы с памятью. В этом случае то что проблемный "код работает" не является подтверждением его правильности. Ему просто повезло, но он всё равно кривой.
В современном окружении, как правило, отлов багов с памятью не представляет большой проблемы (valgrind), за исключением довольно вычурных ошибок программиста приводящих к stack smashing'у (но и тут есть методы). В случае с Borland C ребятам можно только посочувствовать.
В современном окружении, как правило, отлов багов с памятью не представляет большой проблемы (valgrind), за исключением довольно вычурных ошибок программиста приводящих к stack smashing'у (но и тут есть методы). В случае с Borland C ребятам можно только посочувствовать.
Это долбанная магия.
если что-то относительно стабильно воспроизводится, то обычно не проблема выяснить в чем дело. на лине такое вполне комфортно ловится через valgrind и gdb. быстрый поиск говорит что на винде тоже есть неплохие аналоги: (drmemory, verysleepy, VMMap, Application Verifier). в теории, для системщика, бинари не особо отличаются от скриптов, но сама история полна мистики и приключений. спасибо.
Борланд? Дед, лезь обратно в свою криокапсулу.
Я не дед. Пришёл с ВУЗа на завод, и вот...
Сама история из 2020. Даже сейчас там продолжают работать на этом. Сейчас на моё место пришёл смельчак, который всё это переносит на web, я лишь пожелал удачи. Для одного человека там неподъёмный объём, и от такого наследия там избавятся не скоро.
Сама история из 2020. Даже сейчас там продолжают работать на этом. Сейчас на моё место пришёл смельчак, который всё это переносит на web, я лишь пожелал удачи. Для одного человека там неподъёмный объём, и от такого наследия там избавятся не скоро.
Это компилятор ахуенно оптимизирует?
>> Крашит сразу после прохода всего кода на кнопке. Переносишь код на соседнюю кнопку, этот код на другой кнопке работает.
Ах, если бы были эти. Как их там. Брейкпойнты...
Ах, если бы были эти. Как их там. Брейкпойнты...
Ну так я пошагово и выполнял. Я же сказал, после последнего оператора в Button1Click сразу и выбрасывало, сразу. И если правильно помню, падало вместе с билдером. Он вообще любил падать вместе с программой, так что особо не удивляло.
Так это везде, где есть софт с долгой историей, а не только на плюсах и даже не только в программировании
Ты только что легаси
Пускай теперь попробует что-то написать на Vulkan, вот тогда срака будет гореть. С++ - это так, цветочки.
Так можно совмещать. Причём, обычно, как раз, и совмещают.
Я знаю, я Вулканом и С++ уже 8 лет занимаюсь :)
А что там с вулканом? В чем жопа?
То, что занимает в OpenGl одну строчку, на Вулкане может занимать несколько классов.
А преимущества есть? Стоит ли вкатываться сейчас? Думаю вот пощупать граф либы, интересно мнение изнутри
Ну Вулкан сейчас является трендом. Он более низкоуровневый, чем OpenGl, что позволяет иметь больше контроля за ресурсами. Теоретически может дать профит на 10-20%
Да так на любом новом проекте с неизвестной архитектурой.
Хочу хотя бы C++. Хотя бы есть контейнеры. Шаблоны. RAII. Я устал обработать ошибки через goto и делать полиморфизм через void*, босс.
А оно как-то исторически сложилось с тех пор, когда мне в школе в руки попала ардуина. Хотя около-железные наклонности и раньше были. Я к тому моменту уже прогал на VB, потихоньку переползая на шарп. В универе сначала прогал веб на шарпе, мобилки, а потом как-то ушел в сишку.
Кто-то сказал RAII?
В проекте в прерывании была ошибка, грубо говоря инкремент count++ не работал, спустя пару дней понял, что если переписать простое условие со switch case на if - начинает работать
А настоящий плюсоёб бы открыл Disassembly и посмотрел что там нагенерилось, что инкремент не работает. Поменял бы пост-инкремент на пре-инкремент, и была бы благодать...
Чтобы написать коммент, необходимо залогиниться