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

Великий и могучий JavaScript, кодогенерация

JavaScript - великий язык. Вот как делается функция для создания текста с отступами:

function CreateStream() {
var strmContent = []; // Whole content

function substream(strTabs) {
function print(args) {
for (var i=0; i
strmContent.push(strTabs + args[i]);
}
}

var res = function() {
print(arguments);
return res;
}
res.tab = function() {
return substream(strTabs+"\t");
}
return res;
}

var res = substream("");

res.saveAsString = function() {
return strmContent.join("\r\n")
}

return res;
}

и использование:

var stream = CreateStream();
stream("function a() {");
stream.tab()("// комментарии тут");
stream("}");

var res = stream. saveAsString();

Оч. удобно для кодогенерации и т.п.

пятница, 17 апреля 2009 г.

Как запустить junit-тесты из командной строки

Постоянно забываю имя класса из junit которое нужно передавать джаве как main class. Дабы больше не забывать: junit.textui.TestRunner (это для junit 3.8, в 4-м ЕМНИП всё по-другому)

вторник, 14 апреля 2009 г.

Задача - поставить breakpoint на функцию для которой нет полного debug info
Типичный пример - ставим breakpoint на LoadLibraryEx
Решение (MSVC):
Делаем new breakpoint на _LoadLibraryExW@12
Теперь, когда мы стоим на breakpoint надо посмотреть параметры.
В случае если это Unicode-строка делаем add watch для вот такого:
*((wchar_t**)esp+1)
+1 - потому что по esp+0 лежит адрес возврата.

Счастливого дебаггинга, мои маленькие любители ковыряться в чужом коде!