понедельник, 2 ноября 2009 г.

Чудеса DllMain

Давно известно, что определенные практики разработки (типа использования глобальных объектов/загрузки DLL при своей загрузке и т.д.) способствуют возникновению проблем на этапе инициализации/деинициализации, но тут наткнулся на статью.

четверг, 1 октября 2009 г.

Google С++ style guide

Бродя в сети, обнаружил перевод этого эпохального документа на русский язык.
Впрочем, лично я бы предпочел все же изучать оригинал, благо там все более чем понятно, хотя с очень многоми вещами там можно поспорить.

пятница, 11 сентября 2009 г.

Windows Installer: Изменение одного или нескольких файлов в инсталляции

Сколько ни видел разных программ - к большинству из них почему-то "таблетки от жадности" прилагаются отдельно, зачастую вместе с нетривиальными инструкциями по применению. Между тем, сделать repack не просто, а очень просто...

вторник, 25 августа 2009 г.

Помощь в выяснении природы DLL

На сайте Microsoft есть очень полезная страничка, которая иногда оказывается полезной - DLL Help Database on microsoft.com

Там можно посмотреть для известных DLL всякую разную полезную информацию типа продукта, в котором она появилась, актуальной версии, списках импорта/экспорта, и так далее...

Можно сразу вызвать поиск запросом (язык en_US):
http://support.microsoft.com/dllhelp/?dlltype=file&l=55&S=1&alpha=


Upd: сервис, оказывается, в феврале 2010 приказал долго жить, а жаль...

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

Нетривиальные конструкторы

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

суббота, 18 июля 2009 г.

Карта языка Си++

Нарыл совершенно волшебную работу - исполненная "под старину" карта языка Си++:



Оригинал вот здесь, там же ссылки на изображение в хорошем качестве.

В общем, люди крепко напрягли фантазию и очень хорошо потрудились...

У меня теперь такая над рабочим столом в офисе висит :-)

Вот только программирую я в виду специфики моей нынешней деятельности все меньше и меньше... :-(

четверг, 25 июня 2009 г.

"Локальные" баги, STL-way

На днях поступил очередной bug-report из серии "при установке на мою систему неправильно отображается экран XXXX"....

Первый вопрос, который в таких ситуациях теперь возникает - на какую версию Windows была поставлена система (в данном случае ответом была - русскую).

суббота, 20 июня 2009 г.

Триграфы

Недавно отлаживал один алгоритм, делал это "вживую", в частности, используя контрольную печать ;-)
В какой-момент сработал ::OutputDebugStringA("WTF??!"), вот только в отладочный поток вывелось неожидаемое "WTF|"...

пятница, 15 мая 2009 г.

Точки следования

Недавно опять перечитывал "Новые сложные задачи на C++", сокрушаясь о своем уровне знания основного средства заработка...
Наткнувшись на пример с i+++++i, вспомнил про давнишнюю задачу, которую давали на одном из собеседований (слава Богу - не мне, поскольку предмет дискуссии очень гнилой, и услышать хотят явно не про UB).
int i = 10;
i = i + i++;

Типа, нужно порассуждать, чему равно i в результате...

воскресенье, 3 мая 2009 г.

"Магические" числа в отладке проблем с памятью

Когда в процессе отладки появляется сообщение "Unhandled exception at 0x00416d9f in sailor.exe: 0xC0000005: Access violation reading location 0xfeeefeee." разработчики, бывают, начинают нервничать.
Между тем, шестнадцатеричные коды, как минимум, в Debug-версии приложения, собранном MSVC, уже могут кое о чем рассказать...

суббота, 25 апреля 2009 г.

Как работают исключения С++ MSVC 2003/2008

Вот ссылочка на достаточно понятный пост про обработку исключений C++:
How a C++ compiler implements exception handling

Upd: Вот еще парочка очень неплохих вводных статей:
О компиляции /EHsc (часть 1)
О компиляции /EHsc (часть 2)


Upd2: По внутренностям SEH-исключений есть хорошая статья Matt'a Pietrek'a, правда старенькая (1997), с тех пор особо ничего для прикладного программиста не изменилось.

четверг, 16 апреля 2009 г.

Использование псевдорегистров MSVC при отладке приложений

Недавно застал человека за очень творческой работой, он методично унавоживал исходный код строками вида
DWORD nCode = ::GetLastError();
char buf[256];
sprintf("LastError=%lu", nCode);
::OutputDebugStringA(buf);

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

понедельник, 16 марта 2009 г.

cygwin+windows!=unix

Забавно, что перед релизом всегда всплывают какие-то фундаментальные проблемы, видимо, это закон природы...

Сейчас случилось "страшное" - используемая при сборке Navi-Sailor система сборки дошла до своего технологического предела...

воскресенье, 15 марта 2009 г.

"Волшебный" CAB для WinDBG

Частенько оказывается, что дамп памяти, приносимый со стенда на анализ (если не удалось посмотреть проблему "вживую" нуждается в достаточно объемной пост-обработке, чтобы продолжить исследование :-(

Как оказалось, жизнь себе можно существенно облегчить...

вторник, 3 марта 2009 г.

ZLib + iostreams - простое разжатие файлов

На этот раз с использованием Boost:

#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

int main()
{
using namespace std;
ifstream file("hello.z", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(zlib_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);
}

воскресенье, 1 марта 2009 г.

Релиз-релиз

Скажу честно, было не до блогов - нервно как-то, но,
так или иначе, для бОльшей части народа все обошлось, потери людей, по крайней мере по нашему департаменту - 25% :-(
Зато организационная структура, похоже, меняется радикально...
Например, директор департамента попал в эти проценты :-/

Тем не менее - планов на релиз никто не отменял, начинается "доводка", какими силами, правда, пока не совсем понятно...

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

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

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