12/21/2011
Code @ C++: Find sum of elements in the array
Code @ C++: Find sum of elements in the array: Наткнулся на задачу, которую предлагают в Yandex на собеседовании: Ниже приведены три варианта суммирования чисел с плавающей точкой (предп...
12/13/2011
Emacs column marker
Очень часто стилем кодированием лимитирована максимальная длина строки кода и хорошо когда про это знает IDE.
В Emacs добавил себе column-marker
Теперь, если в в Адском коде длина строки превышает 79 символом, Emacs подсвечивает часть строки красненьким.
P.S. Заодно проверю, есть ли реклама в Фиде. Вроде с горем пополам я ее отключил.
В Emacs добавил себе column-marker
(add-to-list 'load-path (expand-file-name "~/emacs/column-marker")) (require 'column-marker) (add-hook 'ada-mode-hook (lambda () (interactive) (column-marker-3 79)))
Теперь, если в в Адском коде длина строки превышает 79 символом, Emacs подсвечивает часть строки красненьким.
P.S. Заодно проверю, есть ли реклама в Фиде. Вроде с горем пополам я ее отключил.
12/01/2011
Error: Value too large for defined data type
При компиляции сорсов программы в Ubuntu Linux, в директории которподмонтирован по samba, gcc вывалил вот такую ошибку:
Error: Value too large for defined data type
Сначала показалось что ошибка в gcc, однако проблема оказалась в монтировании дирректории по CIFS.
При монтировании нужно добавить несколько опций:
Error: Value too large for defined data type
Сначала показалось что ошибка в gcc, однако проблема оказалась в монтировании дирректории по CIFS.
При монтировании нужно добавить несколько опций:
nounix,noserverino
В чем причина сего явления не очень понятно.Решение проблемы подсмотрено тут.
11/03/2011
Утечки памяти и ошибки доступа.
Ранее я уже писал о том, что можно искать утечки памяти в программе с помощью средств, которые предоставляет glibc. Описанный подход плох тем, что не позволяет искать ошибки доступа к памяти, такие как обращение по нулевому указателю, или обращение к уже освобожденной памяти.
В данном посте речь пойдет о mudflap.
mudflap - это технология проверки указателей, основанная не на бинарной инструментации, как valgrind или dr. Memory, а на инструментации времени компиляции. Если в кратце, во время компиляции программы в исходный код делаются вставки, которые обспечивают различные проверки указателей,к которым осуществляется доступ.
Теперь разберем работу mudflap на конкретном примере.
Для того, чтобы можно было использовать mudflap, нужа поддержка этой технологии в компиляторе и собственно сама библиотека, выполняющая проверки: gcc должен быть скомпилирован с опцией --enable-libmudflap, и в системе должна присутствовать библиотека libmudflap.so.
В качестве примера рассмотрим программу, котороя пытается записать в уже освобожденную память:
Это происходит потому что при попытке записи в освобожденную память (на самом деле она не освобождается, а помечается как неиспользуемая) программа портит служебную информацию glibc, а именно связный список, который используется в glibc для управления памятью.
Чтобы отловить ошибку в программе нужно пересобрать программы с mudflap инструментацией:
В результате работы программа выдает следующее:
Ясно видно где в исходном коде возникает проблема.
Для проверки, запустим программу под valgrind-ом, который выдает следующую информацию:
buggy.c: 22
Резюмирая можно обозначить плюсы и минусы mudflap:
"+" :
1. Более низкий overhead по сравнению с valgrind.
2. Лучшая переносимость: доступен для платформ ARM и MIPS.
3. Из-за того, что инструментация происходи во время выполнения, может находить более сложные ошибки и более точно показывать их в коде.
"-":
1. Поддержка кода, написанного только на C/C++.
2. Привязка к компилятору GCC.
3. Необходимость перекомпиляции.
Таким образом, mudflap вполне удобный тул, который позволяет искать утечки в памяти не используя valgrind, что особенно полезно для встраиваемых систем (ARM и MIPS), где на исполнение кода существенно влияют накладные расходы на инструментацию.
Больше информации о mudflap можно посмотреть тут : http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
В данном посте речь пойдет о mudflap.
mudflap - это технология проверки указателей, основанная не на бинарной инструментации, как valgrind или dr. Memory, а на инструментации времени компиляции. Если в кратце, во время компиляции программы в исходный код делаются вставки, которые обспечивают различные проверки указателей,к которым осуществляется доступ.
Теперь разберем работу mudflap на конкретном примере.
Для того, чтобы можно было использовать mudflap, нужа поддержка этой технологии в компиляторе и собственно сама библиотека, выполняющая проверки: gcc должен быть скомпилирован с опцией --enable-libmudflap, и в системе должна присутствовать библиотека libmudflap.so.
В качестве примера рассмотрим программу, котороя пытается записать в уже освобожденную память:
#include <malloc.h> int main (void) { const int chunk_size = 18; const int count = 10000; int j = 0; void * ptrs [count]; /* выделяем 10 000 кусочков памяти по 18 байт.*/ for (j = 0; j < count; j++) { ptrs [j] = malloc (chunk_size); } /* освобождаем все, кроме первого и последнего */ for (j = 1; j < count - 2; j++) if (ptrs [j]) free (ptrs [j]); /* записываем в освобожденную память*/ *(char*)ptrs [10] = 10; /* просим glibc сделать "дефрагментацию" выделенной памяти */ malloc_trim (1); return 0; }Результатом работы программы будет Segmentation Fault.
Это происходит потому что при попытке записи в освобожденную память (на самом деле она не освобождается, а помечается как неиспользуемая) программа портит служебную информацию glibc, а именно связный список, который используется в glibc для управления памятью.
Чтобы отловить ошибку в программе нужно пересобрать программы с mudflap инструментацией:
gcc -fmudflapth -lmudflap -Wall -Wextra -g -ggdb3 buggy.cЗапускаем:
./a.out
В результате работы программа выдает следующее:
******* mudflap violation 1 (check/write): time=1320343428.778161 ptr=0xe85c10 size=1 pc=0x7fcc8d0dc4f8 location=`buggy.c:22:21 (main)' /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libmudflap.so.0(__mf_check+0x38) [0x7fcc8d0dc4f8] ./a.out(main+0x301) [0x400da5] /lib64/libc.so.6(__libc_start_main+0xec) [0x7fcc8cd63e8c] number of nearby objects: 0
Ясно видно где в исходном коде возникает проблема.
Для проверки, запустим программу под valgrind-ом, который выдает следующую информацию:
==26575== ==26575== Invalid write of size 1 ==26575== at 0x4006E0: main (buggy.c:22) ==26575== Address 0x51bc400 is 0 bytes inside a block of size 18 free'd ==26575== at 0x4C27F6C: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==26575== by 0x4006C8: main (buggy.c:19)valgrind как и mudflap, точно показал место ошибки в программе:
buggy.c: 22
Резюмирая можно обозначить плюсы и минусы mudflap:
"+" :
1. Более низкий overhead по сравнению с valgrind.
2. Лучшая переносимость: доступен для платформ ARM и MIPS.
3. Из-за того, что инструментация происходи во время выполнения, может находить более сложные ошибки и более точно показывать их в коде.
"-":
1. Поддержка кода, написанного только на C/C++.
2. Привязка к компилятору GCC.
3. Необходимость перекомпиляции.
Таким образом, mudflap вполне удобный тул, который позволяет искать утечки в памяти не используя valgrind, что особенно полезно для встраиваемых систем (ARM и MIPS), где на исполнение кода существенно влияют накладные расходы на инструментацию.
Больше информации о mudflap можно посмотреть тут : http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
10/17/2011
Экранирование в bash, кто знает?
Есть такой скриптик в bash:
b ()
b
в функции a () echo вызывается как:
echo '--some-flag='\''param1' 'param2,param3'\'''
как сделать чтобы параметры которые передаются в a () не экранировались?
т.е. чтобы echo вызывался вот так:
echo --some-flag='param1 param2,param3'
т.е. чтобы параметры передавались как есть ?
#!/bin/bash
set -x
a ()
set -x
a ()
{
echo $1
}
b ()
{
a "--some-flag='param1 param2,param3'"
}b
в функции a () echo вызывается как:
echo '--some-flag='\''param1' 'param2,param3'\'''
как сделать чтобы параметры которые передаются в a () не экранировались?
т.е. чтобы echo вызывался вот так:
echo --some-flag='param1 param2,param3'
т.е. чтобы параметры передавались как есть ?
10/15/2011
Установил себе grub2 в Gentoo
Надоело мне пользоваться LILO, захотелось чего то нового.
Решил поставить себе GRUB2.
1. Размаскируем пакет:
2. Собираем
3.Настраиваем
4. Проверяем, что конфигурация работает.
5. Устанавливаем
6. Перезагружаемся
Решил поставить себе GRUB2.
1. Размаскируем пакет:
echo ">=sys-boot/grub-1.99-r2" >> /etc/portage/package.unmask
2. Собираем
emerge grub
3.Настраиваем
grub2-mkconfig -o /boot/grub2/grub.cfg
4. Проверяем, что конфигурация работает.
grub2-install --grub-setup=/bin/true /dev/sda
5. Устанавливаем
grub2-install /dev/sda
6. Перезагружаемся
reboot.
10/05/2011
kernel.org вернулся
kernel.org снова в строю.
Ждем результатов расследования взлома.
P.S. на lwn.net дали ссылку на https://www.kernel.org,
причем если с https://www.kernel.org все в порядке,
то https://kernel.org ругается на неправильный сертификат.
Ждем результатов расследования взлома.
P.S. на lwn.net дали ссылку на https://www.kernel.org,
причем если с https://www.kernel.org все в порядке,
то https://kernel.org ругается на неправильный сертификат.
10/01/2011
Berlios.de - всё
Кризис наступает и в IT индустрии.
Сегодня получил письмо о том, что хостинг открытых проектов www.berlios.de который верой и правдой служил разработчикам 10 лет - будет закрыт 01.01.2012.
Причиной закрытия является нехватка средств у немецкого исследовательского института Fraunhofer FOKU, в связи с урезанием финансирования непрофильных проектов.
Ссылка на официальную новость: BerliOS will be closed on 31.12.2011
Сегодня получил письмо о том, что хостинг открытых проектов www.berlios.de который верой и правдой служил разработчикам 10 лет - будет закрыт 01.01.2012.
Причиной закрытия является нехватка средств у немецкого исследовательского института Fraunhofer FOKU, в связи с урезанием финансирования непрофильных проектов.
Ссылка на официальную новость: BerliOS will be closed on 31.12.2011
6/28/2011
запуск приложения, читающего стандартный ввод в GDB
Предположим у нас есть приложение, которое что-то читает со стандартного ввода
и одновременно принимает ключи в командной строке.
Q : Как запустить это приложение под GDB?
A :
gdb application
gdb> run parameters ... < input_file
6/18/2011
Gentoo, Firefox и NS plugin wrapper.
Не забудьте после очередного обновления nspluginwrapper в Gentoo до версии 1.4.2 выполнить команду:
nspluginwrapper -i /opt/Adobe/flash-player32/plugin/libflashplayer.so
Иначе, у вас перестанет работать flash плагин.
nspluginwrapper -i /opt/Adobe/flash-player32/plugin/libflashplayer.so
Иначе, у вас перестанет работать flash плагин.
6/14/2011
Вышел GNAT GPL 2011 с новыми вкусностями.
We are pleased to announce the release of GNAT GPL 2011, the integrated Ada, C, and C++ toolset for Academic users and FLOSS developers. This new edition provides many new features and enhancements in all areas of the technology. The most notable ones are: - improved support for Ada 2012 - enhanced versions of tools - GPS 5.0 enhanced IDE (improved support for C/C++, more powerful source editing, better usability, ….), - GtkAda (new widgets, interface to the Cairo graphics library) - more flexible and more efficient project manager tool - support for unloading Ada plug-ins - improved support for Ada constructs on the .NET platform - more detailed exception messages (-gnateE switch) - complete support for Lego MINDSTORMS hardware, including audio and I2C sensors GNAT GPL 2011 comes with version 5.0.1 of the GNAT Programming Studio IDE and GNATbench 2.5.1, the GNAT plug-in for Eclipse. GNAT GPL 2011 can be downloaded from the "Download" section on https://libre.adacore.com.
4/01/2011
Valgrind и glibc в Gentoo.
Для корректной работы валгринда требуется, чтобы glibc была собрана с отладочной информацией, дабы он смог из нее вытащить нужные функции.
В Gentoo glibc умолчанию собирается без нее.
Чтобы эту проблему исправить, необходимо чтобы для glibc генерировалась отладочная информация.
Для этого, добавляем в файл /etc/portage/env/sys-libs/glibc
строчку: FEATURES="splitdebug"
И пересобираем libc.
После этого, в каталоге /usr/lib/ появится каталог debug, в котором будет лежать файлы типа lib*.debug, содержащиеся требуемую информацию.
В Gentoo glibc умолчанию собирается без нее.
Чтобы эту проблему исправить, необходимо чтобы для glibc генерировалась отладочная информация.
Для этого, добавляем в файл /etc/portage/env/sys-libs/glibc
строчку: FEATURES="splitdebug"
И пересобираем libc.
После этого, в каталоге /usr/lib/ появится каталог debug, в котором будет лежать файлы типа lib*.debug, содержащиеся требуемую информацию.
3/16/2011
Купить pandaboard в России
Подскажите, как заполучить pandaboard в России?
Официально в Россию это борда не доставляется.
Может у кого нибудь есть опыт покупки подобных железяк из России?
Официально в Россию это борда не доставляется.
Может у кого нибудь есть опыт покупки подобных железяк из России?
3/09/2011
Анонс AXMPP 0.0.1
Всем привет.
Хочу анонсировать первый релиз библиотеки AXMPP.
AXMPP - это реализация протокола XMPP для языка программирования Ада.
Это первый релиз библиотеки, которые включает в себя следующие возможности:
1. Поддержка безопасного соединения с помощью agnutsl (ada-binding для gnutls).
2. Реализация базовой части протокола XMPP:
* Управление списком контактов (ростер).
* Прием/отправка сообщений.
* Поддержка конференций.
* Поддержка информации о присутствии
* Возможности управления ресурсами.
* Возможность обработки/генерации IQ в сыром виде.
3. Поддержка расширения для получения информации о клиенте.
Ознакомиться с библиотекой, а также скачать исходники можно на сайте:
http://adaforge.qtada.com/cgi-bin/tracker.fcgi/axmpp
AXMPP распространяется под BSD подобной лицезией.
Хочу анонсировать первый релиз библиотеки AXMPP.
AXMPP - это реализация протокола XMPP для языка программирования Ада.
Это первый релиз библиотеки, которые включает в себя следующие возможности:
1. Поддержка безопасного соединения с помощью agnutsl (ada-binding для gnutls).
2. Реализация базовой части протокола XMPP:
* Управление списком контактов (ростер).
* Прием/отправка сообщений.
* Поддержка конференций.
* Поддержка информации о присутствии
* Возможности управления ресурсами.
* Возможность обработки/генерации IQ в сыром виде.
3. Поддержка расширения для получения информации о клиенте.
Ознакомиться с библиотекой, а также скачать исходники можно на сайте:
http://adaforge.qtada.com/cgi-bin/tracker.fcgi/axmpp
AXMPP распространяется под BSD подобной лицезией.
2/21/2011
KDE4 и кривой ~/.Xmodmap
После очередного обновления KDE 4 в Gentoo Linux, у меня на клавиатуре перестали работать клавиши 'Arrow Down' и 'End'.
Я долго пытался понять в чем проблема, но у меня так и не получилось, и в качестве временного решения я добавил в стартовый скрипт, который запускался вместе с KDE команду для настройки xkb, который решал эту проблему:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Но на деле все оказалось совсем просто.
Оказывается, когда то давно, еще со времен третьих кед, я создал файлик .Xmodmap в домашней дирректории. Он был нужен, для того, чтобы в emacs работали хитрые комбинации клавиш. И видимо с из-за того, что с тех пор многое изменилось и в X сервере и в KDE, этот файл начал негативно влиять на работу клавиатуры в KDE4. Его удаление решило проблему.
Я долго пытался понять в чем проблема, но у меня так и не получилось, и в качестве временного решения я добавил в стартовый скрипт, который запускался вместе с KDE команду для настройки xkb, который решал эту проблему:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Но на деле все оказалось совсем просто.
Оказывается, когда то давно, еще со времен третьих кед, я создал файлик .Xmodmap в домашней дирректории. Он был нужен, для того, чтобы в emacs работали хитрые комбинации клавиш. И видимо с из-за того, что с тех пор многое изменилось и в X сервере и в KDE, этот файл начал негативно влиять на работу клавиатуры в KDE4. Его удаление решило проблему.
Подписаться на:
Сообщения (Atom)