Третья часть, в которой я немного покажу, как восстанавливать информацию об объектах в windbg без приватных символов (только публичные), а также немного поясню почему make_shared лучше чем сырой вызов new, и как вообще это связано с отладкой.
Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения
воскресенье, 19 ноября 2017 г.
понедельник, 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
Ярлыки:
программирование,
assembler,
debugging,
windbg,
Windows
суббота, 7 марта 2015 г.
Пару слов о конференции C++ Russia 27-28 февраля 2015
Вступление
Я посетил конференцию http://meetingcpp.ru/, данная конференция посвящена языку C++ и проводится регулярно в России. Итак, ниже мои впечатления о конференции. Я разделил доклады на несколько основных направлений, хотя на самой конференции такого деления и не проводилось.
Ярлыки:
метапрограммирование,
программирование,
boost,
c++,
cpprussia
суббота, 21 января 2012 г.
Secure Coding
Наша компания купила курс для программистов C, C++: "Secure Coding in C and C++". Для проведения курса был приглашен преподаватель из Carnegie Mellon University. Я попытаюсь сделать краткий обзор лекций, которые нам были прочитаны. Скажу сразу - это мое субъективное мнение.
воскресенье, 25 декабря 2011 г.
И снова про синтаксические особенности C++
В C++ очень сложный и неоднозначный синтаксис (гораздо сложнее, чем в том же C). На эту тему было написано немало статей, книг. Ниже я приведу несколько особенностей, на которые я натолкнулся недавно, причем, на некоторые я наступаю не в первый раз.
понедельник, 21 ноября 2011 г.
Что же такое type erasure?
В данном случае мне кажется, что проще привести пример, который обрисует проблему. Итак, предположим, нам необходим список, содержащий функции со следующей сигнатурой:
Окей, скажем мы:
Но, что если мы хотим хранить не только функции, но и объекты у которых есть оператор (), возвращающий int. В таком случае, мы могли бы сделать базовый класс:
Но в таком случае мы ограничены только теми объектами, которые являются наследниками класса nullary_function_base. Как быть с функторами, которые получаются, например, в результате использования std::bind1st и пр.? Ведь в этом случае мы уже не можем сделать его наследником nullary_function_base. Или если используется обобщенное программирование и тип функтора просто неизвестен (например, внутри шаблонного класса, функции)?
Вот как раз для решения такой проблемы и используется 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 |
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 |
Вот как раз для решения такой проблемы и используется type erasure.
Ярлыки:
программирование,
рефакторинг,
boost,
boost::bind,
boost::function,
c++,
googlemock,
googletest,
shared_ptr,
TDD,
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 объявлен устаревшим, что нужно использовать вместо него, и какие возможности есть в компиляторах не поддерживающих новый стандарт.
В данном примере мы рассмотрим три вида smart pointer. Все они предоставляют практические одинаковые возможности по управлению raw pointer. Также мне бы хотелось разобраться почему в новом стандарте C++11 auto_ptr объявлен устаревшим, что нужно использовать вместо него, и какие возможности есть в компиляторах не поддерживающих новый стандарт.
Ярлыки:
программирование,
с++,
auto_ptr,
boost,
QScopedPointer,
RAII,
scoped_ptr,
smart_ptr,
unique_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 сборки (на самом деле - мой любимый редактор :)).
Итак поехали
Ярлыки:
программирование,
boost,
c++,
cmake,
googlemock,
googletest,
TDD
воскресенье, 31 октября 2010 г.
Парсер csv
Недавно мне понадобилось парсить файл формата csv. При этом каждый элемент соответствует некоторому полю структуры, например:
Содержимое файла csv:
some string,1,some string 2,100500
hello, 2,good bye,111111
Структура, которую необходимо заполнить:
Используем для этих boost:
Нам понадобятся две библиотеки: tokenizer и lexical_cast
Содержимое файла 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 |
Нам понадобятся две библиотеки: 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 или как-то так)
потом если че, в дополнительных параметрах
Подписаться на:
Сообщения (Atom)