Трассировка программы что это

Трассировка пользовательских приложений

Аннотация: Представлены основные идеи, понятия и объекты, ассоциированные с трассировкой пользовательских приложений. Обращено внимание на особенности трассировки приложений реального времени. Детально рассмотрены функции трассировки.

Основные идеи, понятия и объекты

Под трассировкой в стандарте POSIX-2001 понимается порождение, накопление и анализ данных о событиях , имевших место при выполнении пользовательского приложения.

Применительно к приложениям реального времени трассировка помогает достичь по крайней мере трех целей:

  • оптимизировать структуру приложения на основе анализа трассировочных данных (например, попытаться сгладить пики активности, распределить нагрузку равномерно по времени);
  • отладить приложение (традиционные интерактивные отладчики могут быть неприменимы к приложениям реального времени);
  • выявить причину аварийного завершения работы приложения (обнаружить место и первые признаки ненормального поведения).

С логической точки зрения в трассировке (в том виде, как она рассматривается в стандарте POSIX-2001) участвуют три процесса (физически они могут совпадать между собой):

Как ускорить телефон ? Отключи эти настройки смартфона и телефон перестанет тормозить 🔥

  • трассируемый ( целевой );
  • трассирующий ( управляющий трассировкой );
  • анализирующий данные трассировки .

Сведения о действиях, производимых при выполнении приложения, фиксируются в виде объектов данных, называемых событиями трассировки (или, для краткости, просто событиями ). События записываются в потоки трассировки , которые содержат также служебные данные, необходимые для интерпретации событий .

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

Процесс, создавший поток трассировки , называется трассирующим ( управляющим трассировкой ).

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

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

События трассировки подразделяются на две категории:

  • пользовательские ;
  • системные .

Пользовательские события генерируются при вызове функции posix_trace_event() .

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

У событий трассировки есть типы и имена , между которыми устанавливается взаимно-однозначное соответствие (вообще говоря, свое для каждого потока). Удобочитаемые имена предназначены для человека; в потоке трассировки хранятся идентификаторы типов событий (и таблица соответствия имен и идентификаторов типов).

ТРАССИРОВКА. ПЕРЕВОД РАСТРА В ВЕКТОР. ИЛЛЮСТРАТОР. Adobe Illustrator. Рисуем сердечки.

В стандарте POSIX-2001 специфицированы следующие типы системных событий , анализ которых помогает интерпретировать поток трассировки .

Возникновение ситуации переполнения потока трассировки .

Устранение ситуации переполнения потока трассировки .

Начало сброса потока трассировки в журнал .

Завершение сброса потока трассировки в журнал .

Ошибка трассировки , зависящая от реализации.

Стандартизован также один тип пользовательских событий – POSIX_TRACE_UNNAMED_USEREVENT . Это значение возвращается, когда приложение пытается зарегистрировать больше имен событий , чем допускается в соответствии со значением конфигурационной константы TRACE_USER_EVENT_MAX .

Стандартом POSIX-2001 предусмотрен механизм фильтрации, позволяющий отключить генерацию событий определенных типов и, тем самым, уменьшать объем трассировочных данных. Это полезно, например, в ситуациях, когда у приложения есть заведомо «неинтересные» фрагменты, трассировать которые нет смысла, или многочисленные системные события (такие, например, как переключение контекстов ), «неинтересные» с точки зрения приложения.

Фильтр устанавливает трассирующий процесс . По умолчанию события не фильтруются.

При смене фильтра генерируется системное событие POSIX_TRACE_FILTER .

Ключевыми элементами реализации средств трассировки являются описанные в заголовочном файле структуры posix_trace_event_info и posix_trace_status_info . Первая специфицирует формат событий , вторая – данные, хранящиеся в потоке трассировки .

Согласно стандарту POSIX-2001, структура типа posix_trace_event_info должна содержать по крайней мере следующие поля.

trace_event_id_t posix_event_id; /* Идентификатор типа события */ pid_t posix_pid; /* Идентификатор трассируемого процесса */ void *posix_prog_address; /* Адрес точки трассировки */ int posix_truncation_status; /* Признак усечения данных */ struct timespec posix_timestamp; /* Временной штамп события */ pthread_t posix_thread_id; /* Идентификатор трассируемого потока управления */

Смысл некоторых полей, вероятно, нуждается в пояснении.

Если, в соответствии с типом ( поле posix_event_id ) событие является системным и не ассоциировано с каким-либо процессом, значение posix_pid должно быть нулевым.

Для пользовательских событий в поле posix_prog_address помещается адрес вызова posix_trace_event(); для системных , сгенерированных в результате явного обращения приложения к системному сервису (такому, например, как fork() ), в этом поле находится адрес вызова системного сервиса .

