Только что объявили о предстоящих новогодних сокращениях в Transas'e :-(
Все в шоке - у меня в секторе убирают двоих, включая ведущего программиста, тестеров вообще урезают чуть ли не вдвое...
This blog dedicated to C++ Software development and system configuration issues. Primary language is Russian.
суббота, 20 декабря 2008 г.
понедельник, 15 декабря 2008 г.
среда, 3 декабря 2008 г.
Каскадное использование связывателей (boost::bind)
Никогда не обращал раньше внимания - начиная с версии boost 1.33, люди перегрузили !, ==, !=, <, <=, > и >=.
понедельник, 1 декабря 2008 г.
Понятные assert'ы
Странное дело, вроде бы этой технике в обед сто лет, а, тем не менее, молодежь (в нашем департаменте) ее не знает...
вторник, 25 ноября 2008 г.
GZIP-упаковка/распаковка в памяти
Для выполнения операций упаковки/распаковки данных прямо в памяти, можно использовать бесплатную библиотеку zlib (формат получаемых данных совместим с gzip).
воскресенье, 23 ноября 2008 г.
generating debug information with visual c++
Откопал довольно интересную статью - вот здесь.
Несколько устаревшая, конечно, но для приведения знаний в систематезированный вид - очень рекомендую.
Рассматриваются виды отладочной инофрмации (в привязке к версиям), производится сравнение и обсуждается вопрос генерации файлов с базой данных приложения.
Несколько устаревшая, конечно, но для приведения знаний в систематезированный вид - очень рекомендую.
Рассматриваются виды отладочной инофрмации (в привязке к версиям), производится сравнение и обсуждается вопрос генерации файлов с базой данных приложения.
пятница, 21 ноября 2008 г.
Использование частей boost в своих проектах
Утащено отсюда.
"Беседуя с разными разработчиками внезапно выяснил, ...
Как выяснилось, многие из этих разработчиков просто не знают про замечательную утилиту bcp"...
"Беседуя с разными разработчиками внезапно выяснил, ...
Как выяснилось, многие из этих разработчиков просто не знают про замечательную утилиту bcp"...
четверг, 20 ноября 2008 г.
boost::shared_ptr - особенность удаления объектов
Увидал на блоге Raider'a (кстати, рекомендую).
Ситуация:
Главное - не забыть уничтожить удаляемые из контейнера объекты. И если делать это через оператор delete - еще про виртуальный деструктор у базового класса не забыть бы.
Хотя... другое классическое решение позволяет обойтись и без первого и без второго:
Наличие виртуального деструктора в таком случае не принципиально - shared_ptr запоминает как нужно удалять объект, по умолчанию это будет оператор delete для нужного типа.
BTW, при наличии виртуального деструктора, если уж связались с boost, и shared_ptr'ы используются только в этом контейнере, логичнее использовать boost::ptr_container.
Ситуация:
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 г.
Auto-sorted vector + Александреску = ?
В который раз убеждаюсь, что читать книжки полезно, причем стреляет это в самые неожиданные моменты...
суббота, 15 ноября 2008 г.
cmdresc
Очередная крайне полезная утилита для работы с дампами - cmdresc.
Вкратце - это средство для создания исполняемых модулей (.EXE и .DLL) из минидампа по хранящейся в нем информации о модуле. Это не полноценные модули - запускать и загружать их нельзя :-), но их достаточно для того, чтобы отладчики грузили символы с сервера, а именно это нам чаще всего и нужно...
Вкратце - это средство для создания исполняемых модулей (.EXE и .DLL) из минидампа по хранящейся в нем информации о модуле. Это не полноценные модули - запускать и загружать их нельзя :-), но их достаточно для того, чтобы отладчики грузили символы с сервера, а именно это нам чаще всего и нужно...
понедельник, 3 ноября 2008 г.
Создание итератора-адаптера
Очень часто в коде С++ (и не обязательно производства "до рождества христова") встречается предоставляют доступа к набору каких-либо объектов в следующем виде:
Для использования стандартными алгоритмами такое представление неудобно, поскольку требует в лобовом варианте предварительного формирования промежуточного контейнера (sic!).
Решение проблемы достаточно простое (с использованием boost):
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, шанс на то, что ваши символы устарели, имеется.
Когда мы ставим символы от операционной системы (возможно даже и символы от SP), мы все равно не гарантированы от проблем - служба Windows Update работает 24/7, и если компьютер имеет выход в Internet, шанс на то, что ваши символы устарели, имеется.
вторник, 28 октября 2008 г.
"Анатомия" стека, или Зачем нужны отладочные символы...
Постулат №1 программиста, занимающегося нетривиальной отладкой: "Чтобы получить правильный стэк потока нужно иметь все отладочные символы для загруженных в процесс модулей".
Целью этого поста является не столько ответ на вопрос "как" (ресурсов на эту тему хватает, в том числе и русскоязычных), сколько ответ на вопрос "почему"...
Целью этого поста является не столько ответ на вопрос "как" (ресурсов на эту тему хватает, в том числе и русскоязычных), сколько ответ на вопрос "почему"...
воскресенье, 26 октября 2008 г.
Установка WinDbg в качестве postmortem debugger
Это первое, что имеет смысл сделать в системе после развертывания тестируемого ПО.
суббота, 25 октября 2008 г.
Отладка с помощью WinDBG
Как это не удивительно, но программы работают с ошибками, а уж C/С++-программы при этом еще часто отличаются особенно зловредными ошибками при работе с памятью.
Все это приходится отлаживать, причем зачастую не на рабочем месте, а в конфигурации клиента и на чужой машине.
При этом поиск ошибок превращается при отсутствии соответствующего инструментария и подготовки в настоящую проблему.
Все это приходится отлаживать, причем зачастую не на рабочем месте, а в конфигурации клиента и на чужой машине.
При этом поиск ошибок превращается при отсутствии соответствующего инструментария и подготовки в настоящую проблему.
понедельник, 20 октября 2008 г.
О блогах...
Странное дело, сколько ни работал, никогда не хотелось иметь собственный блог. А вот теперь что-то поменялось - видимо, захотелось общения.... ;-)
воскресенье, 12 октября 2008 г.
Under construction
Естественно, первое, что приходит в голову (сообразуясь в воспоминаниями детства) - повесить многозначительную табличку "Under Construction", что я с радостью и делаю... ;-)
Подписаться на:
Сообщения (Atom)