Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, blackhearted, Вы писали:
B>>>>Не в плюсах всё просто? Увидел трейс — 5 минут и fixed? B>>>>Басенщик из тебя классный выходит.
I>>>Смотри, что было I>>>
M>>>>>null dereference?
I>>>>Фиксится примерно за 5 минут по первому обнаружению. Баги с указателями проявляют себя _годами_.
I>>>null dereference именно так и фиксится — 5 минут и fixed. B>>Аналогично и в плюсах — 5 минут и fixed.
I> Проезд по памяти да за 5 минут ? Кто из нас сказочник ?
Охохо, null dereference чудестным образом превратился в проезд по памяти.
Браво, Маэстро!
I>>>Скажи внятно, какие примеры тебе нужны ? Я вот покажи косяк с указателем, а ты начнешь ныть что де это не баг с указателем а кривые руки автора кода Я уже сейчас вижу этот твой основной аргумент. С такими д'Артаньянами спорить бессмысленно.
B>>Ты показывать будешь или тебе просто страшно еще больше слить, провидец ты наш?
I>Не вижу смысла что либо показывать очередному д'Артаньяну.
Т.е. таки нет примеров.
Как и предполагалось, в принципе, разговор можно быдло заканчивать после того, как благородного дона всегда устраивали стандарнтые java сущности.
Удачи в вашей борьбе с багами при использовании указателей, это будет тяжело.
Здравствуйте, Ikemefula, Вы писали:
I>>>null dereference именно так и фиксится — 5 минут и fixed. B>>Аналогично и в плюсах — 5 минут и fixed.
I> Проезд по памяти да за 5 минут ? Кто из нас сказочник ?
Зачем? В случае первого же обращения к памяти по битому указателю сразу же диагностическое сообщение + стек вызовов.
Здравствуйте, Mystic, Вы писали:
M>В случае первого же обращения к памяти по битому указателю сразу же диагностическое сообщение + стек вызовов.
$ cat valgrind.cpp && g++ valgrind.cpp && valgrind ./a.out
#include <stdio.h>
int main()
{
int* value = new int[8];
printf("%d\n", value[8]);
delete value;
return 0;
}
==30334== Memcheck, a memory error detector
==30334== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==30334== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==30334== Command: ./a.out
==30334==
==30334== Invalid read of size 4
==30334== at 0x4006A2: main (in /home/mu/Lab/a.out)
==30334== Address 0x5936060 is 0 bytes after a block of size 32 alloc'd
==30334== at 0x4C24A72: operator new[](unsigned long) (vg_replace_malloc.c:305)
==30334== by 0x400695: main (in /home/mu/Lab/a.out)
==30334==
0
==30334== Mismatched free() / delete / delete []
==30334== at 0x4C23E0F: operator delete(void*) (vg_replace_malloc.c:387)
==30334== by 0x4006C0: main (in /home/mu/Lab/a.out)
==30334== Address 0x5936040 is 0 bytes inside a block of size 32 alloc'd
==30334== at 0x4C24A72: operator new[](unsigned long) (vg_replace_malloc.c:305)
==30334== by 0x400695: main (in /home/mu/Lab/a.out)
==30334==
==30334==
==30334== HEAP SUMMARY:
==30334== in use at exit: 0 bytes in 0 blocks
==30334== total heap usage: 1 allocs, 1 frees, 32 bytes allocated
==30334==
==30334== All heap blocks were freed -- no leaks are possible
==30334==
==30334== For counts of detected and suppressed errors, rerun with: -v
==30334== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 4 from 4)
M>Зачем? В случае первого же обращения к памяти по битому указателю сразу же диагностическое сообщение + стек вызовов.
бывают такие проходы по памяти, которые проявляются очень далеко от места внесения и только в релизной сборке.
они редки если руки прямые, но цена их высока, так как время на поиск таких багов прямо пропорционально объему кода и квадрату времени на воспроизведение баги.
Здравствуйте, Mystic, Вы писали:
I>>Или не ругается. Тогда ищешь другой тул, стат.анализатор и тд и тд и фиксишь дальше. M>Вот как раз интересен пример, когда valgrind бы не ругнулся
Valgring не обнаружит неправильную запись в легальный буфер, такое плохо ловится профайлером, но может быть обнаружено например стат. анализатором или всякими проверками на инварианты и валидацией всех объектов.
Здравствуйте, blackhearted, Вы писали:
I>> Проезд по памяти да за 5 минут ? Кто из нас сказочник ?
B>Охохо, null dereference чудестным образом превратился в проезд по памяти. B>Браво, Маэстро!
Вот с чего это начиналось:
I>Баги с указателями отсутствуют как класс. Это высвобождает время девелоперов.
null dereference?
null dereferenct не может быть приравнен к багам с указателями.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Mystic, Вы писали:
I>>>Или не ругается. Тогда ищешь другой тул, стат.анализатор и тд и тд и фиксишь дальше. M>>Вот как раз интересен пример, когда valgrind бы не ругнулся
I>Valgring не обнаружит неправильную запись в легальный буфер, такое плохо ловится профайлером, но может быть обнаружено например стат. анализатором или всякими проверками на инварианты и валидацией всех объектов.
Хм... если мне надо в переменную записать пять, а я запишу шесть, как тут поможет C#, Java? Это уже как-бы баги, которые не связаны с указателями...
Здравствуйте, Mystic, Вы писали:
I>> Проезд по памяти да за 5 минут ? Кто из нас сказочник ?
M>Зачем? В случае первого же обращения к памяти по битому указателю сразу же диагностическое сообщение + стек вызовов.
Указатель может быть абсолютно валидными. Т.е. указывать на легальный буфер который предназначен для записи данных точно такого же типа.
Всего ничего — буфер чуток изменяется и алгоритм(приближенный) выдаёт другую точность. На некоторых наборах алгоритм вообще не укладывается в свои рассчетные пределы. Всех делов.
Здравствуйте, Ikemefula, Вы писали:
I>Указатель может быть абсолютно валидными. Т.е. указывать на легальный буфер который предназначен для записи данных точно такого же типа. I>Всего ничего — буфер чуток изменяется и алгоритм(приближенный) выдаёт другую точность. На некоторых наборах алгоритм вообще не укладывается в свои рассчетные пределы. Всех делов.
Ничего не понял, хотя бы псевдокод... И как с этим справляется Java/C#
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, midl, Вы писали:
M>>>>А когда смотришь на Java или C#, то душа радуется от безбажности?
I>>>Душа радуется что не надо искать и фиксить баги с указателями. M>>А использовать автоматический контроль ссылок и не иметь подобной проблемы религия запрещает?
I>Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ?
А ты представляешь что такое перевод на жаву "проекта где 50-100мб плюсового кода" ?
Здравствуйте, Mystic, Вы писали:
I>>>>Или не ругается. Тогда ищешь другой тул, стат.анализатор и тд и тд и фиксишь дальше. M>>>Вот как раз интересен пример, когда valgrind бы не ругнулся
I>>Valgring не обнаружит неправильную запись в легальный буфер, такое плохо ловится профайлером, но может быть обнаружено например стат. анализатором или всякими проверками на инварианты и валидацией всех объектов. M>Хм... если мне надо в переменную записать пять, а я запишу шесть, как тут поможет C#, Java? Это уже как-бы баги, которые не связаны с указателями...
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Sheridan, Вы писали:
I>>>>>Что он умеет из того, что умеет решарпер или Idea ? S>>>>$0 он умеет например I>>>А что это такое ? S>>Знаки это. I>Он умеет искать аналогичный код в проекте ?
Денежные это знаки, денежные.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, Sheridan, Вы писали:
S>>Здравствуйте, _d_m_, Вы писали:
BBI>>>>>Он давно живёт в своей реальности, как и шеридан.
S>>>>Шеридан живе очень даже в реальной реальности.
___>>>А мы тогда Алисы в зазеркалье.
S>>Ну вы сами признались.
___>О да! А ты Напалеон.
Здравствуйте, Mystic, Вы писали:
I>>Указатель может быть абсолютно валидными. Т.е. указывать на легальный буфер который предназначен для записи данных точно такого же типа. I>>Всего ничего — буфер чуток изменяется и алгоритм(приближенный) выдаёт другую точность. На некоторых наборах алгоритм вообще не укладывается в свои рассчетные пределы. Всех делов.
M>Ничего не понял, хотя бы псевдокод... И как с этим справляется Java/C#
В джаве и с# обычно нельзя получить указатель куда нибудь в середину буфера длиной 100-500мб.
Здравствуйте, midl, Вы писали:
I>>Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ? M>А ты представляешь что такое перевод на жаву "проекта где 50-100мб плюсового кода" ?
Я нигде не предлагаю переводить проекты на джаву или C# или тебе мерещится обратное ?
Здравствуйте, Sheridan, Вы писали:
S>>>>>$0 он умеет например I>>>>А что это такое ? S>>>Знаки это. I>>Он умеет искать аналогичный код в проекте ? S>Денежные это знаки, денежные.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, midl, Вы писали:
I>>>Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ? M>>А ты представляешь что такое перевод на жаву "проекта где 50-100мб плюсового кода" ?
I>Я нигде не предлагаю переводить проекты на джаву или C# или тебе мерещится обратное ?
А я нигде не предлагаю переводить проекты на с++ или тебе мерещится обратное?
Здравствуйте, midl, Вы писали:
M>Здравствуйте, Ikemefula, Вы писали:
I>>Здравствуйте, midl, Вы писали:
I>>>>Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ? M>>>А ты представляешь что такое перевод на жаву "проекта где 50-100мб плюсового кода" ?
I>>Я нигде не предлагаю переводить проекты на джаву или C# или тебе мерещится обратное ? M>А я нигде не предлагаю переводить проекты на с++ или тебе мерещится обратное?
Вот на это:
">А использовать автоматический контроль ссылок и не иметь подобной проблемы религия запрещает?"
Был даден ответ:
"Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ?"
Объясни внятно, как на проекте в 50-100мб плюсового кода заюзать этот автоматический контроль ссылок или хотя бы строки разом пофиксить ?
Как только сделаешь оценку , сразу поймешь что "религия запрещает" это бред сивой кобылы. Ограничения вполне ощутимые и если ты не сталкивался с такими проектами то ты еще зелен.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, midl, Вы писали:
M>>Здравствуйте, Ikemefula, Вы писали:
I>>>Здравствуйте, midl, Вы писали:
I>>>>>Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ? M>>>>А ты представляешь что такое перевод на жаву "проекта где 50-100мб плюсового кода" ?
I>>>Я нигде не предлагаю переводить проекты на джаву или C# или тебе мерещится обратное ? M>>А я нигде не предлагаю переводить проекты на с++ или тебе мерещится обратное?
I>Вот на это: I>">А использовать автоматический контроль ссылок и не иметь подобной проблемы религия запрещает?"
I>Был даден ответ: I>"Есть вагоны старого кода который работает до сих пор, там норма работать со строками например через char*. Ты реально представляешь, что такое перевод на нормальные строки проекта где 50-100мб плюсового кода ?"
I>Объясни внятно, как на проекте в 50-100мб плюсового кода заюзать этот автоматический контроль ссылок или хотя бы строки разом пофиксить ?
Так это ты предлагаешь переводить этот старый проект на нормальные плюсы. Я то тут причем?
I>>Объясни внятно, как на проекте в 50-100мб плюсового кода заюзать этот автоматический контроль ссылок или хотя бы строки разом пофиксить ?
M>Так это ты предлагаешь переводить этот старый проект на нормальные плюсы. Я то тут причем?
Не предлагаю. Это ответ на "использовать автоматический контроль ссылок и не иметь подобной проблемы религия запрещает"