Состоялся (https://sourceforge.net/p/valgrind/mailman/message/35447135/) релиз Valgrind 3.12.0 (http://valgrind.org/), инструментария для отладки работы с памятью, обнаружения утечек памяти и профилирования. Работа Valgrind поддерживается для платформ X86/Linux, AMD64/Linux, ARM32/Linux, ARM64/Linux, PPC32/Linux, PPC64/Linux, S390X/Linux, MIPS32/Linux, MIPS64/Linux, TILEGX/Linux, ARM32/Android, ARM64/Android, X86/Android, X86/Solaris, AMD64/Solaris, X86/MacOSX и AMD64/MacOSX (macOS 10.10/10.11/12).В новой версии (http://valgrind.org/docs/manual/dist.news.html):
- Поддержка набора инструкций ISA 3.0 для процессоров POWER;
- Поддержка O32 FPXX ABI на процессорах MIPS;
- Начальная поддержка инструкций AMD FMA4;
- Поддержка инструкций v8 crypto и CRC на системах arm и arm64;
- Повышение надёжности работы порта для ОС Solaris;
- Начальная поддержка macOS 10.12 (Sierra);- В DRD значительно ускорен запуск потоков на платформах, отличных от Linux;
- Замена функций семейства malloc и new теперь по умолчанию производится не только для системных библиотек, но и для глобально определённых функций из статически и динамически связанных альтернативных реализаций malloc;
- В сервер GDB добавлена поддержка команды 'catch syscall';
- Добавлена возможность загрузки сжатых секций debuginfo в форматах
zlib ELF gABI (gcc -gz=zlib) и zlib GNU (gcc -gz=zlib-gnu);- Накладные расходы от работы JIT снижены на 10-15%.
URL: https://sourceforge.net/p/valgrind/mailman/message/35447135/
Новость: https://www.opennet.ru/opennews/art.shtml?num=45366
Годнота.
коммент для идиотских роликов на ютубе
порекомендуйте хороший рабочий процесс для выявления источника segmentation fault
> порекомендуйте хороший рабочий процесс для выявления источника segmentation fault1. build your app with max debug info ( gcc -g3 )
2. gdb
1. gcc -g без защиты стека.
2. Запускаете через Валгринд процесс с обработкой дочерних процессов и исключением ненужных.
3. В выводе в консоль находите первое некорректное чтение, некорректную запись или обращение к неинициализированным данным и исправляете.
4. Повторяете всё с 1-го пункта, если ошибки были найдены.Если ошибка в строке, где не может быть ошибки, то gcc -O0 -g и проверяете без оптимизации. Зачастую ошибки, возникающие после оптимизации лечатся простым созданием промежуточных переменных вместо передачи вызовов функций или выражений в функции.
В конечном итоге нужно ещё один раз проверить код со всеми используемыми защитами стека и данных и с используемым уровнем оптимизации.
Надеюсь, эта информация кому-нибудь пригодится.
Ах да, чуть не забыл. Ещё нужен процессор с максимально большой частотой, т. к. Валгринд не поддерживает распараллеливание, т. е. все потоки и процессы вашего приложения будут эмулироваться в одном потоке с глобальными блокировками, что также не всегда даёт возможность воспроизводить ситуации гонки.
Спасибо вам, мои анонимные братья. Благодаря вам, я нашёл в своём коде ошибку.
Пожалуйста!
Еще добавлю, что с многопоточным софтом нужно пробовать не только мемчек (дефолтный анализатор, ищет ошибки работы с памятью), но и хелгринд (анализатор для поиска датарейсов).
в 90% случаев помогает:
% gdb .../proga coreи вопрос "where"
Я со временем почти перестал делать ошибки, от которых это помогает. Они довольно простые.
А когда-то создали для отладки самбы...
Официальный сайт троллит:>The Valgrind tools are largely aimed at programs written in C and C++, because programs written in these languages tend to have the most bugs!
Так это, не ошибается тот кто ничего не делает :)
Больше нет живых языков со слабой типизацией и ручным управлением памятью. Так что всё верно написано.
Типизация там не такая уж и слабая, как минимум warning мозг будут клевать прилично, а культурные люди так с -Werror собирают. А если так не собирается - ОПА, возможно ты нашел автора от софта которого стоит держаться подальше. Жаль что для других ЯП это не всегда работает.
Например, компилятор не ругается на использование результата dynamic_cast без проверки на ноль. Что легко превращает типизацию в тыкву.
>приличные люди собирают с -WerrorВсе компиляторы разные. "Приличный человек" собрал свое дерьмо с compilername-vX.Y.Z, а приличным мейнтейнерам потом этот -Werror из всей системы сборки седом выгребать.
>> приличные люди собирают с -Werror
> Все компиляторы разные. "Приличный человек" собрал свое дерьмо с compilername-vX.Y.ZТак то в кавычках.
> а "приличным" мейнтейнерам потом этот -Werror из всей системы сборки седом выгребать.
У приличных (без кавычек) разработчиков его приходится отрывать ровно в одном месте -- проходил при начальном портировании альта на эльбрус.
Посмотрел ваш доклад про бутстрап, очень круто!