вторник, 25 ноября 2008 г.

GZIP-упаковка/распаковка в памяти

Для выполнения операций упаковки/распаковки данных прямо в памяти, можно использовать бесплатную библиотеку zlib (формат получаемых данных совместим с gzip).

воскресенье, 23 ноября 2008 г.

generating debug information with visual c++

Откопал довольно интересную статью - вот здесь.

Несколько устаревшая, конечно, но для приведения знаний в систематезированный вид - очень рекомендую.

Рассматриваются виды отладочной инофрмации (в привязке к версиям), производится сравнение и обсуждается вопрос генерации файлов с базой данных приложения.

пятница, 21 ноября 2008 г.

Использование частей boost в своих проектах

Утащено отсюда.

"Беседуя с разными разработчиками внезапно выяснил, ...
Как выяснилось, многие из этих разработчиков просто не знают про замечательную утилиту bcp"...

четверг, 20 ноября 2008 г.

boost::shared_ptr - особенность удаления объектов

Увидал на блоге Raider'a (кстати, рекомендую).

Ситуация:
class A { ... };
class B : public A { ... };
std::vector BunchOfObjects;
BunchOfObjects.push_back(new B);


Главное - не забыть уничтожить удаляемые из контейнера объекты. И если делать это через оператор delete - еще про виртуальный деструктор у базового класса не забыть бы.

Хотя... другое классическое решение позволяет обойтись и без первого и без второго:

std::vector > BunchOfObjects;
BunchOfObjects.push_back(boost::shared_ptr(new B));


Наличие виртуального деструктора в таком случае не принципиально - shared_ptr запоминает как нужно удалять объект, по умолчанию это будет оператор delete для нужного типа.


BTW, при наличии виртуального деструктора, если уж связались с boost, и shared_ptr'ы используются только в этом контейнере, логичнее использовать
boost::ptr_container.

воскресенье, 16 ноября 2008 г.

суббота, 15 ноября 2008 г.

UserDump

Еще одна полезная утилита, которую я использую при "разборе полетов" - UserDump.
Она позволяет сделать "снимок" подвисшего (или ведущего себя странно) процесса в DMP-файл, который можно уже дальше спокойно разбирать с помощью отладчика в "кулуарной" обстановке.

cmdresc

Очередная крайне полезная утилита для работы с дампами - cmdresc.
Вкратце - это средство для создания исполняемых модулей (.EXE и .DLL) из минидампа по хранящейся в нем информации о модуле. Это не полноценные модули - запускать и загружать их нельзя :-), но их достаточно для того, чтобы отладчики грузили символы с сервера, а именно это нам чаще всего и нужно...

понедельник, 3 ноября 2008 г.

Создание итератора-адаптера

Очень часто в коде С++ (и не обязательно производства "до рождества христова") встречается предоставляют доступа к набору каких-либо объектов в следующем виде:
size_t GetItemCount();
value_type GetItem(size_t i);

Для использования стандартными алгоритмами такое представление неудобно, поскольку требует в лобовом варианте предварительного формирования промежуточного контейнера (sic!).
Решение проблемы достаточно простое (с использованием boost):

суббота, 1 ноября 2008 г.

Как правильно заполнять _NT_SYMBOL_PATH

На самом деле, переменная _NT_SYMBOL_PATH намного более многогранна, чем может показаться, это далеко не просто перечисление каталогов.