В поле posix_truncation_status хранится признак того, были ли данные усечены при генерации или чтении события . Возможных значения три:

Доступны все данные, ничего не усечено.

Источник: intuit.ru

IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.

Команда tracert в Windows. Зачем нужна и как пользоваться сетевой утилитой tracert?

  • 01.07.2018
  • Команды и утилиты Windows, Компьютерные сети, Полезные программы, Сетевые утилиты и программы
  • 2 комментария

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжим разбираться с полезными командами и утилитами командной строки Windows, на этот раз давайте разберемся с сетевой утилитой tracert, мы поговорим зачем нужна команда tracert и как ею пользоваться для диагностики компьютерной сети и устранению неполадок. Как мы увидим, утилиту tracert используют сетевые инженеры и системные администраторы для определения маршрута прохождения IP-пакета по сети, вы убедитесь, что этой утилитой довольно легко пользоваться, но не все умеют правильно оценивать результаты работы этой команды, о некоторых сложностях, которые могут возникнуть при интерпретации трассировка маршрута мы поговорим в самом конце этой публикации.

Читайте также:
Sopcast что это за программа и нужна ли

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

Назначение команды tracert или как определить маршрут прохождения пакета до узла

Tracert – это небольшая системная утилита вашей операционной системы, которая позволяет сделать трассировку маршрута до заданного узла в локальной сети или сети Интернет. В операционных системах Windows tracert – это стандартная утилита, которая устанавливается вместе с операционной системой, то есть вам не нужно ничего устанавливать, чтобы воспользоваться командной tracert. Исполняемый файл tracert.exe в Windows 10 находится по следующему пути: C:WindowsSystem32.

Команда tracert – это один из самых часто используемых инструментов для траблшутинга и сетевой диагностики, эта утилита дает нам возможность определить маршрут, по которому проходит пакет до заданного узла. Tracert может работать как с доменными имена или именами хостов, так и с IP-адресами (как с IPv4, так и с IPv6). Кроме того что tracert показывает маршрут от вашего компьютера до удаленного узла в сети, она еще и отображает время прохождения пакетов как до конечного узла, так и до транзитных или промежуточных узлов (время является одной из самых важных единиц измерения в компьютерных сетях). Давайте лучше посмотрим, как работает утилита tracert на простом примере без дополнительных параметров.

Трассировка маршрута при помощи команды Tracert до IP-адреса Яндекс

Трассировка маршрута при помощи команды Tracert до IP-адреса Яндекс

В данном случаем мы видим путь прохождения IP-пакета от моего ПК до сервера Яндекс, чтобы указать утилите tracert удаленный узел, мы воспользовались IP-адресом. Но эта команда может работать и с доменными именами, давайте посмотрим, сделав трассировку маршрута до сервера Google.

Трассировка маршрута при помощи утилиты tracert до сервера Google по доменному имени

Трассировка маршрута при помощи утилиты tracert до сервера Google по доменному имени

Стоит сказать пару слов о выводе, который мы получили. Каждая строка вывода команды tracert пронумерована, каждая такая строка называется шагом, хопом или прыжком. По умолчанию tracert в Windows отправляет три запроса на каждый хоп и получает от этого хопа ответы, если ответ не получен, то в первых трех столбцах мы видим символ «*», если ответ получен, то в первых трех столбцах указывается время прохождения пакета, а в четвертом столбце Windows дает нам подсказку о причинах, по которым удаленный узел нам не ответил или его адрес, если узел ответил.

Хопы, которые мы видим в трассировке – это маршрутизаторы, серверы или L3 коммутаторы, на интерфейсах которых прописан IP-адрес (то есть устройства, которые определяют путь, по которому пойдет IP-пакет, другими словами – это устройства сетевого уровня моделей OSI 7 и TCP/IP), это важное уточнение для интернет-пользователей, всё дело в том, что витая пара или другой тип кабеля (про минусы использования коаксиального кабеля в Ethernet сетях можете почитать здесь), который приходит к вам в квартиру, подключен в L2 коммутатор, который никак не влияет на маршрут прохождения пакета, на нем нет IP-адресов (вернее есть один адрес, который использует тех. поддержка провайдера для управления этим коммутатором) и он не принимает решений по маршрутизации пакетов, таких коммутаторов между хопами может быть несколько десятков и мы их никак не увидим, так как для утилиты tracert они представляют собой что-то вроде кабеля, собственно как и для других утилит сетевой диагностики.

