Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

воскресенье, 19 ноября 2017 г.

Windbg debugging series, part 3 of n, make_shared vs new

Третья часть, в которой я немного покажу, как восстанавливать информацию об объектах в windbg без приватных символов (только публичные), а также немного поясню почему make_shared лучше чем сырой вызов new, и как вообще это связано с отладкой.

понедельник, 6 ноября 2017 г.

Windbg debugging series, part 2 of n. Stack overflow

Вторая часть, в которой мы обсудим ошибки переполнения стека. В основном, мы будем обсуждать переполнение стека в ядре, т.к. там все более драматично, чем в user-mode. Про user-mode расскажу в конце статьи.

среда, 1 ноября 2017 г.

Windbg debugging series (1 of n)

Лирическое отступление

Давно я ничего не писал в блог, но тут несколько людей так или иначе спрашивали меня про Windbg и про его расширения, поэтому решил попробовать написать серию постов об отладке C/C++ кода в Windows с помощью отладчика Windbg, поделиться своим опытом использования windbg, а также услышать feedback и ваши истории успеха при использовании Windbg

суббота, 7 марта 2015 г.

Пару слов о конференции C++ Russia 27-28 февраля 2015

Вступление

Я посетил конференцию http://meetingcpp.ru/, данная конференция посвящена языку C++ и проводится регулярно в России. Итак, ниже мои впечатления о конференции. Я разделил доклады на несколько основных направлений, хотя на самой конференции такого деления и не проводилось.

суббота, 21 января 2012 г.

Secure Coding

Наша компания купила курс для программистов C, C++: "Secure Coding in C and C++". Для проведения курса был приглашен преподаватель из Carnegie Mellon University. Я попытаюсь сделать краткий обзор лекций, которые нам были прочитаны. Скажу сразу - это мое субъективное мнение.

воскресенье, 25 декабря 2011 г.

И снова про синтаксические особенности C++

В C++ очень сложный и неоднозначный синтаксис (гораздо сложнее, чем в том же C). На эту тему было написано немало статей, книг. Ниже я приведу несколько особенностей, на которые я натолкнулся недавно, причем, на некоторые я наступаю не в первый раз.

понедельник, 21 ноября 2011 г.

Что же такое type erasure?

В данном случае мне кажется, что проще привести пример, который обрисует проблему. Итак, предположим, нам необходим список, содержащий функции со следующей сигнатурой:
typedef int (* nullary_function_returning_int_t)();
_Winnie C++ Colorizer
Окей, скажем мы:
typedef std::list<nullary_function_returning_int_t> func_list_t;
_Winnie C++ Colorizer
Но, что если мы хотим хранить не только функции, но и объекты у которых есть оператор (), возвращающий int. В таком случае, мы могли бы сделать базовый класс:
class nullary_function_base { public:
 virtual ~nullary_function_base(){}

virtual int operator() () = 0; }; typedef std::list<nullary_function_base * > func_list_ptr_t;
_Winnie C++ Colorizer
Но в таком случае мы ограничены только теми объектами, которые являются наследниками класса nullary_function_base. Как быть с функторами, которые получаются, например, в результате использования std::bind1st и пр.? Ведь в этом случае мы уже не можем сделать его наследником nullary_function_base. Или если используется обобщенное программирование и тип функтора просто неизвестен (например, внутри шаблонного класса, функции)?
Вот как раз для решения такой проблемы и используется type erasure.

вторник, 8 ноября 2011 г.

std::auto_ptr vs boost::scoped_ptr vs std::unique_ptr

Что такое smart pointer я думаю известно, на всякий случай о них можно прочитать в Википедии. Существуют различные виды умных указателей, и каждый из них имеет свою область применения, но одно у них общее - они обеспечивают управление (в том или ином виде) сроком жизни сырого (raw) указателя.

В данном примере мы рассмотрим три вида smart pointer. Все они предоставляют практические одинаковые возможности по управлению raw pointer. Также мне бы хотелось разобраться почему в новом стандарте C++11 auto_ptr объявлен устаревшим, что нужно использовать вместо него, и какие возможности есть в компиляторах не поддерживающих новый стандарт.

воскресенье, 6 ноября 2011 г.

Простая библиотека для межпроцессного взаимодействия на базе boost.interprocess

Я давно хотел более подробно разобраться с механизмом IPC, но как-то руки не доходили. Но буквально позавчера я посетил конференцию agilecamp, и после данной конференции у меня возникло желание что нибудь пописать, также хотел попробовать новую штуку - TDD. В общем - одним выстрелом убиваем несколько зайцев.
Для работы нам потребуется:

  • Boost - я использовал версию 1.47.0 (самосборная, на базе gcc-4.4.5)
  • CMake - версия 2.8.2 (из репозитория Debian squeeze)
  • gtest - версия 1.5.0 (из репозитория Debian squeeze)
  • gmoсk - версия 1.4.0 (из репозитория Debian squeeze)
  • QtCreator - версия 2.3.0 (Вручную инсталлированный) - он имеет plugin для поддержки CMake сборки (на самом деле - мой любимый редактор :)).
Итак поехали

воскресенье, 31 октября 2010 г.

Парсер csv

Недавно мне понадобилось парсить файл формата csv. При этом каждый элемент соответствует некоторому полю структуры, например:
Содержимое файла csv:
some string,1,some string 2,100500
hello, 2,good bye,111111

Структура, которую необходимо заполнить:
struct some_struct
{
    std::string name1;
    int count1;
    std::string name2;
    int count2;
};
_Winnie C++ Colorizer
Используем для этих boost:
Нам понадобятся две библиотеки: tokenizer и lexical_cast

воскресенье, 24 октября 2010 г.

Приемы программирования. Part 1

Язык C
Как писать функции, безопасные с точки зрения утечки ресурсов.
Под ресурсами понимаются открытые файлы, сокеты, хэндлы, выделенная память.

Наша функция должна работать с ресурсом (читать из него, писать в него), при этом количество точек выхода из функции велико, если вдобавок мы работаем с несколькими ресурсами (например перекладываем данные из двух файлов в один по некоторому алгоритму), то становится очень сложно следить за всеми ресурсами. Если же мы модифицируем алгоритм (например, добавляем еще один ресурс), то во все точки выхода придется добавлять закрытие этого ресурса, к тому же постоянное повторение одних и тех же фрагментов понижает читабельность кода

четверг, 20 августа 2009 г.

2005 студия и wince 4.2? Легко!

Так как дома у меня линукс, а винда только на работе, поэтому пишу по памяти, не обессудьте)

Последовательность действий такая:

* Устанавливаем SDK для wince 4.2 для evc 4.0

* создаем проект под 2003 smart device

* в параметра компилятора указываем нужную target machine: ну там ARM4 и пр.

* в параметрах линковщика нужно выбрать QARMT4 или как-то так)

потом если че, в дополнительных параметрах