четверг, 25 сентября 2008 г.

Как раскрыть multi_index iterator

При отладке бывает полезно посмотреть на объект, который скрывается за итератором контейнера multi_index библиотеки boost. В ответе ниже предполагается тип объекта CSource, а экземпляр итератора называется src_iterator:
(CSource*)((((*(boost::multi_index::detail::pod_value_holder<CSource>*)
(&(*(boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> >*)
(&(*(boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> > >*)
(&*((src_iterator).node)))))))).space).data_).buf
Эту строку можно вставлять, например, в окно Watch отладчика Visual Studio.

UPD: Одной строкой (для копирования):
(CSource*)((((*(boost::multi_index::detail::pod_value_holder<CSource>*)(&(*(boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> >*)(&(*(boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<CSource,std::allocator<CSource> > >*)(&*((src_iterator).node)))))))).space).data_).buf

среда, 17 сентября 2008 г.

MS SQL type XML

С версии SQL Server 2005 тип данных XML стал поддерживаться как отдельный тип и нет необходимости хранить в БД данные этого типа как поле BLOB или nvarchar. Однако, применяя xerces для генерации XML, столкнулся с некоторым ограничением поддержки этого типа. Похоже, что SQL Server не умеет работать с кодировкой UTF-8, поэтому приходится применять UTF-16. В xerces это делается функций setEncoding и при чтении и при записи XML.

вторник, 2 сентября 2008 г.

Debugging symbols in Visual Studio

Думаю, многие знают, что на сайте Microsoft можно скачать отладочную информацию для всех системных компонентов Windows. Они там есть для всех версий Windows и даже для сервис паков. Однако, ОС может быть обновлена в процессе разработки или у клиента. Тогда набор библиотек, вероятнее всего, отличается от фиксированных версий ОС и разбор дампов может быть затруднен. В таком случае, помогает очень удобная функция автоматической загрузки библиотек и отладочной информации к ним непосредственно с сайта Microsoft. Для этого достаточно в студии прописать путь как показано на рисунке ниже.



UPD: на рисунке написано http://msdl.microsoft.com/download/symbols
UPD2: в WinDbg нужно писать SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols