Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Вниз

А как вы тестируете свои шедевры?   Найти похожие ветки 

 
Галинка ©   (2008-01-23 13:05) [0]

собсно сабж. В основном интересует ситуация, если ошибка/баг вылазит не все время (т.е. при трассировке то вылазит, то нет).


 
Riply ©   (2008-01-23 13:08) [1]

>  [0] Галинка ©   (23.01.08 13:05)
Меня очень "логи" выручают.
Прописываю их во всех подозрительных местах. :)


 
Palladin ©   (2008-01-23 13:08) [2]

подробнейший лог
честно сказать, я F7/F8 никогда и не пользуюсь


 
ZoldBerger   (2008-01-23 13:23) [3]

procedure TfrmMain.MyExceptionHandler(Sender : TObject; E : Exception );
var
QuerySQL : string;
nrID     : string;
FileName : string;
CS       : string;
N        : TNotifyEvent;
ErrorS   : TStringList;
PropInfo : PPropInfo;
jpgImg: TJPEGImage;
begin
..
ErrorS := TSTringList.Create;
screen.cursor := crDefault;
cs := "ABCDEF0123456789";
fileName := IncludeTrailingBackslash(GetCurrentDir)+"LOGS\ERROR-"+DateToStr(date)+"-"+IntToStr(Random(99999))+cs[Random(16)]+".bmp";
with frmError do
begin
 VMSG.Lines.Clear;
 VMSG.Lines.Add(E.Message);
// VMSG.Lines.Add(GetClassHelp(e.ClassName));
 UpdateType.caption := e.ClassName;
 ErrorMsg.Lines.Clear;
 ErrorMsg.Lines.Add(E.Message);
 ErrorMsg.Lines.Add(E.ClassName);
 GetBaseClassInfo(Sender,ErrorMsg.Lines);
 ErrorMsg.Lines.Add("");
 ErrorMsg.Lines.Add("");
 ScreenShot(IMage1.Picture.Bitmap);
// jpgImg:= TJPEGImage.Create;
// jpgImg.Assign(IMage1.Picture.Bitmap);
//  jpgImg.SaveToFile(fileName);
Image1.Picture.SaveToFIle(FileName);
 with ErrorMsg.Lines do
 begin
   add("Родитель класса: " + e.ClassParent.ClassName);
   add("=== Базовые методы ===");
   GetBaseMethodInfo(PTypeInfo(e.classtype), ErrorMsg.lines);
   add("=== Дифференциальные методы ===");
   GetMethodDefinition(PTypeInfo(e.classtype),
   ErrorMsg.lines);
   add("=== Родительские свойства ===");
   add("Родитель: " + sender.Classname);
   add("Имя: " +(sender as TComponent).Name);
 end; //sender.
   // ShowModal;
 with frmMain.ADOQuerySp do
 begin
   close;
   sql.Clear;
   QuerySQL := "DECLARE @nResult INT, @nId INT " +
               "EXECUTE @nResult = DBO.up_InsertReleaseError @nId OUTPUT,"+
               (runl)+","+
               QuotedStr(ErrorMsg.Lines.text)+","+QuotedStr(E.ClassName)+
               " SELECT @nResult RESULT, @nID ID";

   sql.Add(QuerySQL);
   open;
   nrID := FieldByName("ID").AsString;
 end;
 screen.cursor := crHourGlass;
 if nrID = "" then begin
   screen.Cursor := crDefault;
 end else
 begin
   ADOQuerySp.sql.text:="UPDATE ut_LogReleaseError SET MSG_PICT=:b WHERE ID="+nrID;
   ADOQuerySp.parameters.parseSQL(ADOQuerySp.sql.text, true);
   ADOQuerySp.parameters.parambyname("b").LoadFromFile( fileName,ftBlob);
   ADOQuerySp.execsql;
   screen.Cursor := crDefault;
   if not ReadBoolean("CONFIG","SaveLOGS") then deletefile(fileName);
end;
end;
errors.free;
if not ReadBoolean("CONFIG","SaveLOGS") then deletefile(fileName);
   frmWarning.ShowMess("Запомните номер","В программе произошла ошибка, свяжитесь с разработчиком и назовите номер ошибки:  "#"+nrID+""");


 
SerJaNT ©   (2008-01-23 13:25) [4]


> ZoldBerger   (23.01.08 13:23) [3]

шо это было?


 
ZoldBerger   (2008-01-23 13:27) [5]


> SerJaNT ©   (23.01.08 13:25) [4]


во многих приложениях, которые работают  с БД, использую слежку за ошибками


 
Palladin ©   (2008-01-23 13:28) [6]

это бред


 
Галинка ©   (2008-01-23 13:31) [7]

логи это мысль. Спасибо за наводку.


 
Slym ©   (2008-01-23 13:31) [8]

Нужно тестировать не проект вцелом, а "кубики" из которых проект сделан...
В папке с проектом имеем папку TEST с набором тестовых приложений для тестирования "кубиков"


 
Ega23 ©   (2008-01-23 14:01) [9]


> ZoldBerger   (23.01.08 13:23) [3]


Какой ужас....
ещё и со скрин-шотом....


 
OSokin   (2008-01-23 14:04) [10]

Я обычно проверяю, вызывает строка кода ошибку или нет, вызовом MessageBox(0,0,0,0) до и после нее (исключения, конечно, хорошо, но в программах на WinAPI они не работают :/ ). А логи в неконсольных приложениях делаю так:
AssignFile(Output, "Log.Log");
Rewrite(Output);
...
WriteLn("Logged string");


 
ZoldBerger   (2008-01-23 14:05) [11]


> Ega23 ©   (23.01.08 14:01) [9]


ты предложи ...


 
Семеныч   (2008-01-23 14:07) [12]

> OSokin   (23.01.08 14:04) [10]

> исключения, конечно, хорошо, но в программах на WinAPI они не работают

Посмотрите Win32Check.


 
Lamer@fools.ua ©   (2008-01-23 14:08) [13]

>>OSokin   (23.01.08 14:04) [10]

RaiseLastOSError не спасёт отца русской демократии?


 
DiamondShark ©   (2008-01-23 14:13) [14]


> исключения, конечно, хорошо, но в программах на WinAPI они
> не работают

uses SysUtils;


 
Ega23 ©   (2008-01-23 14:15) [15]


> ты предложи ...


Что предложить?

procedure TMyClass.TMyMethod
begin
 try

 except on E : Exception do
   LogError("TMyClass.TMyMethod : " + E.Message);
   // если надо - raise Exception.Create("TMyClass.TMyMethod : " + E.Message);
 end;
end;


Ну и то же самое на уровне Application.OnException.


 
Mystic ©   (2008-01-23 14:18) [16]

Иногда помогает медитация на исходники.


 
ZoldBerger   (2008-01-23 14:20) [17]

Правильно обрати внимание на название процедуры MyExceptionHandler

Вот посмотри, какую информацию, я кидаю в SQL

ErrorMSG: Необходимо объявить скалярную переменную "@nIdDir_A"
ErrorCLASS: EOleException
Тип: tkClass
Размер: 1328
Модуль: uObjClaimPrep
Номер свойства: 104
Параметр: jClaimPrep

Родитель класса: EOleSysError
=== Базовые методы ===
Имя класса:    
Тип:           tkRecord
Номер параметра: 0
=== Дифференциальные методы ===
procedure ;
=== Родительские свойства ===
Родитель: TfrmObjClaimPrep
Имя: frmObjClaimPrep


Что твой лог пишет? и думаешь хранение скриншота глупо?


 
Palladin ©   (2008-01-23 14:23) [18]

бред


 
OSokin   (2008-01-23 14:25) [19]


> DiamondShark ©   (23.01.08 14:13) [14]


> Lamer@fools.ua ©   (23.01.08 14:08) [13]


> Семеныч   (23.01.08 14:07) [12]

Да знаю я. Я имел в виду обработку исключений по OnException. А делать подобное просто лень =)


 
No_Dead ©   (2008-01-23 14:25) [20]

> думаешь хранение скриншота глупо?

имхо, я бы еще видео— и аудио— записи сделал.
наверняка, это раз.
на память, это два.
место ж надо куда-то девать на винте, это три.
100% доказетльство начальству что я работаю, это четыре.
%>


 
OSokin   (2008-01-23 14:28) [21]

А в самом обработчике исключений в [3] исключение может возникнуть в нескольких местах ;)

> ErrorS := TSTringList.Create;


> Image1.Picture.SaveToFIle(FileName);


> ADOQuerySp.execsql;

И это на первый взгляд ;)


 
Dennis I. Komarov ©   (2008-01-23 14:31) [22]

Вот почему исходники так много весят...


 
Игорь Шевченко ©   (2008-01-23 14:37) [23]

1. пишем юнит-тесты.
2. при возникших исключениях отправляется письмо разработчику с детальной информацией об исключении и несколькими последними действиями пользователя.


 
Галинка ©   (2008-01-23 14:43) [24]

Про исключения. Тестится программа не на такие ошибки. А на ошибки логики сорее. Или на просчеты. По ним исключения не выдаются, но программа работает не так как хотелось бы. Вот и хочется посмотреть, что же мы там имеем.


 
Palladin ©   (2008-01-23 14:46) [25]


> [24] Галинка ©   (23.01.08 14:43)

А это и есть самый распространенный тип ошибки. Люди тут на исключения съехали, а ловить то не их нужно (они сами поймаются), а логику исполнения приведшую к ним.


 
OSokin   (2008-01-23 14:50) [26]


> Галинка ©   (23.01.08 14:43) [24]

Все равно логами и MessageBox"ами проблему решаю. Просто вывожу на экран или в лог значения необходимых переменных и проверяю. Хотя проще всего использовать консольное окно для этого.


 
Kolan ©   (2008-01-23 14:53) [27]

> 2. при возникших исключениях отправляется письмо разработчику
> с детальной информацией об исключении и несколькими последними
> действиями пользователя.

Можно пример простой? Как выглядит процедцра с исключением, без посылки писем ессно :)


 
Игорь Шевченко ©   (2008-01-23 15:36) [28]

Kolan ©   (23.01.08 14:53) [27]


> Можно пример простой? Как выглядит процедцра с исключением,
>  без посылки писем ессно :)


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

Процедура обработки исключений выглядит как обработчик события Application.OnException


 
Sandman25   (2008-01-23 15:44) [29]

1. Unit test
2. assert
3. LOG.debug(...)

PS. Java рулит :)


 
Mystic ©   (2008-01-23 15:55) [30]

> Sandman25   (23.01.08 15:44) [29]

Иногда этого недостаточно :) Взять, например, генератор ходов в шахматах. Как при помощи указанных инструментов проверить, что он правильно генерирует все возможные ходя для любой позиции?


 
engine ©   (2008-01-23 15:57) [31]

Может кто-нибудь пояснить, что за зверь такой — юнит-тест.
Где можно почитать про это?


 
Sandman25   (2008-01-23 15:58) [32]

Mystic ©   (23.01.08 15:55) [30]

3. LOG.debug(...)


 
Марсер ©   (2008-01-23 16:07) [33]


> Riply ©   (23.01.08 13:08) [1]
>
> >  [0] Галинка ©   (23.01.08 13:05)
> Меня очень "логи" выручают.

+100
Правда, в моей специфике без них вообще сложно...


 
Игорь Шевченко ©   (2008-01-23 16:27) [34]


> Может кто-нибудь пояснить, что за зверь такой — юнит-тест.
>
> Где можно почитать про это?


тут: http://www.exprogramming.ru/


 
Галинка ©   (2008-01-23 16:53) [35]

дык когда писалось на си без возможности отладки, тогда логи само собой. Но блин трасировка тоже достает.

сделала лог. Сразу исправила 3 бага.

"Спасибо этому дому" (с)


 
data ©   (2008-01-23 17:16) [36]


>  В основном интересует ситуация, если ошибка/баг вылазит
> не все время

логи, и отдел тестирования стоит напрячь


 
Галинка ©   (2008-01-23 17:36) [37]

data ©   (23.01.08 17:16) [36]

"Мы говорим Партия, подразумеваем Ленин. Мы говорим Ленин, подразумеваем Партия" (за точность не ручаюсь). Отдел тестирования это я... пока во всяком случае.


 
vpbar ©   (2008-01-23 17:37) [38]

исключения проверяю штукой типа madExcept. А логические ошибки логированием всего и вся.


 
Kenny   (2008-01-23 19:17) [39]

В Delphi очень не хватает джавовского стека вызовов при исключениях...


 
Mystic ©   (2008-01-23 19:20) [40]

> Sandman25   (23.01.08 15:58) [32]
>
> 3. LOG.debug(...)


LOG.debug(...) помогает исправить ошибку. Но для этого ее еще надо найти :)


 
Mystic ©   (2008-01-23 19:21) [41]

Т. е. обнаружить. А при помощи LOG.debug() ты находишь саму ошибку в коде и исправляешь.


 
Kolan ©   (2008-01-23 19:24) [42]

>
> Процедура обработки исключений выглядит как обработчик события
> Application.OnException

А имя процедуры не отправляется например?


 
@!!ex ©   (2008-01-23 19:27) [43]

> Нужно тестировать не проект вцелом, а "кубики" из которых
> проект сделан...
> В папке с проектом имеем папку TEST с набором тестовых приложений
> для тестирования "кубиков"

Это конечно хорошо, но на практике мало реализуемо... особенно у нас. :((
Да и вообще, тесты - это скорее из рода фантастики, слишком сложно, слишком долго писать тесты для всего....
поэтому их применение очень редко(Я в бытность работы в 4 относительно немаленьких конторах, не видел использования мелких тестов ниразу, максимум - глобальный тест, который тестирует все, и то не автоматически, а просто выводит данные, на которые уже ориентируется программер).


 
Kenny   (2008-01-23 19:42) [44]

> тесты - это скорее из рода фантастики

У кого как.. )


 
Псалтырь   (2008-01-23 21:10) [45]

eurekalog.com


 
iZEN ©   (2008-01-23 23:13) [46]


> Галинка ©   (23.01.08 14:43) [24]
>
> Про исключения. Тестится программа не на такие ошибки. А
> на ошибки логики сорее. Или на просчеты. По ним исключения
> не выдаются, но программа работает не так как хотелось бы.
>  Вот и хочется посмотреть, что же мы там имеем.

В простейшем случае:
System.out.println("Случилась бяка: " + msg);
(работает везде)

В других случаях:
1) Assert"s
2) JUnit Case
3) Java Platform Debugger Architecture (JPDA)


 
Игорь Шевченко ©   (2008-01-23 23:14) [47]


> А имя процедуры не отправляется например?


Всенепременно отправляется. Весь стек вызовов, который доступен.


 
Галинка ©   (2008-01-23 23:42) [48]

всем. Я теперь ужо недели три как опять приземлилась на шарпе. Опять разукрашиваю. Только теперь текст. Вот и надо смотреть, в правильные ли места записались символы форматирования.

@!!ex ©   (23.01.08 19:27) [43]

почти правильно. Потому как труд тестеров тоже стоит деньгов. А программеры заняты текущими проектами. Поэтому тестим на скорую руку непосредственно перед "внедрением в производство". ((

И проблема всегда остается - видишь не то, что накодено, а то, что хотелось бы видеть. Никогда не забуду, как два дня билась над SQL-запросом, а потом оказалось, что я двоеточее там где-то забыла. ((( И не увидишь это сразу (((


 
MsGuns ©   (2008-01-24 09:26) [49]

>data ©   (23.01.08 17:16) [36]
>и отдел тестирования стоит напрячь

Да че там мелочиться с отделом - можно сразу напрячь всю корпорацию тестирования ;)


 
Sandman25   (2008-01-24 11:21) [50]

Mystic ©   (23.01.08 19:20) [40]

У меня LOG.debug ставится не тогда, когда надо найти ошибку, а почти после каждой строчки. Так что по логам можно узнать и значения переменных, и путь выполнения программы (в какой ветке if был, сколько раз выполнился while) и т.д.
Так что по такому логу искать ошибку одно удовольствие.


 
Sandman25   (2008-01-24 11:23) [51]

Mystic ©   (23.01.08 19:21) [41]

А. Теперь понял. Такого инструмента в принципе быть не может: если у неизвестной задачи известен ответ, то это не задача :)


 
Asker   (2008-01-24 15:09) [52]

unit-тесты это инструмент разработчика, а не тестера
иначе уверенности в работоспособности нету никакой
непроверенный код - это нерабочий код - один из утверждений юнит-тестирования)


 
iZEN   (2008-01-24 16:00) [53]


> Asker   (24.01.08 15:09) [52]
>
> unit-тесты это инструмент разработчика, а не тестера
> иначе уверенности в работоспособности нету никакой
> непроверенный код - это нерабочий код - один из утверждений
> юнит-тестирования)

Вопрос о качестве покрытия кода unit-тестами у вас не стоит?
Как вы определяете, нужно ли писать unit-тест или нет? (принцип: "сначала пишется тест" часто ли вы соблюдаете?)


 
Asker   (2008-01-24 17:30) [54]

iZEN   (24.01.08 16:00) [53]
есть же утилиты проверяющие покрытие кода, а код для которого нужно писать тесты или нет непростой, обычно нужно писать для всего кроме того для чего уже писались тесты в прошлом(сходные операции) и стало быть в работоспособности нету сомнений


 
Марсер ©   (2008-01-24 21:50) [55]


> data ©   (23.01.08 17:16) [36]
>
>
> >  В основном интересует ситуация, если ошибка/баг вылазит
> > не все время
>
> логи, и отдел тестирования стоит напрячь

Господи, и живут же люди! :-(


 
Марсер ©   (2008-01-24 21:50) [56]


> data ©   (23.01.08 17:16) [36]
>
>
> >  В основном интересует ситуация, если ошибка/баг вылазит
> > не все время
>
> логи, и отдел тестирования стоит напрячь

Господи, и живут же люди! :-(


 
Mystic ©   (2008-01-29 12:42) [57]

> У меня LOG.debug ставится не тогда, когда надо найти ошибку,
>  а почти после каждой строчки. Так что по логам можно узнать
> и значения переменных, и путь выполнения программы (в какой
> ветке if был, сколько раз выполнился while) и т.д.
> Так что по такому логу искать ошибку одно удовольствие.


Вспоминаю один свой проект: восстановление трехмерной поверхности по результатам интерференции в белом свете . Там анализировалось и обрабатывалось ~50-200 Mb информации. Мысленно представил себе лог, который протоколирует каждое действие... Вряд ли бы я дождался бы окончание логирования...


 
Sandman25   (2008-01-29 13:20) [58]

Mystic ©   (29.01.08 12:42) [57]

if (LOG.isDebugEnabled()){
 for (...){
   LOG.debug(..);
   ...
 }
}
else
 for (...){
   ...
 }


 
Mystic ©   (2008-01-29 14:44) [59]

> Sandman25   (29.01.08 13:20) [58]

Ну так отладка и занимала все время. Точнее смесь отладки/составления алгоритма и т. д. Просто если есть лог в котором записан миллион шагов, то по этому логу я не смогу дойти до места ошибки, не смогу определить, а была ли ошибка, или это выброс в данных...

Обычно процесс шел таким образом: выполняем некоторый шаг в MATAB. Потом строим по промежуточным данным всякие графики. Берем сомнительные места. Прогоняем на них все наши вычисления еще раз. И т. д. и т. п.


 
Галинка ©   (2008-01-29 14:53) [60]

Mystic ©   (29.01.08 14:44) [59]

вообще-то это больше похоже на выверку мат.модели, а не на анализ работы программы.


 
Sandman25   (2008-01-29 15:23) [61]

Mystic ©   (29.01.08 14:44) [59]

Никто не заставляет писать миллион шагов. В каждом классе свой логгер, а в конфигурационных файлах прописано, какие логгеры какую информацию выводят, причем настройки иерархические. Например, все логгеры из пакета (и вложенных пакетов) com.foo.bar работают в режиме INFO, логгер com.foo.bar.dog работает в режиме DEBUG, остальные логгеры работают в режиме ERROR. То есть можно динамически включать только те сообщения, которые нужны.


 
Mystic ©   (2008-01-29 15:24) [62]

> Галинка ©   (29.01.08 14:53) [60]

Математический софт тоже ведь надо отлаживать?


 
Mystic ©   (2008-01-29 15:38) [63]

> Sandman25   (29.01.08 15:23) [61]

Не помогает это никак :) Потому что я должен логировать все, потому что я не знаю, что меня заинтересует при последующем просмотре. Т. е. я не знаю заранее, какой шаг из миллиона меня заинтересует.

Например, разрешение камеры 400 x 1600, я делаю попиксельную обработку 800 фреймов. Соответственно или лог будет на каждый пиксел, либо его вообще не будет. Либо мне прийдется заранее вычислить интересные точки


 if (IsInterestPoint(x, y))
   log(something);


что тоже не очень удачно, потому что интерес к точке (x, y) может породить интерес к точке (x1, y1), для этого надо будет еще раз запускать всю программу и т. п. Да и построить графики по результатам надо будет в каком-то другом приложении...


 
Sandman25   (2008-01-29 16:11) [64]

Mystic ©   (29.01.08 15:38) [63]

То есть грубо говоря, приходит случайный невоспроизводимый набор данных, интересно буквально всё, но записывать всё не хочется? Тогда, конечно, наука бессильна :)


 
Mystic ©   (2008-01-29 17:04) [65]

> Тогда, конечно, наука бессильна :)

Почему бессильна? Тут рулит MATLAB :) Вообще спасет любая интерпретация, когда нет никаких проблем в отладке выполнить еще парочку операторов, построить график и т. п. Другой вариант --- самому писать аналогичную консоль.


 
Sandman25   (2008-01-29 17:09) [66]

Mystic ©   (29.01.08 17:04) [65]

Это называется отладка: приостановил выполнение, посмотрел переменные, изменил их значение, продолжил...


 
Mystic ©   (2008-01-29 20:11) [67]

> Это называется отладка: приостановил выполнение, посмотрел
> переменные, изменил их значение, продолжил...


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


 
Loginov Dmitry ©   (2008-01-30 00:35) [68]

> собсно сабж. В основном интересует ситуация, если ошибка/баг
> вылазит не все время (т.е. при трассировке то вылазит, то
> нет).


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

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


 
Sandman25   (2008-01-30 08:42) [69]

Mystic ©   (29.01.08 20:11) [67]

То есть всё упирается в экспорт. Если есть экспорт, с данными можно делать всё, что угодно.


 
Mystic ©   (2008-01-30 11:29) [70]

> Sandman25   (30.01.08 08:42) [69]

Я уже писал: в данном случае мне очень помогал MATLAB: отлаживаешь/составляешь алгоритм в нем, а потом просто в C++ добиваешься идентичной работы уже имея промежуточные результаты. Как вариант можно использовать отладочную консоль, где бы можно было во время работы программы экспортнуть нужный вектор.

В общем общей панацеи, которая бы работала во всех случаях, нет. С другой стороны мне рассказывали об одном человеке, который обходился вообще без отладки. Программу на C++ набирал в Far. Потом долго смотрел на нее. Считал, что если в программе остались синтаксические ошибки, то наверняка в ней есть и семантические. Как только изучение исходного текста проходило его требовательный взгляд, программа компилировалась (без ошибок компиляции) и баги в ней были очень редки :)


 
ketmar ©   (2008-01-30 11:31) [71]

>[70] Mystic ©(30.01.08 11:29)
там ошибка была уже в прокладке, которая выбрала C++ (я не холиварю! %-)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.036 c
2-1202528961
Dmitry S
2008-02-09 06:49
2008.03.02
освобождение памяти дин. массива


15-1201695995
чувак
2008-01-30 15:26
2008.03.02
Подключение железки к COM порту


11-1184544980
DX_Original
2007-07-16 04:16
2008.03.02
DriveComboBox


2-1202037033
kas86
2008-02-03 14:10
2008.03.02
Считать определенный текст из файла


2-1202232422
NieL
2008-02-05 20:27
2008.03.02
Action (ShortCut)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский