суббота, 20 декабря 2008 г.

Кажется, и до нас добралось...

Только что объявили о предстоящих новогодних сокращениях в Transas'e :-(
Все в шоке - у меня в секторе убирают двоих, включая ведущего программиста, тестеров вообще урезают чуть ли не вдвое...

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

Понятные assert'ы

Странное дело, вроде бы этой технике в обед сто лет, а, тем не менее, молодежь (в нашем департаменте) ее не знает...

вторник, 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 намного более многогранна, чем может показаться, это далеко не просто перечисление каталогов.

четверг, 30 октября 2008 г.

Не забывайте подключать символы

Качество развертки стека вызовов со стороны Dr. Watson и WinDbg можно фантастически улучшить, не забывая указывать им, где взять отладочные символы.

Symchk

Эта замечательная утилита входит в состав Debugging Tools for Windows.
Когда мы ставим символы от операционной системы (возможно даже и символы от SP), мы все равно не гарантированы от проблем - служба Windows Update работает 24/7, и если компьютер имеет выход в Internet, шанс на то, что ваши символы устарели, имеется.

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

"Анатомия" стека, или Зачем нужны отладочные символы...

Постулат №1 программиста, занимающегося нетривиальной отладкой: "Чтобы получить правильный стэк потока нужно иметь все отладочные символы для загруженных в процесс модулей".
Целью этого поста является не столько ответ на вопрос "как" (ресурсов на эту тему хватает, в том числе и русскоязычных), сколько ответ на вопрос "почему"...

суббота, 25 октября 2008 г.

Отладка с помощью WinDBG

Как это не удивительно, но программы работают с ошибками, а уж C/С++-программы при этом еще часто отличаются особенно зловредными ошибками при работе с памятью.
Все это приходится отлаживать, причем зачастую не на рабочем месте, а в конфигурации клиента и на чужой машине.
При этом поиск ошибок превращается при отсутствии соответствующего инструментария и подготовки в настоящую проблему.

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

О блогах...

Странное дело, сколько ни работал, никогда не хотелось иметь собственный блог. А вот теперь что-то поменялось - видимо, захотелось общения.... ;-)

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

Under construction

Естественно, первое, что приходит в голову (сообразуясь в воспоминаниями детства) - повесить многозначительную табличку "Under Construction", что я с радостью и делаю... ;-)