Для диагностики сетевых ресурсов утилита tracert использует специальный протокол, который называется ICMP (Internet Control Message Protocol — протокол межсетевых управляющих сообщений), есть еще команда traceroute (эта утилита обычно входит в стандартные дистрибутивы Linux, например, эта утилита присутствует в Linux Mint), которая по умолчанию использует протокол UDP, для ее использвания вам точно также потребуется эмулятор терминала. ICMP-сообщение, которое посылает наш компьютер, запаковывается в IP-пакет (здесь вы можете прочитать более подробно про инкапсуляцию данных в компьютерных сетях), у которого есть специальное значение TTL (time to live или время жизни), для понимания работы tracert это важно, поскольку эта команда при каждой отправке пакета увеличивает TTL на единицу, а первый отправленный пакет в сеть имеет значение, равное единице, при этом по умолчанию tracert отправляет три пакета с одним и тем же TTL, то есть в ответ мы должны получить три пакета от удаленного узла (самые основы взаимодействия двух узлов в компьютерной сети описаны здесь, для реализации схемы использовалась Cisco Packet Tracer).

Вернемся к примеру с трассировкой Яндекса, чтобы это лучше понять. Когда мы написали tracert 77.88.55.88, tracert сформировала IP-пакет, в котором в качестве узла назначения указала IP-адрес Яндекса и отправила его в сеть, а в качестве TTL этот пакет получил значение равное единице, далее tracert, не изменяя TTL отправила еще два пакета и получила три ответа от узла 192.168.0.1. После значение TTL было увеличено на единицу (значение стало равным двойке) и в сеть было отправлено еще три пакета (IP-адрес в этих пакетах не изменялся), следующий хоп отказался отвечать на ICMP-запросы и мы увидели три звездочки, после этого TTL был снова увеличен и мы увидели третий хоп, таким образом tracert будет увеличивать TTL до тех пор, пока не доберется до сервера Яндекс. С Гуглом ситуация аналогичная, только там мы использовали доменное имя, поэтому tracert пришлось выполнять дополнительные операции по выяснению IP-адреса, на котором этот домен висит.

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

Читайте также:
Что за программа мега

В качестве примера давайте сделаем трассировку до сайта microsoft.com, сервера этой компании не отвечают на ICMP-запросы. Трассировка показана на рисунке ниже.

Трассировка до сервера Microsoft, который не отвечает на ICMP-запросы

Трассировка до сервера Microsoft, который не отвечает на ICMP-запросы

На момент проверки этого ресурса он был доступен, но результаты работы tracert нас немного обманывают, по ним видно, что мы якобы не можем добраться до сервера Майкрософт, поэтому для корректной диагностики удаленных ресурсов нужно иметь целый арсенал сетевых утилит, ну или как минимум браузер и умение гуглить. Еще по трассировки видно, что tracert в Windows по умолчанию использует максимальное значение TTL равное 30, протокол IPv4 позволяет задавать максимальное значение TTL 255, но на самом деле это очень много, чтобы остановить выполнение команды tracert воспользуйтесь сочетание клавиш ctrl+c.

Параметры команды tracert в Windows

Любая команда в командной строке Windows имеет небольшой справочник (команда help — справочник командной строки Windows), в котором указаны допустимые параметры, в том числе и команда tracert, чтобы увидеть эти параметры, в командной строке нужно написать: tracert /? или tracert /h.

Источник: zametkinapolyah.ru

Уроки 50 — 51
§4.1. Алгоритм и кодирование основных алгоритмических структур

§4.1.4. Приёмы отладки программ. Трассировка программ

§4.1.4. Приёмы отладки программ. Трассировка программ

Приёмы отладки программ. Трассировка программ

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

Поиск и исправление ошибок в программе называют её отладкой.

Первый шаг отладки — проверка синтаксиса (правильности написания текста программы по созданному алгоритму). Обычно эта проверка выполняется автоматически средой программирования. Обнаруженные возможные ошибки компьютер выделяет визуально (цветом, подчёркиванием и т. д.), чтобы разработчик алгоритма обратил на них своё внимание.

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

Второй шаг отладки — проверка правильности работы программы на каком-то одном типовом примере. Цель этой проверки — убедиться, что в программе не допущено семантических (смысловых) ошибок.

Такую проверку можно выполнить путём трассировки программы — её пробного выполнения вручную для конкретных исходных данных, с контролем получаемых значений переменных на каждом шаге. Эти значения переменных удобно записывать в виде таблицы, которую называют таблицей трассировки.

Приведём пример трассировки программы вычисления факториала натурального числа:

Проведём трассировку программы для значения N, равного 6. Моменты изменения значений переменных будем для наглядности выделять серым фоном. Заметим, что в остальных случаях в строках таблицы повторяются те значения переменных, которые были получены ранее и в данный момент сохраняются в них. Если же переменная ещё не имеет никакого значения, в соответствующей ячейке таблицы ставится прочерк.

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

В последней строке таблицы трассировки, соответствующей команде вывода результата, для соответствующей переменной (F) мы видим полученное значение (720).

Проверяем его правильность, зная математическую формулу расчета факториала:

6! = 6 • 5 • 4 • 3 • 2 • 1 == 720.

Совпадение результата, полученного при трассировке программы, со значением результата, вычисленным по исходной математической формуле, показывает, что алгоритм для выбранного исходного значения работает правильно. Однако это не гарантирует его правильную работу при всех возможных исходных данных. Поэтому необходим третий шаг отладки программы — её тестирование.

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

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

• типичные для решаемой задачи значения исходных данных (например, при решении задачи на движение автомобилей это будут значения скоростей порядка десятков километров в час, а для задачи на движение космических кораблей — значения скоростей в несколько километров в секунду);
• граничные значения данных (если заранее известны диапазоны их изменения);
• значения данных вне границ допустимого диапазона (например, при работе с натуральными числами — нулевые или отрицательные значения) — это необходимо для того, чтобы выявить, как алгоритм реагирует на заведомые ошибки 1 ).

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

Если программа предполагает ввод нескольких исходных данных, то необходимо предусмотреть в наборе тестов все возможные их комбинации.

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

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

Читайте также:
Ssdlife что это за программа

Вопросы и задания

1. Что такое отладка программы? Для чего она нужна?

2. Перечислите основные этапы отладки программы. Опишите назначение каждого этапа и характер обнаруживаемых с его помощью недочётов программы.

3. Что такое таблица трассировки? Как она составляется? Приведите свой пример программы и составленной для неё таблицы трассировки.

4. Как формируется набор тестов для тестирования программы? Какие варианты исходных данных рекомендуется включать в этот набор тестов?

*5. Приходилось ли вам при работе на компьютере сталкиваться со сбоями в работе программ? Как вы считаете — вызвано ли это недостаточно тщательным тестированием этих программ при их разработке? Предположите, какие меры разработчику этих программ потребовалось (или потребуется) предпринять для исправления этих ошибок и оцените примерные затраты на это исправление.

Следующая страница §4.1.5. Типовые алгоритмы

Cкачать материалы урока

Источник: xn—-7sbbfb7a7aej.xn--p1ai

Трассировка системы Android — что это и зачем нужно?

Кто и как пользуется функцией трассировки системы Android?

Трассировка системы Android на смартфоне — инструмент, позволяющий пошагово рассмотреть все процессы, которые запущены на устройстве. Эта возможность доступна в разделе для разработчиков. О том, что конкретно представляет из себя трассировка и зачем она нужна, расскажем далее.

Что такое трассировка системы Android?

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

Трассировка Android

Разработчики используют трассировку для отладки приложений и быстрого поиска ошибок в коде. Отчет трассировки выявляет проблемы, такие как прерывание пользовательского интерфейса или высокое энергопотребление. Запись трассировки может быть представлена в разных видах:

  1. Профилировщик CPU. Он проверяет использование процессора и активность потоков приложения.
  2. Приложение System Tracing. Сохраняет активность устройства в файл трассировки.
  3. Systrace. Устаревший инструмент. Записывает активность устройства за короткий период времени в сжатый текстовый файл.
  4. Perfetto. Новый инструмент, обладающий более широким набором данных о процессах устройства.

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

Более подробный обзор полезных функций режима разработчика на смартфоне читайте здесь.

Оценок: 24, средняя: 4,42
| —> 09.10.2022 — 17:30 | Ответить

Здравствуйте. Можете пожалуйста сказать, что будет если отключить все категории в трассировки системы? Какие категории нужно включить, что бы было по умолчанию? Помогите, пожалуйста.

| —> 19.10.2022 — 05:41 | Ответить

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

| —> 20.04.2022 — 13:01 | Ответить
Які повинні бути категорії при трассировкі системи можете пожалуста сказати
| —> 06.07.2021 — 15:36 | Ответить

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

У тебя повысится производительность не пугайся и ставь на максимум
| —> 05.07.2021 — 23:17 | Ответить
У тебя повысится производительность
| —> 15.06.2021 — 00:29 | Ответить
А если поставить на 64тыс КБ чё будет ?
| —> 29.05.2021 — 11:23 | Ответить
У меня нет трассировки системы,почему?
| —> 14.07.2021 — 06:55 | Ответить

Через Activity открывается.
| —> 27.04.2021 — 15:19 | Ответить

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

Вячеслав Гришанков
| —> 27.04.2021 — 15:38 | Ответить

Это не приложение, а часть системы Android. Удалить это нельзя технически, да и памяти это вам не прибавит)

Источник: androidlime.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru