Как активировать режим «невидимки» в официальном клиенте ВКонтакте
Вы еще не слышали о секретном меню, которое имеется в стандартном клиенте приложения? Тогда читайте внимательно: наша информация вас порадует, а инструкция поможет «исчезнуть» в нужный момент. Самое приятное — это то, что для включения режима невидимки не нужны даже ROOT-права на устройство (всё уже есть в меню официального приложения — в «режиме отладки»).Пошаговая инструкция включения режима «невидимки»:
- Открываем официальный клиент VK;
- Заходим в «Настройки» —> далее «О программе» (должно появиться изображение «собаки» на фоне разноцветных квадратов;
- Нажимаем на само изображение «собаки» 5 раз (После нажатия на экране не появится никаких уведомлений)
- Закрываем приложение ВК;
- Заходим в номеронабиратель самого телефона;
- Вводим в строке набора номера код *#*#856682583#*#* (кнопку вызова нажимать не нужно) — на экране должен открыться «Режим отладки ВК»;
- Находим в списке пункт «
- Выходим в главное меню телефона, открываем приложение ВК (готово, вы — невидимка).
Информация от 28.04.2017: В результате изменения политики ВКонтакте режим «невидимки» больше недоступен. Единственным временным решением является использования стороннего клиента Kate Mobile, который позволяет частично вернуть Offline-режим.
Примечание: Если после набора кода (п.7) ничего не произошло, то необходимо воспользоваться программой Secret Codes.
Дополнительная возможность: Также, помимо включения режима «Невидимки», в том же секретном меню можно отключить рекламу — найти пункт «Отключить рекламу» и отметить его галочкой.
Совет: Остальные пункты желательно не трогать, чтобы не сбить функционирование самого клиента.
👆Режим отладки по USB на Android | Смартфоны | Блог
Режим отладки — это инструмент для разработчиков. Когда смартфон подключают к ПК, в этом режиме ищут ошибки в программном обеспечении. Однако в некоторых случаях отладка может пригодиться и обычному пользователю. Давайте разберемся, как ее включить и для чего можно использовать.
Как активировать
Чтобы получить доступ к режиму отладки по USB, сперва нужно включить системный раздел «Для разработчиков». Для этого откройте приложение «Настройки» и перейдите в раздел «О телефоне». Затем тапните несколько раз на «Номер сборки», пока не увидите подсказку «режим отладки включен». В зависимости от версии Android и конкретной оболочки, названия опций могут отличаться. Для подтверждения придется ввести код разблокировки устройства.
Теперь зайдите в подраздел «Система» — здесь появится новый пункт. Активируйте режим разработчика, далее прокрутите список и найдите пункт «Отладка по USB».
Настройка ПК
youtube.com/embed/GlWDHKiZygY?origin=https://club.dns-shop.ru&autoplay=1><img src=https://img.youtube.com/vi/GlWDHKiZygY/hqdefault.jpg><svg width=68 height=48><path fill=#f00 d=’M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z’></path><path fill=#fff d=’M 45,24 27,14 27,34′></path></svg></a>» frameborder=»0″ allow=»accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture» allowfullscreen=»»/>
Чтобы воспользоваться отладкой, необходимо установить на компьютер программу ADB. Android Debug Bridge – это одна из составляющих универсального средства разработки Android SDK. Чтобы не устанавливать весь SDK целиком, скачиваем только ADB. Отдельно его можно загрузить, например, на ресурсе XDA-Developers.
Распаковываем архив в легкодоступную папку, например, в корень системного диска:
Теперь надо открыть командную строку из этой папки. Это можно сделать, удерживая Shift и щелкнув правой кнопкой мыши на свободном месте окна, а затем выбрать параметр «Открыть окно PowerShell».
Подключите смартфон к компьютеру. Измените режим USB на режим «передачи файлов (MTP)». В окне командной строки введите команду «adb devices» (без кавычек).
На экране телефона вы увидите всплывающее окошко — нажимайте «разрешить доступ для отладки по USB». Наконец, повторно введите команду «adb devices». Если все прошло успешно, вы должны увидеть серийный номер вашего устройства в командной строке.
Готово: теперь вы можете запускать любую команду ADB на своем устройстве.
Для чего нужен режим отладки
Как было сказано выше, отладка по USB в основном используется мобильными разработчиками. Подключая смартфон к ПК, они получают возможность практически мгновенно протестировать написанное приложение. Но мы разберем, чем может пригодиться отладка обычному пользователю.
Например, получение Root-прав. Android создавался на базе ОС Linux, откуда и перенял основные принципы. Традиционно, Root — это название учетной записи администратора, которая имеет неограниченные права. Получив такой доступ, вы сможете делать со смартфоном что угодно: удалять и редактировать системные файлы, стирать встроенные приложения, устанавливать пользовательские модификации, разгонять процессор и многое другое.
Root-права также позволяют поставить кастомное рекавери (TWRP). Это меню, при помощи которого можно устанавливать альтернативные прошивки. Для каждого телефона способ получения «рута» отличается — нет какой-то универсальной инструкции. Мануалы для конкретного смартфона можно найти, например, на форуме 4PDA.
Важно понимать, что все действия с телефоном вы проводите на свой страх и риск. При получении «рута» вы лишаетесь гарантии, также есть небольшой шанс превратить устройство в «кирпич» — попросту говоря, оно перестанет включаться. Помимо этого, увеличивается риск подхватить вирус, который, используя расширенные права доступа, сможет выполнить гораздо больше зловредных действий.
Ранее режим отладки использовался для доступа к некоторым скрытым функциям системы при помощи командной строки. Однако с появлением Android 10, большинство таких опций можно включить напрямую с телефона — из вышеупомянутого раздела «Для разработчиков». Например, чтобы включить опцию записи экрана, найдите «Экспериментальные функции» и активируйте флажок напротив «settings_screenrecord_long_press toggle»:
Тем не менее, старый способ тоже доступен: введите в PowerShell команду «adb shell settings put global settings_screenrecord_long_press true». Она также активирует возможность записи экрана смартфона.
Полезные команды
Когда смартфон подключен в режиме отладки по USB, можно выполнять различные действия с помощью командной строки. Приведем несколько интересных команд:
- «adb devices» показывает список подключенных устройств.
- «adb get-state» — состояние устройства. Команда выдаст одно из трех значений: «device» — работает, «bootloader» — загружается, «offline» — выключено.
- «adb logcat» — просмотр системного журнала событий. Эта опция будет полезна для разработчиков приложений.
- «adb push /адрес/локального/файла /адрес/удаленного/файла» — передача файла на устройство. Если вместо «push» в команде использовать «pull», то файл будет скачан с устройства.
- «adb reboot» перезагружает устройство.
- «adb reboot recovery» — загрузка в режим рекавери.
Режим отладки может быть полезен пользователям, которые хотят модицифировать Android-смартфон: устанавливать кастомные прошивки и пользовательские патчи, а также получить доступ к административным правам. На альтернативной платформе iOS таких возможностей нет. Однако если вы не до конца понимаете, как это работает, то лучше не экспериментировать, чтобы избежать неприятных последствий.
Подготовка тестового компьютера для выполнения исполняемого файла отладки
- 000Z» data-article-date-source=»ms.date»>07/02/2019
- Чтение занимает 2 мин
В этой статье
Чтобы подготовить компьютер к тестированию отладочной версии приложения, созданного с помощью Visual C++, нужно развернуть отладочные версии библиотек DLL Visual C++, от которых зависит приложение.To prepare a computer to test the debug version of an application that is built with Visual C++, you have to deploy debug versions of the Visual C++ library DLLs that the application depends on. Чтобы определить, какие библиотеки DLL нужно развернуть, выполните действия, описанные в разделе Основные сведения о зависимостях приложения Visual C++.To identify which DLLs have to be deployed, follow the steps in Understanding the Dependencies of a Visual C++ Application. Как правило, отладочные версии библиотек DLL Visual C++ имеют имена, заканчивающиеся на «d». Например, отладочная версия msvcr100.dll называется msvcr100d.
Примечание
Отладочные версии приложения, как и отладочные версии библиотек DLL Visual C++, не являются распространяемыми.Debug versions of an application are not redistributable, and debug versions of the Visual C++ library DLLs are not redistributable. Вы можете развернуть отладочные версии приложений и библиотек DLL Visual C++ только на других своих компьютерах и исключительно для отладки и тестирования приложений на компьютере без установленной Visual Studio.You may deploy debug versions of applications and Visual C++ DLLs only to your other computers, for the sole purpose of debugging and testing the applications on a computer that does not have Visual Studio installed. Дополнительные сведения см. в разделе Распространение файлов Visual C++.For more information, see Redistributing Visual C++ Files.
Существует три способа развернуть отладочные версии библиотек DLL Visual C++ вместе с отладочной версией приложения. There are three ways to deploy debug versions of Visual C++ library DLLs together with the debug version of an application.
Используйте центральное развертывание для установки отладочной версии конкретной библиотеки DLL Visual C++ в каталоге %windir%\system32, используя проект установки, который включает в себя модули слияния для подходящей версии библиотеки и архитектуры приложения.Use central deployment to install a debug version of a particular Visual C++ DLL to the %windir%\system32\ directory by using a Setup project that includes merge modules for the right library version and architecture of your application. Модули слияния можно найти в каталоге Program Files или Program Files (x86) внутри \Common Files\Merge Modules\.Merge modules are found in the Program Files or Program Files (x86) directory in \Common Files\Merge Modules\. Отладочная версия модуля слияния имеет слово Debug в имени, например Microsoft_VC110_DebugCRT_x86.msm.The debug version of a merge module has Debug in the namefor example, Microsoft_VC110_DebugCRT_x86.
Используйте локальное развертывание для установки отладочной версии определенной Visual C++ библиотеки DLL в каталоге установки приложения, используя файлы, указанные в каталоге Program Files или Program Files (x86) в \Microsoft Visual Studio <version> \вк\редист\ Debug_NonRedist \ .Use local deployment to install a debug version of a particular Visual C++ DLL in the application’s installation directory by using files that are provided in the Program Files or Program Files (x86) directory in \Microsoft Visual Studio <version>\VC\redist\Debug_NonRedist\.
Примечание
Для удаленной отладки приложения, созданного с помощью Visual Studio 2005 или Visual Studio 2008 на другом компьютере, необходимо развернуть отладочные версии библиотек DLL Visual C++ Library как общие параллельные сборки. For remote debugging of your application built by using Visual Studio 2005 or Visual Studio 2008 on another computer, you have to deploy debug versions of Visual C++ library DLLs as shared side-by-side assemblies. Вы можете использовать проект установки или установщик Windows для установки подходящих модулей слияния.You can use either a Setup project or Windows Installer to install corresponding merge modules.
Используйте параметр Развернуть в диалоговом окне Диспетчер конфигураций Visual Studio, чтобы скопировать выходные и другие файлы проекта на удаленный компьютер.Use the_ Deploy option in the Configuration Manager dialog box in Visual Studio to copy the project output and other files to the remote computer.
Установив библиотеки DLL Visual C++, вы можете запустить удаленный отладчик в сетевой папке.After Visual C++ DLLs are installed, you can run a remote debugger on a network share.
Дополнительные сведения об удаленной отладке см. в разделе Удаленная отладка.For more information about remote debugging, see Remote Debugging.См. также разделSee also
Развертывание в Visual C++Deployment in Visual C++
Параметры командной строки установщика WindowsWindows Installer Command line options
Примеры развертыванияDeployment Examples
Remote DebuggingRemote Debugging
Настройка прокси в VK Coffee
VK Coffee — это бесплатная модификация популярного приложения ВКонтакте для Android, которая имеет большое количество возможностей, полезных для продуктивной работы в социальной сети. Главная особенность приложения — максимум функциональных возможностей с минимальным вмешательством в исходные данные пользователя.
Функционал VK Coffee
Функционал приложения достаточно разнообразен, основными аспектами в данном разделе есть следующие:
- возможность изменения идентификатора программы;
- изменение статуса Online на Offline и в обратном порядке по мере необходимости;
- выполнение действий, скрытых от других пользователей;
- установка Pin-кода;
- функции мультиаккаунта;
- обход блокировки и проверки ссылок;
- возможность проводить очистку кеша прямо в диалогах;
- отключение рекламы.
На сайте компании ProxySeller вы также можете подобрать прокси-серверы и для ПК. Переключаться между ними можно будет прямо в браузере. Для этого только нужно подобрать оптимальный инструмент в нашем обзоре ТОП-5 популярных прокси-расширений для Firefox.
Настройка прокси для VK Coffee
- После скачивания приложения на Android зайти в общий список и выбрать пункт «Настройки»:
- В настройках выбрать категорию «Безопасность»:
- Выбрать прокси по умолчанию (учитывая нестабильность работы) или ввести свой прокси путем указания адреса порта:
Приложение VK Coffee может работать и без использования встроенного прокси-сервера. Для этого необходимо зайти в настройки, и пройти по схеме: «Отладка» — «Вызвать отладку приложения» — «Домен API». В появившейся строке удалить все данные и прописать «vk-api-proxy.xtrafrancyz.net», затем нажать «Ок» и перезапустить программу.
Эти действия позволят беспрепятственно использовать ВКонтакте пользователям, находящимся в регионах с заблокированным доступом.
Вы можете использовать прокси-серверы еще и для безопасной автоматизированной накрутки на Twitch.
Режим НЕВИДИМКИ в ВК на андроид: пошаговые инструкции+ #видео 2019
Тема анонимности и открытости в социальных сетях не так проста, как кажется. Не зря эту сферу в России постепенно начинают регулировать на государственном уровне. За установками сверху вынуждены следовать и владельцы сетей. Если совсем недавно официальная невидимка ВК на андроиде или любом другом мобильном устройстве позволяла скрыто решать большинство задач, то сейчас ситуация изменилась.
Старое доброе время
Раньше вопрос о том, как сидеть в ВК офлайн с андроида, по сути, мог стоять только для чайников. Хотя время от времени попытки вывести из игры программы некоторых разработчиков и предпринимались. Но неудобства носили лишь временный характер. На практике любители скрывать свое присутствие в интернете всегда могли найти тот или иной выход.
Для этого имелись такие варианты:
Программа | Возможности |
Приложение ВКонтакте | Приложение давало возможность уверенно чувствовать себя почти онлайн, находясь в то же время за кадром. Для пользователя в этом режиме были доступны большинство обычных действий, включая и просмотры чужих страничек. Включить функцию можно было с помощью осуществления нехитрых комбинаций внутри системы. Отладка занимала считаные минуты. |
Kate Mobile
| В VK offline с androidа можно было попасть и с помощью этой программы. Она также позволяла скрыть присутствие. Здесь необходимо было установить рабочий режим «По возможности быть офлайн». Сам по себе он доступен и сейчас, но уже не является функциональным, то есть бесполезен. |
Программы других разработчиков | Они предлагали варианты, будучи для потенциальных собеседников офлайн, беспрепятственно читать новости, просматривать сообщения, смотреть фильмы, слушать музыку. Только не все из них реально работали: хватало и мошенников. |
Нужда почувствовать себя шпионом в сети возникала, да и сейчас возникает, у тех категорий граждан, которые сталкиваются с ограничениями в использовании социальных сетей.
Доступ в интернет не только через персональный компьютер, но и через телефоны значительно увеличил число таких граждан. Спрос же рождал предложение.
Черный день для шпионов
День этот наступил в апреле 2017 г. Владельцы официального ВК изменили политику в отношении анонимности пользователей. С этого момента перестал быть актуальным и режим невидимки в ВК для андроидов. Перестали быть полезными соответствующие опции в Kate Mobile и других программах. Сам ресурс был назван площадкой именно для открытого дружеского общения.
Решение о выводе пользователей из тени привело к ряду любопытных эффектов:
- Коды для невидимки в ВК тут же начали предлагать различные полуофициальные или даже совсем подозрительные ресурсы. Несмотря на разъяснения о том, что дело отнюдь не в доступе к опции, а в ликвидации системы анонимности, желающих приобрести буквенно-цифровые шифры нашлось немало. Большая часть покупателей «секретных разработок» быстро разочаровалась.
- Kate Mobile отдельно также заявил об отключении опции, четко пояснив, что возможность зашифрованного присутствия отменена. Это не остановило попыток обойти ограничения. Шпионские варианты предлагались и от имени известных разработчиков. Были они, впрочем, малоэффективными.
- Предлагались различные временные решения проблемы, позволяющие вернуться в удобный статус хотя бы частично. Но, во-первых, это было уже не совсем то, к чему привыкли пользователи. Во-вторых, в случае неудачи с попыткой поставить нужный режим людей снова склоняли к покупке программ «всеобщего взлома».
- Прежние инструкции также продолжали даваться к использованию даже на специализированных ресурсах. Вероятно, таким образом владельцы сайтов поднимали к ним интерес, пытались обеспечить рост посещений.
Черный день для любителей посекретничать не отбил у них желания так или иначе решить вопрос. Мода не пошла на убыль, просто возможностей для ее реализации стало меньше. Но обычные пользователи могли почувствовать себя немного спокойнее — полистать их интимные фото, не оставив следов, стало сложнее: ведь анониму было все равно, сколько человек ему заглядывает в автобусе или метро через плечо.
Стали жить по-новому
Тем не менее вопрос о том, как включить невидимку в ВК на андроиде, не ушел в разряд юмористическо-риторических. Различные решения, в зависимости от качества аппарата и его начинки, можно найти в открытом доступе. Мнения пользователей о них, впрочем, неоднозначны.
Проект Amberfog
Разработчики говорят не только о новом функционале и дизайне, навигации под Google, но и классической системе невидимости: неотображении онлайнового статуса. Также клиентов завлекают надежной защитой данных.
Система обещала:
- Возможность непрерывно быть на связи с теми, с кем это необходимо.
- Не только смотреть, но и лайкать фото, изображения, оставлять комментарии.
- Отслеживать новости в группах.
- Вести диалоги через сообщения.
- Видеть, кто и когда появился в доступе, даже без захода в профиль.
- Превосходство (во всяком случае платной продвинутой версии) над возможностями системы анонимности в ВК.
Имеются и ограничения. Не рекомендуется установка на карту. Для андроида необходима операционная система не хуже 2.1.
Прорвемся с Opera
Скрытый статус можно попробовать получить, используя неполную совместимость различных систем, некоторые особенности их работы. Предлагается, в частности, входить в сеть через браузер Opera (Mini). Заход в ВК может не отфиксироваться, время активности будет указываться от предыдущего посещения.
Предлагается такая последовательность действий:
- На главной странице Mini (внизу) нажать на картинку с цифровыми окнами.
- Кликнуть на вкладку приватного режима. Появится описание его работы.
- Нажать на появившуюся внизу вкладку и войти в ВК.
- Перейти на ресурс, отметив логотип на главной странице Mini.
- Заполнить указанные поля.
- Нажать на «Войти» для попадания в аккаунт.
Способ не стопроцентный. Если убрать себя из вида не получается, рекомендуется старый-новый вариант. Он заключается в оставлении без активности раздела сообщений. Личная сессия официально может оказаться закрытой, а присутствие в сети сохранится.
Возможности скрытого доступа предлагает также неофициальный ВК, некоторые программы-шпионы. Можно и просто создать «левую» страницу. Потеряла анонимность она — сделать новую.
Что будет дальше
Проблема социальной анонимности в сети вовсе не заключается в защите интересов граждан, боящихся показывать даже друзьям свое лицо. Если общая тенденция контроля над интернетом сохранится, в ближайшие годы ограничений только добавится.
Помимо уже введенных правил, стоит ожидать таких нововведений:
- Четкой и открытой привязки личных страниц к конкретному адресу. На телефоне можно будет создать только один аккаунт. Дома число страниц будет ограничено количеством проживающих.
- В профилях будет запрещено использование чужих фотографий и картинок, строго личное фото. Для контроля будут использоваться программы распознавания по типу тех, которые применяются ныне в банках.
- На работе (службе, учебе) пользоваться можно будет только внутренними видами и способами связи (как уже сейчас в некоторых силовых ведомствах). Не только соцсети, но и использование любых мобильных устройств во время исполнения своих обязанностей будут запрещены.
Общая тенденция понятна. Со временем вопрос том, как сделать невидимку в ВК на андроид, каким бы навороченным ни был телефон, окончательно перестанет быть актуальным. Сомнительно, правда, что это остановит тех, кто будет пытаться обойти любые ограничения.
Ужесточение контроля вряд ли быстро уменьшит число любителей подглядывать в замочную скважину. Но жизнь им это, конечно, осложнит. Наверное, это и к лучшему — о нравственном аспекте кажущейся невинной «невидимости» забывать тоже нельзя.
Загрузка …работа с сервером DNS из командной строки.
    УтилитаПри запуске nslookup без параметров, утилита переходит в интерактивный режим, ожидая ввод команд пользователя. Ввод знака вопроса или help позволяет отобразить справку о внутренних командах и опциях nslookup:
Команды nslookup:
(идентификаторы отображаются в верхнем регистре, квадратные скобки «[]» обозначают необязательные параметры)
NAME — печать сведений об узле или домене NAME с помощью сервера по умолчанию
NAME1 NAME2 — та же операция, но в качестве сервера используется NAME2
help или ? — печать сведений о стандартных командах
set OPTION — установить параметр
all — печать параметров, текущего сервера и узла
[no]debug — печать отладочных сведений
[no]d2 — печать полных отладочных сведений
[no]defname — добавить имя домена ко всем запросам
[no]recurse — запрос рекурсивного ответа на запрос
[no]search — использовать список поиска доменов
[no]vc — всегда использовать виртуальную схему
domain=NAME — установить имя домена по умолчанию NAME
srchlist=N1[/N2/. ../N6] — установить домен N1 и список поиска N1,N2 и т.д.
root=NAME — установить корневой сервер NAME
retry=X — установить число повторов X
timeout=X — установить интервал времени ожидания в X секунд
type=X — установить тип запроса (пр. A,AAAA,A+AAAA,ANY,CNAME,MX ,NS,PTR,SOA,SRV)
querytype=X — то же, что и type
class=X — установить класс запроса ( IN (Internet), ANY)
[no]msxfr — использовать быструю зону MS для передачи
ixfrver=X — текущая версия, использующаяся в передаче запросов IXFR
server NAME — установить сервер по умолчанию NAME, используя текущий сервер по умолчанию
lserver NAME — установить сервер по умолчанию NAME, используя первоначальный сервер
root — сделать текущий сервер по умолчанию корневым сервером
ls [opt] DOMAIN [> FILE] — перечисление адресов в домене DOMAIN (необязательно: вывод в файл FILE)
-a — перечисление канонических имен и псевдонимов
-d — перечисление всех записей
-t TYPE — перечисление записей указанного типа RFC (пр. A,CNAME,MX,NS,PTR etc.)
view FILE — сортировка файла «ls» и его просмотр с помощью pg
exit — выход из программы
Примеры использования команды NSLOOKUP
При запуске с некоторыми из выше перечисленных параметров, команда nslookup выполняется в не интерактивном режиме без диалога с пользователем:
nslookup yandex.ru. — выполнить запрос к DNS-серверу, заданному по умолчанию, на разрешение доменного имени yandex.ru. Для уменьшения количества ненужных запросов к серверам имен, имя домена нужно вводить в виде полностью определенного имени (fully qualified domain name) , т.е. с точкой в конце. Если этого не делать, то nslookup будет сначала выполнять запрос на разрешение имени относительно домена того компьютера, на котором она выполняется, т.е. yandex.ru.mydomain.ru если имя локального домена — mydomain.ru.
nslookup -type=mx yandex. ru — то же, что и в предыдущем примере, но с указанием типа запрашиваемой записи -type=mx. Сервер DNS ответит на запрос утилиты nslookup перечислением почтовых серверов, обслуживающих домен yandex.ru
nslookup odnoklassniki.ru 8.8.8.8 — определить IP-адрес узла odnokassniki.ru с использованием DNS-сервера 8.8.8.8 (публичный DNS-сервер Google), вместо DNS-сервера, заданного в настройках сетевого подключения.
nslookup -type=mx -timeout=8 vk.com 208.67.220.220 — отобразить запись MX для домена vk.com из базы данных сервера с IP-адресом 208.67.220.220 (сервер OpenDNS). При выполнении команды, максимальное время ожидания ответа сервера — 8 секунд.
nslookup -type=any -timeout=8 vk.com 208.67.220.220 — то же, что и в предыдущем примере, но выполняется запрос на отображение любых типов записей.
Пример отображаемых данных:
Сервер: 208.67.220.220
Не заслуживающий доверия ответ:
vk. com internet address = 87.240.131.119
vk.com internet address = 87.240.131.99
vk.com nameserver = ns2.vkontakte.ru
vk.com nameserver = ns4.vkontakte.ru
vk.com nameserver = ns1.vkontakte.ru
vk.com nameserver = ns4.vkontakte.ru
vk.com nameserver = ns2.vkontakte.ru
vk.com nameserver = ns1.vkontakte.ru
ns1.vkontakte.ru internet address = 93.186.237.2
ns2.vkontakte.ru internet address = 93.186.224.100
Для разных версий nslookup и разных DNS-серверов, обслуживающих запрос, отображаемая информация может незначительно отличаться. Тот же запрос, сформированный англоязычной версией утилиты nslookup.exe и направленный на обработку DNS-серверу компании Google приведет к отображению следующих данных:
Address: 8.8.8.8
Non-authoritative answer:
vk.com internet address = 87.240.131.120
vk.com internet address = 87. 240.143.244
vk.com
primary name server = ns1.vkontakte.ru
responsible mail addr = ncc.vkontakte.ru
serial = 2013100501
refresh = 3600 (1 hour)
retry = 900 (15 mins)
expire = 604800 (7 days)
default TTL = 900 (15 mins)
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:901
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:902
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:903
vk.com nameserver = ns1.vkontakte.ru
vk.com nameserver = ns2.vkontakte.ru
vk.com nameserver = ns4.vkontakte.ru
vk.com MX preference = 10, mail exchanger = mail.vk.com
vk.com text =»v=spf1 ip4:93.186.224.0/20 ip4:87.240.128.0/18 mx include:aspmx.googlemail.com ~all»
Сообщение «Не заслуживающий доверия ответ:» (Non-authoritative answer: ) говорит о том, что выполняющий запрос DNS-сервер, не является владельцем зоны vk. com т.е. записи для узла vk.com в его базе отсутствуют, и для разрешения имени использовался рекурсивный запрос к другому DNS-серверу. Если отправить запрос DNS-серверу ns1.vkontakte.ru, то будет получен авторитетный ответ (authoritative answer) :
Server: ns1.vkontakte.ru
Address: 93.186.237.2
vk.com
primary name server = ns1.vkontakte.ru
responsible mail addr = ncc.vkontakte.ru
serial = 2013100501
refresh = 3600 (1 hour)
retry = 900 (15 mins)
expire = 604800 (7 days)
default TTL = 900 (15 mins)
vk.com internet address = 87.240.131.118
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:904
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:905
vk.com AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:906
vk.com nameserver = ns4.vkontakte.ru
vk.com nameserver = ns1. vkontakte.ru
vk.com nameserver = ns2.vkontakte.ru
vk.com MX preference = 10, mail exchanger = mail.vk.com
vk.com text = «v=spf1 ip4:93.186.224.0/20 ip4:87.240.128.0/18 mx include:aspmx.googlemail.com ~all»
ns4.vkontakte.ru internet address = 93.186.239.253
ns4.vkontakte.ru AAAA IPv6 address = 2a00:bdc0:ff:4::2
ns1.vkontakte.ru internet address = 93.186.237.2
ns1.vkontakte.ru AAAA IPv6 address = 2a00:bdc0:ff:1::2
ns2.vkontakte.ru internet address = 93.186.224.100
ns2.vkontakte.ru AAAA IPv6 address = 2a00:bdc0:ff:2::2
mail.vk.com internet address = 93.186.236.94
Использование опции отладки (debug) позволяет получить дополнительную информацию, содержащуюся в заголовках запросов
клиента и ответов сервера (время жизни, флажки, типы записей и т.п.):
> server ns1.vkontakte.ru
————
Got answer:
HEADER:
opcode = QUERY, id = 5, rcode = NXDOMAIN
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
ns1.vkontakte.ru, type = A, class = IN
AUTHORITY RECORDS:
-> (root)
ttl = 440 (7 mins 20 secs)
primary name server = a.root-servers.net
responsible mail addr = nstld.verisign-grs.com
serial = 2013101600
refresh = 1800 (30 mins)
retry = 900 (15 mins)
expire = 604800 (7 days)
default TTL = 86400 (1 day)
————
————
Got answer:
HEADER:
opcode = QUERY, id = 6, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
ns1.vkontakte.ru, type = A, class = IN
ANSWERS:
-> ns1.vkontakte.ru
internet address = 93. 186.237.2
ttl = 6350 (1 hour 45 mins 50 secs)
————
Default Server: ns1.vkontakte.ru
Address: 93.186.237.2
> vk.com
Server: ns1.vkontakte.ru
Address: 93.186.237.2
————
Got answer:
HEADER:
opcode = QUERY, id = 7, rcode = REFUSED
header flags: response, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
vk.com, type = ANY, class = IN
————
————
Got answer:
HEADER:
opcode = QUERY, id = 8, rcode = NOERROR
header flags: response, auth. answer, want recursion
questions = 1, answers = 11, authority records = 0, additional = 7
QUESTIONS:
vk.com, type = ANY, class = IN
ANSWERS:
-> vk.com
ttl = 900 (15 mins)
primary name server = ns1. vkontakte.ru
responsible mail addr = ncc.vkontakte.ru
serial = 2013100501
refresh = 3600 (1 hour)
retry = 900 (15 mins)
expire = 604800 (7 days)
default TTL = 900 (15 mins)
-> vk.com
internet address = 87.240.131.99
ttl = 900 (15 mins)
-> vk.com
internet address = 87.240.131.119
ttl = 900 (15 mins)
-> vk.com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:901
ttl = 900 (15 mins)
-> vk.com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:902
ttl = 900 (15 mins)
-> vk.com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:903
ttl = 900 (15 mins)
-> vk.com
nameserver = ns1.vkontakte.ru
ttl = 900 (15 mins)
-> vk. com
nameserver = ns2.vkontakte.ru
ttl = 900 (15 mins)
-> vk.com
nameserver = ns4.vkontakte.ru
ttl = 900 (15 mins)
-> vk.com
MX preference = 10, mail exchanger = mail.vk.com
ttl = 900 (15 mins)
-> vk.com
text = «v=spf1 ip4:93.186.224.0/20 ip4:87.240.128.0/18 mx include:aspmx.googlemail.com ~all»
ttl = 900 (15 mins)
ADDITIONAL RECORDS:
-> ns1.vkontakte.ru
internet address = 93.186.237.2
ttl = 9000 (2 hours 30 mins)
-> ns1.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:1::2
ttl = 9000 (2 hours 30 mins)
-> ns2.vkontakte.ru
internet address = 93.186.224.100
ttl = 9000 (2 hours 30 mins)
-> ns2.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:2::2
ttl = 9000 (2 hours 30 mins)
-> ns4. vkontakte.ru
internet address = 93.186.239.253
ttl = 9000 (2 hours 30 mins)
-> ns4.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:4::2
ttl = 9000 (2 hours 30 mins)
-> mail.vk.com
internet address = 93.186.236.94
ttl = 900 (15 mins)
————
vk.com
ttl = 900 (15 mins)
primary name server = ns1.vkontakte.ru
responsible mail addr = ncc.vkontakte.ru
serial = 2013100501
refresh = 3600 (1 hour)
retry = 900 (15 mins)
expire = 604800 (7 days)
default TTL = 900 (15 mins)
vk.com
internet address = 87.240.131.99
ttl = 900 (15 mins)
vk.com
internet address = 87.240.131.119
ttl = 900 (15 mins)
vk. com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:901
ttl = 900 (15 mins)
vk.com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:902
ttl = 900 (15 mins)
vk.com
AAAA IPv6 address = 2a00:bdc0:3:103:1:0:403:903
ttl = 900 (15 mins)
vk.com
nameserver = ns1.vkontakte.ru
ttl = 900 (15 mins)
vk.com
nameserver = ns2.vkontakte.ru
ttl = 900 (15 mins)
vk.com
nameserver = ns4.vkontakte.ru
ttl = 900 (15 mins)
vk.com
MX preference = 10, mail exchanger = mail.vk.com
ttl = 900 (15 mins)
vk.com
text = «v=spf1 ip4:93.186.224.0/20 ip4:87.240.128.0/18 mx include:aspmx.googlemail.com ~all»
ttl = 900 (15 mins)
ns1.vkontakte.ru
internet address = 93. 186.237.2
ttl = 9000 (2 hours 30 mins)
ns1.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:1::2
ttl = 9000 (2 hours 30 mins)
ns2.vkontakte.ru
internet address = 93.186.224.100
ttl = 9000 (2 hours 30 mins)
ns2.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:2::2
ttl = 9000 (2 hours 30 mins)
ns4.vkontakte.ru
internet address = 93.186.239.253
ttl = 9000 (2 hours 30 mins)
ns4.vkontakte.ru
AAAA IPv6 address = 2a00:bdc0:ff:4::2
ttl = 9000 (2 hours 30 mins)
mail.vk.com
internet address = 93.186.236.94
ttl = 900 (15 mins)
nslookup 8.8.4.4 — отобразить имя узла, соответствующее IP-адресу 8.8.4.4
nslookup -ls -d mydomain.ru. > listdns.txt — отобразить все записи для домена mydomain. ru, обслуживаемого текущим DNS-сервером. Вывод направляется в файл listdns.txt текущего каталога. Задавать абсолютный путь к файлу не следует, поскольку все существующие на данный момент версии nslookup.exe успешно перенаправляют стандартный вывод в файл, только если он располагается в текущем каталоге.
При работе в интерактивном режиме, после старта на экран выводится приглашение к вводу команд — символ «>» . При вводе команд необходимо учитывать регистр символов, например, LS -d mydomain.ru. будет воспринята как ошибочна команда, а ls -D mydomain.ru. — как команда с ошибочной опцией.
Весь список команд CMD Windows1С-Битрикс — BrainPost VK — умная публикация постов Вконтакте
BrainPost VK — умная публикация постов Вконтакте
Модуль BrainPost VK предназначен для автоматического формирования постов для Вконтакте и публикации по заданному расписанию в вашей группе. Модуль подготовит пост, отправит его во Вконтакте вместе со ссылкой на страницу элемента на вашем сайте!Просто выберите нужный инфоблок, задайте расписание, остальное модуль сделает сам!BrainPost VK работает с любой редакцией 1С-БИТРИКС.Статистика по опубликованным постам указывается в Highload блоке.
Описание
Технические данные
- Опубликовано:
- 24.01.2020
- Версия:
- 1.0.0
- Установлено:
- 50 — 99 раз
- Подходящие редакции:
- «Старт», «Стандарт», «Малый бизнес», «Бизнес»
- Адаптивность:
- Нет
- Поддержка Композита:
- Нет
- Совместимо с Сайты24
- Нет
Пользовательское соглашение
Описание
Модуль BrainPost VK предназначен для автоматического формирования постов для Вконтакте и публикации по заданному расписанию в вашей группе. Модуль подготовит пост, отправит его во Вконтакте вместе со ссылкой на страницу элемента на вашем сайте!
Просто выберите нужный инфоблок, задайте расписание, остальное модуль сделает сам!
BrainPost VK работает с любой редакцией 1С-БИТРИКС.
Статистика по опубликованным постам указывается в Highload блоке.
Обсуждения (9)
Обсуждения (9 )
Установка
- Установка модуля осуществляется через маркетплейс на активную лицензию 1С-Битрикс стандартным способом
- Далее нужно Вконтакте создать и настроить приложение (подробная инструкция есть внутри модуля)
- Получить токен Вконтакте для корректной работы (подробная инструкция по получению есть внутри модуля)
- Настроить публикацию в группу, задать расписание
- Выбрать инфоблок для формирования постов, стартовые и финишные фразы.
- Настроить скрипт публикации на CRON
youtube.com/embed/k4kAapwdaOQ» frameborder=»0″ allowfullscreen=»» autoplay=»no»/>
Другие решения разработчика
vk.api — документация Vk 2.0.2
# coding = utf8 импорт журнала импортировать logging.config из vk.logs импортировать LOGGING_CONFIG из vk.utils импортировать stringify_values, json_iter_parse, LoggingSession, str_type из vk.exceptions import VkAuthError, VkAPIError из vk.mixins импортировать AuthMixin, InteractiveMixin ВЕРСИЯ = '2.0.2' logging.config.dictConfig (LOGGING_CONFIG) logger = logging.getLogger ('vk') [docs] класс Session (объект): API_URL = 'https://api.vk.com/method/' def __init __ (self, access_token = None): регистратор.debug ('API .__ init __ (access_token =% (access_token) r)', {'access_token': access_token}) self.access_token = access_token self.access_token_is_needed = Ложь self.requests_session = LoggingSession () self.requests_session. headers ['Accept'] = 'application / json' self.requests_session.headers ['Content-Type'] = 'application / x-www-form-urlencoded' @имущество def access_token (сам): logger.debug ('Убедитесь, что нам нужен новый токен доступа') если сам.access_token_is_needed: logger.debug ("Нам нужен новый токен доступа. Попробуйте его получить.") self.access_token = self.get_access_token () еще: logger.debug ('Использовать старый токен доступа') вернуть self._access_token @ access_token.setter def access_token (self, value): self._access_token = значение если isinstance (значение, str_type) и len (значение)> = 12: self.censored_access_token = '{} *** {}'. format (значение [: 4], значение [-4:]) еще: себя.censored_access_token = значение logger.debug ('access_token =% r', self.censored_access_token) self.access_token_is_needed = не self._access_token def get_user_login (сам): logger. debug ('Ничего не делать, чтобы получить доступ пользователя') def get_access_token (сам): "" " Манекен метод "" " logger.debug ('API.get_access_token ()') вернуть self._access_token def make_request (self, method_request, captcha_response = None): logger.debug ('Подготовить запрос метода API') ответ = себя.send_api_request (метод_request, captcha_response = captcha_response) # todo Заменить на что-то менее исключительное response.raise_for_status () # в одном JSON может быть 2 словаря # например: "{'error': ...} {'response': ...}" для response_or_error в json_iter_parse (response.text): если 'response' в response_or_error: # todo Может ли быть ошибка и ответ одновременно # для ошибки в ошибках: # регистратор.предупреждение (str (ошибка)) return response_or_error ['ответ'] elif 'ошибка' в response_or_error: error_data = response_or_error ['ошибка'] error = VkAPIError (error_data) если error. is_captcha_needed (): captcha_key = self.get_captcha_key (error.captcha_img) если не captcha_key: поднять ошибку captcha_response = { 'sid': ошибка.captcha_sid, 'ключ': captcha_key, } вернуть self.make_request (method_request, captcha_response = captcha_response) elif error.is_access_token_incorrect (): logger.info («Ошибка авторизации. Токен доступа будет удален») self.access_token = Нет вернуть self.make_request (method_request) еще: поднять ошибку def send_api_request (self, request, captcha_response = None): url = self.API_URL + request._method_name method_args = request._api._method_default_args.copy () method_args.update (stringify_values (request._method_args)) access_token = self. access_token если access_token: method_args ['access_token'] = access_token если captcha_response: method_args ['captcha_sid'] = captcha_response ['sid'] method_args ['captcha_key'] = captcha_response ['ключ'] timeout = request._api._timeout ответ = себя.request_session.post (url, method_args, timeout = тайм-аут) ответ на ответ def get_captcha_key (self, captcha_image_url): "" " По умолчанию CAPTCHA вызывает исключение. Перезагрузить это в ребенке "" " return None def auth_code_is_needed (self, content, session): "" " Поведение по умолчанию для 2-AUTH CODE - вызвать исключение. Перезагрузить это в ребенке "" " поднять VkAuthError ('Ошибка авторизации (необходим двухфакторный код)') def auth_captcha_is_needed (self, content, session): "" " По умолчанию CAPTCHA вызывает исключение. Перезагрузить это в ребенке "" " поднять VkAuthError ('Ошибка авторизации (капча)') def phone_number_is_needed (self, content, session): "" " Поведение по умолчанию для НОМЕРА ТЕЛЕФОНА - вызвать исключение. Перезагрузить это в ребенке "" " регистратор.error ('Ошибка авторизации (необходим номер телефона)') поднять VkAuthError ('Ошибка авторизации (необходим номер телефона)') класс API (объект): def __init __ (self, session, timeout = 10, ** method_default_args): self._session = сеанс self._timeout = тайм-аут self._method_default_args = method_default_args def __getattr __ (self, имя_метода): запрос возврата (self, method_name) def __call __ (self, method_name, ** method_kwargs): return getattr (self, method_name) (** method_kwargs) класс Request (объект): __slots__ = ('_api', '_method_name', '_method_args') def __init __ (self, api, имя_метода): себя._api = api self._method_name = имя_метода def __getattr __ (self, имя_метода): запрос возврата (self._api, self._method_name + '.' + method_name) def __call __ (self, ** method_args): self._method_args = method_args вернуть self. _api._session.make_request (сам) класс AuthSession (AuthMixin, Session): проходить класс InteractiveSession (InteractiveMixin, Session): проходить класс InteractiveAuthSession (InteractiveMixin, AuthSession): проходить
Научитесь отлаживать код с помощью GNU Debugger
GNU Debugger, более известный по своей команде, gdb
, представляет собой интерактивную консоль, которая поможет вам шагать по исходному коду, анализировать то, что выполняется, и, по сути, реконструировать то, что идет не так в глючном приложении.
Код неисправен
Чтобы начать работу с GDB, вам понадобится код. Вот пример приложения, написанного на C ++ (нормально, если вы обычно не пишете на C ++, принципы одинаковы для всех языков), взятый из одного из примеров из серии игр в угадывание здесь, на Opensource.com:
#include
#include// srand
#include// printf using namespace std;
int main () {
srand (время (NULL));
int alpha = rand ()% 8;
cout << "Привет, мир." << endl;
int beta = 2;printf («альфа установлена на% s \ n», альфа);
printf ("kiwi is set to is% s \ n", beta);возврат 0;
} // основной
В этом примере кода есть ошибка, но он компилируется (по крайней мере, с GCC 5).Если вы знакомы с C ++, возможно, вы уже видели это, но это простая проблема, которая может помочь новым пользователям GDB понять процесс отладки. Скомпилируйте и запустите, чтобы увидеть ошибку:
$ g ++ -o buggy example.cpp
$ ./buggy
Привет, мир.
Ошибка сегментации
Устранение неполадок, связанных с ошибкой сегментации
Из этого вывода вы можете предположить, что переменная alpha
была установлена правильно, потому что в противном случае вы не ожидали бы строки кода, которая идет после . Конечно, это не всегда так, но это хорошая рабочая теория, и, по сути, это тот же вывод, к которому вы, вероятно, пришли бы, если бы использовали printf
в качестве журнала и отладчика. Отсюда вы можете предположить, что ошибка находится в коде , на некоторой строке после той, которая была успешно напечатана. Однако неясно, находится ли ошибка в следующей строке или несколькими строками позже.
GNU Debugger — это интерактивное средство устранения неполадок, поэтому вы можете использовать команду gdb
для запуска ошибочного кода.Для достижения наилучших результатов вам следует перекомпилировать приложение с ошибками из исходного кода с включенными отладочными символами . Во-первых, посмотрите, какую информацию GDB может предоставить без перекомпиляции:
$ gdb ./buggy
Чтение символов из ./buggy...done.
(gdb) начало
Временная точка останова 1 на 0x400a44
Запуск программы: / home / seth / demo / buggyВременная точка останова 1, 0x0000000000400a44 в main ()
(gdb)
Когда вы запускаете GDB с двоичным исполняемым файлом в качестве аргумента, GDB загружает приложение и затем ждет ваших инструкций. Поскольку вы впервые запускаете GDB для этого исполняемого файла, имеет смысл попытаться повторить ошибку в надежде, что GDB сможет предоставить дополнительную информацию. Команда GDB для запуска загруженного приложения достаточно интуитивно понятна: start
. По умолчанию в GDB встроена точка останова , поэтому при обнаружении основной функции
вашего приложения выполнение приостанавливается. Чтобы разрешить GDB продолжить, используйте команду continue
:
(gdb) продолжить
Продолжаем.
Привет, мир.Программа получила сигнал SIGSEGV, ошибка сегментации.
0x00007ffff71c0c0b в vfprintf () из /lib64/libc.so.6
(gdb)
Никаких сюрпризов: приложение вылетело вскоре после вывода «Hello world», но GDB может предоставить вызов функции, который происходил, когда произошел сбой. Потенциально это может быть все, что вам нужно, чтобы найти ошибку, вызывающую сбой, но чтобы лучше понять особенности GDB и общий процесс отладки, представьте, что проблема еще не прояснилась, и вы хотите копнуть еще глубже. что происходит с этим кодом.
Компиляция кода с отладочными символами
Чтобы получить максимальную отдачу от GDB, вам нужны отладочные символы, скомпилированные в ваш исполняемый файл. Вы можете сгенерировать это с помощью опции -g
в GCC:
$ g ++ -o debuggy example.cpp
$ ./debuggy
Привет, мир.
Ошибка сегментации
Компиляция отладочных символов в исполняемый файл приводит к гораздо большему объему файла, поэтому они обычно не распространяются с дополнительным удобством. Однако, если вы отлаживаете открытый исходный код, имеет смысл перекомпилировать с отладочными символами для тестирования:
$ ls -l * buggy * * cpp
-rw-r - r-- 310 19 февраля 08:30 отладка.cpp
-rwxr-xr-x 11624 19 февраля 10:27 с ошибками *
-rwxr-xr-x 22952 19 февраля 10:53 отладка *
Отладка с помощью GDB
Запустите GDB с загруженным новым исполняемым файлом ( debuggy
, в этом примере):
$ gdb . /debuggy
Чтение символов из ./debuggy...done.
(gdb) начало
Временная точка останова 1 на 0x400a44
Запуск программы: / home / seth / demo / debuggyВременная точка останова 1, 0x0000000000400a44 в main ()
(gdb)
Как и раньше, для продолжения используйте команду start
:
(гдб) начало
Временная точка останова 1 по адресу 0x400a48: отладка файла.cpp, строка 9.
Запуск программы: / home / sek / demo / debuggyВременная точка останова 1, main () в debug.cpp: 9
9 srand (time (NULL));
(гдб)
На этот раз автоматическая точка останова main
может указать, на какой строке GDB остановился и какой код содержит строка. Вы можете возобновить нормальную работу с , продолжить
, но вы уже знаете, что приложение вылетает до завершения, поэтому вместо этого вы можете пошагово выполнять свой код построчно, используя ключевое слово next
:
(gdb) следующий
10 int alpha = rand ()% 8;
(gdb) next
11 cout << "Привет, мир. "<< endl;
(gdb) следующий
Привет мир.
12 int бета = 2;
(gdb) next
14 printf («альфа установлена на% s \ n», альфа);
(gdb) nextПрограмма получила сигнал SIGSEGV, ошибка сегментации.
0x00007ffff71c0c0b в vfprintf () из /lib64/libc.so.6
(gdb)
Из этого процесса вы можете подтвердить, что сбой произошел не при установке переменной beta
, а при выполнении строки printf
. В этой статье ошибка описывалась несколько раз (спойлер: для printf
предоставлен неправильный тип данных), но предположим на мгновение, что решение остается неясным и требуется дальнейшее расследование.
Установка точек останова
После того, как ваш код загружен в GDB, вы можете спросить GDB о данных, которые код уже произвел. Чтобы попробовать интроспекцию данных, перезапустите приложение, снова введя команду start
, а затем перейдите к строке 11. Простой способ быстро добраться до 11 — установить точку останова, которая ищет конкретный номер строки:
(гдб) начало
Отлаживаемая программа уже запущена.
Начать с самого начала? (да или нет) да
Временная точка останова 2 на 0x400a48: отладка файла.cpp, строка 9.
Запуск программы: / home / sek / demo / debuggyВременная точка останова 2, main () в debug.cpp: 9
9 srand (time (NULL));
(gdb) break 11
Точка останова 3 на 0x400a74: файл debug.cpp, строка 11.
После установки точки останова продолжить выполнение с продолжить
:
(gdb) продолжить
Продолжаем.Точка останова 3, main () в debug.cpp: 11
11 cout << "Hello world." << endl;
(гдб)
Теперь вы остановились в строке 11 сразу после установки переменной alpha
и непосредственно перед установкой beta
.
Проведение интроспекции переменных с помощью GDB
Чтобы увидеть значение переменной, используйте команду print
. Значение альфа
случайное в этом примере кода, поэтому ваши фактические результаты могут отличаться от моих:
(gdb) печать альфа
$ 1 = 3
(gdb)
Конечно, вы не можете увидеть значение переменной, которая еще не была установлена:
Использование управления потоком
Чтобы продолжить, вы можете пройти по строкам кода, чтобы добраться до точки, где beta
устанавливается на значение:
(gdb) следующий
Привет, мир.
12 int бета = 2;
(gdb) next
14 printf («альфа установлена на% s \ n», альфа);
(gdb) print beta
3 доллара = 2
В качестве альтернативы вы можете установить точку наблюдения. Точка наблюдения, как и точка останова, — это способ контролировать поток выполнения кода GDB. В этом случае вы знаете, что переменная beta
должна быть установлена на 2
, поэтому вы можете установить точку наблюдения, чтобы предупреждать вас, когда значение beta
изменяется:
(gdb) смотреть бета> 0
Аппаратная точка наблюдения 5: бета> 0
(gdb) продолжить
Продолжаем.Точка останова 3, main () в debug.cpp: 11
11 cout << "Hello world." << endl;
(gdb) продолжить
Продолжить.
Привет, мир.Аппаратная точка наблюдения 5: beta> 0
Старое значение = false
Новое значение = true
main () в debug.cpp: 14
14 printf («альфа установлена на% s \ n», альфа);
(гдб)
Вы можете пошагово выполнить выполнение кода вручную, используя следующий
, или вы можете контролировать выполнение кода с помощью точек останова, точек наблюдения и точек перехвата.
Анализ данных с помощью GDB
Вы можете просматривать данные в разных форматах. Например, чтобы увидеть значение beta
как восьмеричное значение:
(gdb) print / o beta
4 доллара = 02
Чтобы увидеть его адрес в памяти:
(gdb) print / o beta
5 долларов США = 0x2
Вы также можете увидеть тип данных переменной:
(gdb) whatis beta
type = int
Решение ошибок с помощью GDB
Этот вид самоанализа лучше проинформирует вас не только о том, какой код выполняется, но и о том, как он выполняется.В этом примере команда whatis
для переменной дает вам представление о том, что ваши переменные alpha
и beta
являются целыми числами, что может перегружать вашу память примерно на синтаксис printf
, заставляя вас понять, что вместо % s
в ваших операторах printf
вы должны использовать обозначение % d
. Внесение этого изменения заставляет приложение работать должным образом, без более очевидных ошибок.
Особенно неприятно, когда код компилируется, но потом обнаруживает наличие ошибок, но именно так работают самые хитрые ошибки.Если бы их было легко поймать, они не были бы ошибками. Использование GDB — это один из способов их выследить и устранить.
Загрузите нашу шпаргалку
Это факт жизни, даже в самых основных формах программирования, что код содержит ошибки. Не все ошибки настолько вредны, что мешают запуску приложения (или даже компиляции), и не все ошибки вызваны неправильным кодом. Иногда ошибки возникают периодически из-за неожиданной комбинации вариантов, сделанных особенно креативным пользователем.Иногда программисты наследуют ошибки от библиотек, которые они используют в своем собственном коде. Какой бы ни была причина, ошибки практически везде, и задача программиста — найти и нейтрализовать их.
GNU Debugger — полезный инструмент для поиска ошибок. Вы можете сделать с ним гораздо больше, чем я продемонстрировал в этой статье. Вы можете прочитать о его многочисленных функциях с помощью программы чтения GNU Info:
$ инфо gdb
Независимо от того, изучаете ли вы GDB или являетесь в нем профессионалом, никогда не помешает напоминание о том, какие команды вам доступны и каков синтаксис этих команд.
Mesa i965 CI Результаты: kwg_vulkan # 165-mesa = e042d88defa-percheckin / dEQP-VK.subgroups.clustered.compute.subgroupclusteredmul_uvec2_requiredsubgroupsize
Обзор
Оборудование | icl |
---|---|
Архитектура | м64 |
Статус | сбой |
соответствует ожиданиям Указывает, соответствует ли статус теста тому статусу, который CI ожидает от теста | сбой |
Время | 0. 000000 |
См. Также исторические результаты этого теста.
stderr
MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_GetPhysicalDeviceProperties2: игнорируется VkStructureType 1000237000 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_GetPhysicalDeviceImageFormatProperties2: игнорируется VkStructureType 1000147000 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: ошибка: ../src/intel/vulkan/anv_cmd_buffer.c:1121: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: ошибка: ../src/intel/vulkan/anv_image.c:724: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: ошибка: ../src/intel/vulkan/anv_image.c:724: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: ошибка: ../src/intel/vulkan/anv_device.c:3473: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: ошибка:. ./src/intel/vulkan/anv_image.c:724: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: ошибка: ../src/intel/vulkan/anv_device.c:3473: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: ошибка:../src/intel/vulkan/anv_image.c:724: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: ошибка: ../src/intel/vulkan/anv_device. c:3473: VK_ERROR_OUT_OF_HOST_MEMORY MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: отладка: anv_AllocateMemory: игнорируется VkStructureType 1000001003 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите возможность использования sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev. i915.perf_stream_paranoid = 0 MESA-INTEL: предупреждение: поддержка производительности отключена, рассмотрите sysctl dev.i915.perf_stream_paranoid = 0 ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле. ./src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 932 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1072 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 392 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 412 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 628 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 628 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 396 байт в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1492 байта в двоичный файл SPIR-V ПРЕДУПРЕЖДЕНИЕ SPIR-V: В файле ../src/compiler/spirv/spirv_to_nir.c:1069 Украшение не разрешено для членов структуры: SpvDecorationRestrict 1492 байта в двоичный файл SPIR-V deqp-vk:../src/intel/compiler/ibc_to_binary.c:913: ibc_to_binary: утверждение "проверено" не выполнено. pid: 3805
Советы по отладке для Salesforce CLI
Интерфейс командной строки Salesforce предоставляет мощный интерфейс командной строки, который позволяет извлекать и сохранять код с локального компьютера в Salesforce, загружать данные в вашу организацию Salesforce, создавать временные организации, управлять аутентификацией с вашими организациями Salesforce, выполнять развертывания, устанавливать пакеты, автоматизировать ручные задачи и многое другое.
Однако, когда команды не работают, стандартные сообщения об ошибках не всегда так подробны, как вам нужно.Цель этого сообщения в блоге — предоставить несколько методов, которые могут помочь в устранении неполадок, когда команды не работают, а причина не очевидна из сообщения об ошибке, отображаемого в интерфейсе.
1. Точная настройка уровней журнала для создания подробных журналов
Для любой выполняемой команды можно точно настроить уровни журнала для создания более подробных журналов (пример: sfdx force: source: push –loglevel DEBUG). Эти журналы всегда хранятся в папке USER_HOME_DIR / .sfdx / sfdx.log. Когда уровень журнала по умолчанию — ERROR, вы можете выбрать один из следующих вариантов:
- ОШИБКА
- ПРЕДУПРЕЖДЕНИЕ
- ИНФОРМАЦИЯ
- ОТЛАДКА
- TRACE
Эти опции в указанном порядке являются кумулятивными.Это означает, что когда вы выбираете уровень DEBUG, файл журнала также включает сообщения на уровнях INFO, WARN и ERROR.
Если вы используете macOS, измените каталог на домашний каталог, используя cd $ HOME, а затем снова cd в папку .sfdx. Вы найдете файл sfdx.log, если откроете папку .sfdx. Вы можете удалить файл sfdx.log (примечание : не удаляйте другие файлы, поскольку они несут важную информацию и могут нарушать команды ) и выполнить команду в интерфейсе командной строки, и вы увидите, что файл воссоздан со всеми деталями журнала.
При использовании Windows введите% userprofile%, который покажет ваш домашний каталог, а затем измените каталог на него, а затем cd в папку .sfdx.
Если вы откроете файл .sfdx.log с помощью вашего любимого текстового редактора, высока вероятность того, что вы обнаружите более подробные ошибки, которые помогут в дальнейшем устранении неполадок.
2. Получите дополнительные сведения, сохранив папку метаданных (вместе с package.xml), которая создается
При запуске набора команд Salesforce поддерживает временный каталог метаданных вместе с пакетом.xml. Эта папка удобна для повторения неудачных развертываний, если решение заключается в изменении одного из этих XML-файлов метаданных. Обычно папка удаляется автоматически. Однако сохранение этой папки пригодится при устранении неполадок.
Следующие команды приводят к созданию XML метаданных:
-
сила: источник: развертывание
-
force: source: восстановить
-
force: source: delete
-
сила: источник: толкать
-
сила: источник: тяга
-
force: source: convert
-
force: org: create
(если определение временной организации содержит настройки временной организации, а не настройки организации)
Чтобы разрешить сохранение папки, установите переменную среды для проекта.
Как установить переменные среды
Для MacOS: если вы хотите установить переменную среды для сеанса, введите в терминале следующее:
экспорт SFDX_MDAPI_TEMP_DIR = / users / myName / myDXProject / metadata
Обратите внимание, что здесь / users / myName / myDXProject — это ваш путь к проекту DX.
Если вы хотите установить путь навсегда, вам нужно будет добавить его в каталог .bash_profile, выполнив следующие действия:
- В вашем терминале запустите nano ~ /.bash_profile
- Добавьте переменную среды
экспорт SFDX_MDAPI_TEMP_DIR = / users / myName / myDXProject / metadata
- CTRL + X, чтобы выйти из редактора Nano и убедиться, что вы сохранили свои изменения. Не забудьте снова открыть терминал, чтобы изменения вступили в силу.
Если вы пользователь Windows, установите переменные среды, следуя этим инструкциям отсюда.
На снимке экрана ниже показана папка метаданных со всеми подробностями, в которых переменная среды настроена для сохранения метаданных.
Примечание. Иногда вы можете столкнуться с фактическими ошибками интерфейса командной строки, о которых следует сообщить команде интерфейса командной строки Salesforce, обратившись в службу поддержки или разместив сообщение на salesforce.stackexchange.com.
Посмотрите на пример ошибки, которую сообщество обнаружило и с благодарностью исправила Salesforce, как только мы довели ее до сведения.
Наши команды разработчиков специализируются на быстрой доставке продуктов на AppExchange. Узнайте больше на www.codescience.com/services.
Отладка и тестирование Google Analytics
Недавно я отвечал на несколько вопросов по веб-аналитике на StackOverflow.com. Одна из вещей, которую постоянно спрашивают или на что я указываю, — это как тестировать и / или отлаживать вызовы Google Analytics. Хотя это довольно простая задача, похоже, существует изрядное количество заблуждений относительно лучшего способа понять, работает ли ваша реализация GA так, как вы этого ожидаете.
В качестве краткого руководства, вот стандартные шаги, которые мы предпринимаем для правильного сбора данных.
- Проверьте аналитику в реальном времени в интерфейсе отчетов Google Analytics.Если вы еще не настроили фильтры для игнорирования трафика с вашего собственного IP-адреса, вы должны увидеть данные, поступающие в отчеты.
- Используйте функцию отладки Google Analytics, которая дает вам подробный вывод в консоли о том, что именно делает код GA на вашей странице. Это можно сделать двумя разными способами:
- Используйте плагин отладки GA для Chrome
- Активируйте функцию отладки GA, указав analytics_debug.js вместо analytics.js в теге кода страницы GA (это именно то, что плагин отладки GA для Chrome делает автоматически).
- Проверять необработанные HTTP-вызовы на google-analytics.com/collect? и т. д., чтобы точно узнать, какие звонки для отслеживания отправляются в GA. Это самый надежный способ увидеть, что происходит, поскольку иногда аналитика в реальном времени и отладка GA не раскрывают всей истории. Есть множество способов сделать это, в том числе:
- Использование вкладки «Сеть» в Chrome или аналогичных функций в инструментах разработчика выбранного браузера.
- Используйте отладчик / сборщик HTTP, например Fiddler или Charles.(Wireshark также является альтернативой, но для этой цели это немного излишне)
- После сбора некоторых данных в течение нескольких дней вы, безусловно, можете проверить данные в главном интерфейсе отчетности GA и решить, нужно ли вам вносить какие-либо обновления в вашу реализацию.
Проверка необработанных HTTP-вызовов — самый надежный способ, который я обнаружил, для выявления любых проблем в вашей реализации. Он позволяет делать 2 основные вещи:
- Смотрите точно , какие отслеживающие вызовы выполняются, и , когда они также увольняются.
- Посмотрите, какие именно параметры заполняются и когда — это ключ к пониманию данных, которые отправляются в GA.
Чтобы помочь вам понять, что означает каждый из параметров URL в HTTP-вызовах Google Analytics, я подготовил справочный лист на Cheatography.com. Я буду постоянно обновлять его, поэтому проверяйте наличие новых параметров.
Если вам нужна дополнительная помощь по любым вопросам, связанным с Google Analytics и Диспетчером тегов Google, от планирования и внедрения до создания отчетов и панелей управления, свяжитесь с нами, и мы будем рады помочь.Не забывайте, что мы являемся сертифицированными партнерами по GA и GTM и работаем с некоторыми из крупнейших мировых брендов над их цифровой аналитикой (и многими более мелкими тоже!).
Отладка Javaс помощью IntelliJ IDEA
Intellij IDEA — одна из самых популярных IDE, используемых для программирования на Java.
Этот курс является полностью практическим и основанным на примерах исчерпывающим курсом, который поможет вам изучить и освоить основы отладки Java с использованием популярной IDE Intellij IDEA.
Мощный навык отладки на кончиках ваших пальцев
При работе над проектами Java в реальной жизни или изучении языка отладка является ключевым аспектом, который вы должны изучить, чтобы решать проблемы, связанные с программированием, или правильно понимать любой поток приложений. дадут вам прочный фон, чтобы легко изучить и освоить методы и приемы отладки с помощью Intellij IDEA.
Содержание и обзор
Весь курс разбит на следующие категории:
Основные охваченные функции отладки:
Поместите точки останова и запустите программу в режиме отладки
Control выполнение программы во время отладки
Smart Step Into And Run To Cursor
Watch and Evaluate Expressions
Inspect Variables — View переменных значения
Изменить значение переменных в реальном времени во время сеанса отладки
2 Фильтровать массивы и коллекции в переменных или часах
Условная точка останова
Точка останова по исключению
Точки останова по действию
Как управлять точками останова
Возврат
Исключение 9389 Точки наблюдения
Уровень класса Часы
Использование Drop Frame
Охваченные расширенные функции отладки:
Отладка лямбда-выражений и потоковых операций
Отладка веб-службы Spring Boot
Удаленная отладка веб-службы Spring Boot
Прикрепление настраиваемых меток к объектам JVM
Debug Web Project в Tomcat Community с помощью
Debug Web Project в Tomcat Community
Отладка веб-проекта в Tomcat с использованием Intellij IDEA Ultimate Edition
Отладка веб-приложения с использованием подключаемого модуля Maven Tomcat
Веб-проект удаленной отладки в Tomcat с использованием Intellij Community Edition
1
1 Средства визуализации настраиваемых типов данных по запросу
Курс сначала начинается с основ g, а затем медленно переходит к практическим аспектам отладки с простыми примерами.
После того, как будут рассмотрены основные аспекты, объясняются базовые и расширенные функции отладки Eclipse.
Раздел Примеры проблем отладки и их решение посвящен примерам решения проблем в сценариях фиктивных проблем отладки путем применения навыков отладки, которые вы узнали из курса.
К концу этого курса вы овладеете основами, необходимыми для отладки приложений на основе Java с использованием Intellij IDEA.
Легкое расширение для отката и Детерминированное воспроизведение для отладки программного обеспечения
Flashback: легкое расширение для отката и Детерминированное воспроизведение для отладки программного обеспечения Сударшан М.Шринивасан, Шрикант Кандула, Кристофер Р. Эндрюс и Юаньюань Чжоу
{smsriniv, kandula, crandrws, yyzhou}@cs.uiuc.edu
Аннотация:
Надежность программного обеспечения существенно влияет на доступность системы. К сожалению, поиск программных ошибок — очень сложная задача. потому что многие ошибки трудно воспроизвести. При отладке программы было бы очень полезно откатить сбой программы до предыдущей точки выполнения и детерминированно повторно выполнить область кода с ошибками.Однако большая часть предыдущей работы по поддержке отката и воспроизведения была спроектирован так, чтобы выдерживать отказы оборудования или операционной системы, и поэтому слишком тяжелый для мелкозернистого отката и воспроизведения необходим для отладки программного обеспечения.
В этом документе представлены Flashback , легкое расширение ОС, которое обеспечивает детальный откат и воспроизведение, чтобы помочь отладить программное обеспечение. Flashback использует теневые процессы для эффективного отката состояние процесса в памяти и регистрирует взаимодействия процесса с система для поддержки детерминированного воспроизведения.И теневые процессы, и регистрация системных вызовов реализована в упрощенном виде специально разработан для отладки программного обеспечения.
Мы реализовали прототип Flashback в операционной системе Linux. система. Наши экспериментальные результаты с микротестами и реальными приложения показывают, что Flashback добавляет небольшие накладные расходы и может быстро откатить отлаженную программу к предыдущей точке выполнения и детерминированно переиграть с этой точки.
Поскольку быстрый прогресс в области вычислительного оборудования привел к драматическому повышение производительности компьютера, вопросы надежности, ремонтопригодность и стоимость владения становятся все более важный.К сожалению, ошибки в программном обеспечении встречаются как никогда часто, приходится до 40% компьютерной системы отказы [45]. Ошибки программного обеспечения могут привести к сбою производства система, делающая сервисы недоступными. Более того, « тихие » баги, которые необнаруженный запуск может привести к повреждению ценной информации. Согласно Национальный институт стандартов и технологий [48], программное обеспечение ошибки обходятся экономике США примерно в 59,5 миллиардов долларов в год, примерно 0,6% валового внутреннего продукта! Учитывая масштабы этой проблемы, развитие эффективной отладки инструменты обязательно.
Отладка программного обеспечения была в центре внимания многих исследований. Популярный Возможности такого исследования включают обнаружение и анализ данных гонки [7,23,46,63,68,69,74], статические методы на основе компилятора для обнаружения потенциальных ошибок [20,24,31,36,64,76], возможно, с помощью статической проверки управляемых пользователем правила [19,27,81], проверка данных во время выполнения типы для обнаружения некоторых классов связанных с памятью ошибки [41,49] и более обширные проверки во время выполнения для обнаружения более сложной программы ошибки [28,51]. Эти исследования предложили эффективные решения для статического или динамического обнаружения определенных типов программных ошибок.
Несмотря на то, что предыдущие решения показали многообещающие результаты, большинство программные ошибки по-прежнему полагаются на программистов для интерактивной отладки с помощью такие инструменты, как gdb. Интерактивная отладка может быть очень сложной задачей. задача, потому что некоторые ошибки возникают только после нескольких часов или даже дней исполнение. Некоторые из них возникают только при определенной комбинации пользовательский ввод и / или конфигурации оборудования. Более того, некоторые ошибки, такие как как гонки данных, особенно трудно найти, потому что они происходят только с определенной чередующейся последовательностью событий, связанных с синхронизацией.
Эти проблемы мотивируют потребность в поддержке отладки с низкими накладными расходами. что позволяет программистам вернуться к предыдущей точке выполнения и повторно выполнить область кода с ошибками. Детерминированное воспроизведение воссоздает точные условия, которые приводят к ошибка и помогает понять причины ошибки. В большинстве современных средств отладки при возникновении ошибки программе требуется быть перезапущенным с самого начала и может занять часы или даже дней до состояния глючности. Если ошибка связана со временем, ошибка может не происходит при повторном исполнении.Было бы очень полезно, если бы интерактивный отладчик, такой как gdb, может периодически проверять состояние процесса отлаживаемой программы во время ее динамического выполнения. В случае возникновения ошибки программист может запросить GDB выполнить откат к предыдущее состояние, а затем детерминированно воспроизвести программу из этого состояние, чтобы программист мог видеть, как проявляется ошибка, чтобы поймать его первопричину.
Хотя системная поддержка отката и воспроизведения изучалась в прошлого, большинство предыдущих подходов слишком тяжелы, чтобы поддерживать отладка программного обеспечения.Основная причина в том, что эти подходы ориентированы на уцелевшее оборудование или операционную систему неудачи. Таким образом, большинство программ контрольных точек этих систем вторичное хранилище, такое как диск, удаленная память или энергонезависимая память память [3,10,12,34,37,38,39,54,61,77,79,82]. Соответственно, эти системы несут гораздо более высокие накладные расходы. чем это необходимо или допустимо для поддержки отладки программного обеспечения. В отличие от сбоев оборудования / ОС, нам нужно только откатиться и воспроизвести программа, когда она вылетает из-за программных ошибок.Более того, большинство предыдущих системы не могут позволить себе частые контрольные точки из-за высокого накладные расходы, связанные с этими подходами. В результате приложения могут придется откатиться к далекому прошлому (например, 1-2 часа тому назад).
Помимо систем чекпоинтинга, другие работы по поддержке отката — такие в качестве поддержки транзакций для структур данных в оперативной памяти [11,29,40,43,60,62], система восстановление [9,42,65,72] или регистрация и воспроизведение системных событий [6,33,50,66,70] — либо есть проблемы, аналогичные предыдущим системы контрольных точек или требуют, чтобы приложения поддерживали откат.Эти ограничения снижают эффективность этих решений для программная отладка общих программ.
В этой статье мы представляем облегченное расширение ОС под названием Flashback , которое обеспечивает откат и поддержку детерминированного воспроизведения для отладка программного обеспечения. Чтобы эффективно фиксировать состояние в памяти выполняемого процесса, Flashback использует теневых процессов для реплицировать состояние выполнения программы. Кроме того, Flashback также фиксирует взаимодействия между программой и остальной системой — такие как системные вызовы, сигналы и области отображения памяти — чтобы разрешить для последующего детерминированного повторного выполнения.Мы разработали прототип предлагаемого нами решения в операционной системе Linux, реализует подмножество функций. Наши экспериментальные результаты с микротесты и реальные приложения показывают, что наша система мало что накладные расходы и может быстро вернуться к предыдущей точке выполнения.
В качестве примера того, как поддержка детерминированного воспроизведения может использоваться для отладки, мы также исследуем необходимые расширения для gdb, чтобы обеспечить поддержку пользователей для контрольных точек, отката и детерминированных переиграть.Эти расширения позволят программистам откатить программу. в предыдущее состояние, когда что-то пошло не так, и интерактивно воспроизвести область кода с ошибками. При такой поддержке программист делает не нужно перезапускать выполнение программы или беспокоиться о воспроизводимость ошибки.
Эта статья организована следующим образом. Раздел 2 описывает мотивацию и предысторию нашей работы. В разделе 3 представлен обзор Flashback, а также разделы 4 и 5 подробно описывают подробно описать наш подход к откату состояния и детерминированному переиграть.В разделе 6 представлены экспериментальные результаты. В разделе 7 обсуждаются внесенные изменения. в gdb, чтобы контролировать ведение журнала, откат и восстановление изнутри отладчик. Раздел 8 завершает статью краткое обсуждение нашего опыта, а также планы на будущее.
Наша работа строится на двух группах исследований: системная поддержка для отладка и системная поддержка отката. В этом разделе мы обсуждаем тесно связанные работы, проделанные в этих двух направлениях.
Отладка программного обеспечения была предметом значительных исследований и разработка.Существующие подходы в основном включают статические проверка, динамическая проверка во время выполнения и аппаратная поддержка для отладка. Некоторые репрезентативные статические средства проверки времени компиляции были предложено Вагнером [75,76], Луханом [44] Эванс [21], Энглер [19,27,81]. Примеры динамических проверок времени выполнения включают Rational’s Purify [30], KAI’s Assure [35], Lam et. др. DIDUCE [28,51] и несколько другие [41,49,15,53,58,63]. Недавно было предложено несколько методов аппаратной архитектуры. обнаружить ошибки [26,1,14,47,56].
Хотя эти методы времени компиляции, выполнения или аппаратного обеспечения очень полезны для обнаружения определенных типов ошибок, многие ошибки по-прежнему вызывают программист, чтобы полагаться на интерактивные отладчики, такие как gdb. К охарактеризовать связанные со временем ошибки, такие как условия гонки, просто повторный запуск программы с тем же входом может не воспроизвести то же самое ошибка. Более того, некоторые ошибки могут появиться только после запуска программы на несколько часов, что делает процесс отладки сложной задачей. К понять и найти первопричины таких ошибок, очень полезно обеспечить системную поддержку для воспроизведения возникающей ошибки, которая может появляются только для определенной комбинации пользовательских входов и конфигураций или после определенной чередующейся последовательности связанных со временем События.
Один из эффективных способов воспроизвести ошибку — вернуться к предыдущему состояние выполнения в непосредственной близости от ошибочного кода и детерминированно воспроизвести выполнение либо интерактивно внутри отладчика, либо автоматически с тяжелыми приборами. Это требует эффективного откат и механизм детерминированного воспроизведения.
Возможность отката предоставляется во многих системах, включая системы контрольных точек, системы транзакций в оперативной памяти и программное обеспечение омоложение.Контрольно-пропускные пункты широко изучались в прошлом.Контрольные точки позволяет сохранить предыдущее состояние выполнения системы в отказоустойчивое расположение. Когда система выходит из строя, программа может перезапустите с последней контрольной точки на другом компьютере или на той же машине после устранения причины неисправности. Поскольку большинство системы контрольных точек предполагают, что вся система может выйти из строя, данные контрольной точки хранятся либо в диски [12,34,37,38,39,79,61], удаленная память [3,54,82] и энергонезависимая или постоянная память [10,80]. Как в результате большинство систем контрольно-пропускных пунктов связаны с высокими накладными расходами и не могут позволить себе брать частые контрольно-пропускные пункты.Поэтому они слишком тяжелые, чтобы поддержка отката для отладки программного обеспечения.
Системы, обеспечивающие поддержку транзакций для данных в оперативной памяти структуры также позволяют приложениям возвращаться к предыдущему выполнению точка [11,29,43,60,62]. Например, Лоуэлл и Чен разработали систему, которая обеспечивает транзакцию поддержка в восстанавливаемой виртуальной памяти Rio Vista система [11,43]. Большинство из этих подходов требует приложения, которые будут написаны с использованием программирования транзакций модель; следовательно, их нельзя удобно использовать для отладка общей программы.
Борг и др. Разработали систему [5], которая обеспечивает устранение неисправностей. толерантность за счет поддержания неактивного процесса резервного копирования. В случае сбой системы, процесс резервного копирования может взять на себя выполнение процесс, который вылетает. Процесс резервного копирования поддерживается в актуальном состоянии предоставляя ему все сообщения, которые активный процесс получили. Их реализация основана на предположении, что два процессы, начиная с одного и того же начального состояния, будут выполнять идентично при получении того же ввода.Хотя это предположение справедливо для систем, основанных на восстановлении, это не случай для общего программного обеспечения, так как состояние остальной системы может измениться за это время. Детерминированное воспроизведение процесса требует, чтобы он получал одни и те же недетерминированные события во время повторы, как и во время оригинального запуска. Эти события включают ответы на системные вызовы, доступ к общей памяти, сигналы, сетевые сообщения и другие.
Вычисления, ориентированные на восстановление [25,52], являются недавним исследовательская инициатива, в которой используется подход, согласно которому ошибки неизбежно, поэтому поддержка восстановления после ошибок необходима для разработка и проверка высокодоступного программного обеспечения.Хотя это интересный подход к доступности программного обеспечения, большинство исследований в обновление программного обеспечения на данный момент [4,32,57] сосредоточились на перезапуске всего приложения, а не мелкозернистый откат. Программное обеспечение только для сбоев [8] является новейший подход к разработке программного обеспечения, улучшающий доступность программного обеспечения с помощью компонентов, которые могут дать сбой и перезапустите быстро вместо того, чтобы стремиться к отказоустойчивости. Эти исследования сосредоточиться больше на минимизации среднего времени восстановления (MTTR), чем на программном обеспечении отладка.
Фельдман и Браун разработали систему программирования отладка [22], которая периодически проверяет память состояние процесса, отслеживая страницы, затронутые процессом. Они предлагают использовать эту систему для перезапуска программы и всестороннего ведение журнала пути выполнения. Но их механизм предполагает изменения в компилятор, загрузчик, стандартная библиотека и ядро. Он отслеживает все доступ к памяти через инструментарий кода, и, таким образом, этот подход очень тяжелый. Кроме того, они не обеспечивают детерминированного воспроизведения; поэтому некоторые ошибки могут не проявиться при последующих повторное исполнение.
Руссинович [59] предлагает облегченный подход к регистрации недетерминированный доступ к общей памяти путем простого воспроизведения чередующийся порядок процессов, разделяющих память детерминированно. Приложение оснащено инструментарием для получения детализированные счетчики команд программного обеспечения, и ОС должна записывать расположение переключателей контекста. Этот метод потенциально может быть используется FlashBack для поддержки воспроизведения совместно используемой памяти многопроцессорная программа.
ReVirt [17] — это новый подход к анализу вторжений, который инкапсулирует приложения в виртуальной ОС, которая сама работает как процесс в гостевой ОС.Этот метод уменьшает размер доверенная вычислительная база (TCB) и позволяет вести точные журналы гостевая ОС. Flashback существенно отличается от ReVirt. Первый, поддержка отладки должна проверять состояние приложения на шкалы времени (минуты), которые на несколько порядков меньше, чем в ReVirt (дни). Во-вторых, в отличие от ReVirt, который борется со злонамеренными злоумышленникам, регистрируя «все», Flashback нужно регистрировать только те изменения, которые производятся отлаживаемым приложением и внешними событиями, которые влияют на его работу.
Ограничения с существующей системой поддержки отката мотивируют потребность в новом легком, мелкомасштабном откате и детерминированном Решение replay, специально разработанное для отладки программного обеспечения.
Flashback предоставляет три основных примитива для отладки: Checkpoint () , Discard (x) и Replay (x) .
- stateHandle = Checkpoint () : при этом вызове система фиксирует состояние выполнения в текущей точке.Дескриптор состояния возвращается, чтобы программа могла позже использовать его для отката.
- Discard (stateHandle) : при этом вызове захваченный состояние выполнения, заданное параметром stateHandle , отбрасывается. В программа больше не может вернуться в это состояние.
- Replay (stateHandle) : после этого вызова процесс откатывается вернуться к предыдущему состоянию выполнения, указанному в stateHandle и выполнение детерминированно воспроизводится, пока не достигнет точка, в которой вызывается Replay () .
Чтобы предоставить вышеуказанные примитивы, Flashback использует тень . обрабатывает для эффективного захвата состояния выполнения в памяти процесс в указанной точке выполнения. Основная идея тени процесс состоит в том, чтобы разветвить новый процесс в указанной точке выполнения и этот новый процесс поддерживает копию выполнения процесса состояние в основной памяти. После создания теневого процесса он немедленно приостановлено. Если требуется откат, система убивает текущий активный процесс и создает новый активный процесс из теневой процесс, зафиксировавший указанное состояние выполнения.С Flashback не пытается восстановиться после сбоев системы или оборудования. сбой, нет необходимости сохранять теневой процесс на диск или другое постоянное хранилище. Это снижает накладные расходы на контрольно-пропускной пункт. процесс значительно. Кроме того, копирование при записи используется для дальнейшего уменьшить накладные расходы.
Хотя наш метод контрольных точек позволяет сохранять в памяти состояние процесс, который нужно восстановить, процесс может не видеть тот же набор открытых файловые дескрипторы или сетевые соединения во время повторного выполнения.Даже если состояние файловых дескрипторов может быть воспроизведено, это все еще громоздкая задача восстановить содержимое файла в исходное состояние и гарантировать, что сетевые подключения будут отвечать точно так же, как в оригинальном исполнении. Точно так же во время воспроизведения это может быть нежелательно позволять процессу снова влиять на внешнюю среду путем, скажем, удаления файлов или изменения их содержимого.
Для поддержки детерминированного воспроизведения процесса отката мы применяем подход, при котором мы записываем все взаимодействия, которые выполняемый процесс связан с окружающей средой.Во время воспроизведения записанный информация используется для обеспечения повторного выполнения « идентично » оригинальному тиражу. Когда запускается контрольная точка используя примитив контрольной точки, в дополнение к захвату состояние выполнения в памяти, система также записывает взаимодействия между процессом и окружающей его средой. Во время воспроизведения ранее собранная информация используется, чтобы дать процессу впечатление , что внешняя среда точно реагирует как это было во время первоначального исполнения, и что это влияет на окружающая среда точно так же.
Теневые процессы могут использоваться вместе с детерминированным механизм воспроизведения либо в среде отладки, такой как gdb, либо через явные вызовы отлаживаемой программы:
- Интерактивная отладка: Один из возможных сценариев использования: где платформа отладки может периодически фиксировать состояние выполнение процесса путем вызова контрольной точки (аналогично вставка точек останова, например, в gdb). Если произошла ошибка, затем программист может проинструктировать отладчик откатить выполнение в ранее захваченное состояние, указав время более раннего пропускной пункт.
- Явные контрольные точки и откат: Альтернативное использование сценарий заключается в том, что программист берет на себя управление, когда контрольные точки взято в коде. На рисунке 1 показан пример программа, в которой программист вставил явные вызовы к контрольная точка, воспроизведение и сброс примитивов.
Поддержка автоматической контрольной точки / отката в интерактивном отладчике удобно и не требует изменения исходного кода программы. На с другой стороны, давая программисту явный контроль над контрольные точки / откаты позволяют более интеллектуально и осмысленно генерация контрольной точки.
На рисунке 1 показана программа, в которой программист вызывает контрольную точку в строке 1. Если операция чтения в строке 6 сбой, программист может вернуться к состоянию выполнения, зафиксированному в строка 1. Чтобы охарактеризовать ошибку, выполнение от строки 1 до строку 6 можно детерминированно воспроизвести, подключив интерактивный отладчик или переключение в режим профилирования с обширным приборы.Если строка 6 завершается успешно, контрольная точка сбрасывается.
Flashback создает контрольные точки процесса, реплицируя представление процесса в операционной системе в памяти. Этот снимок процесса, известный как теневой процесс , приостанавливается сразу после создания и хранится в процессе состав. Теневой процесс представляет собой пассивное состояние выполнение процесса в предыдущей точке, и может использоваться для раскрутки выполнение процесса путем замены нового состояния выполнения на теневое состояние и начало выполнения в обычном режиме.Если теневое состояние больше не нужно, процесс может его отбросить.
Создание теневого процесса для запущенного процесса, событие, которое мы называется захват состояния , достигается путем создания новой тени структура процесса в ядре и инициализация этой структуры с помощью содержание структуры исходного процесса. Штат захваченная информация включает в себя память процесса (стек, куча), регистры, таблицы файловых дескрипторов, обработчики сигналов и другое состояние в памяти связанный с процессом.Тогда указатель на эту теневую структуру хранится в исходной структуре процесса. Новое представление Процесс с его теневым процессом показан на рисунке 2.
Вызовы контрольной точки, сброса и воспроизведения либо автоматически генерируется инфраструктурой отладки через определенные промежутки времени, или вставлены программистом в исходный код (как показано в примере в предыдущем разделе). В случае сброса система сбрасывает указанное теневое состояние. Если запрошена контрольная точка, система создает новую тень текущего состояния и сохраняет ее.В случае отката, процесс откатывает состояние выполнения до ранее созданный теневой процесс. Фигура 2 иллюстрирует влияние этих примитивов на состояние процесс.
Можно поддерживать два или более теневых процесса для исполняющий процесс.Множественные теневые процессы полезны для прогрессивный откат и повторное выполнение во время отладка [78]. В некоторых случаях, когда возникает ошибка происходит откат только к самой последней точке выполнения перед воспроизведения может быть недостаточно, чтобы выявить корень ошибки, потому что он может произошли до этой точки казни. Следовательно, необходимо для дальнейшего отката и детерминированного перезапуска с более ранней точка исполнения. Также есть возможность откатиться к той же тени несколько раз и вызовет дополнительные контрольные точки во время переиграть.
Чтобы уменьшить накладные расходы, состояние теневого процесса поддерживается с помощью копирование при записи. Другими словами, захват государства происходит через создание карты текущего состояния в памяти для копирования при записи. Когда создается теневой процесс, виртуальная память процесса помечены как доступные только для чтения. Первая запись на любую страницу активным процессом запустит создание копии старых данных. Этот Оптимизация имеет несколько преимуществ. Во-первых, пора создать тень значительно уменьшается за счет устранения необходимости копирования возможно большое количество состояния памяти.Во-вторых, теневой процесс занимает мало места (в памяти). В-третьих, несколько теней, созданных на разные точки выполнения не нуждаются в хранении дубликатов копий штат. Наконец, значительное перекрытие страниц памяти между теневой процесс и активный процесс сводят к минимуму влияние на пейджинговое поведение процесса из-за сброса / воспроизведения состояния. Однако во время выполнения записывает в защищенную от копирования при записи память. основного процесса влечет за собой накладные расходы. К счастью, наш экспериментальный результаты, представленные в разделе 6, показывают, что эти накладные расходы незначительны.
Особого внимания требует откат многопоточного процесса. Этот потому что в многопоточной среде несколько компонентов состояние процесса неявно разделяется между всеми потоками, которые принадлежат тот же процесс. Например, потоки, реализованные с использованием pthread пакет в Linux, общая память, файловые дескрипторы и обработчики сигналов друг с другом. Единственными частными состояниями потока являются пользовательское пространство (и ядро) стеки. Такое неявное совместное использование значительно усложняет откат. потому что поток больше не может вернуться к исходному состоянию версии теневого состояния, не влияя на выполнение других потоки.
Есть два подхода к поддержке детального отката многопоточные программы. Один из них — захватить состояние процесса для весь процесс и откатить все потоки до предыдущего выполнения точка. Второй подход — отслеживать зависимости потоков, такие как Зависимости чтения-записи памяти и чтения-записи файлов и только откат те темы, которые зависят от ошибочных резьба [2,16,18,67,70].
Flashback использует первый подход для поддержки отката многопоточные программы.Другими словами, лежащая в основе система фиксирует состояние выполнения всех потоков процесса в пропускной пункт. Точно так же, когда происходит откат, Flashback восстанавливает состояние выполнения всех потоков, возвращаясь к первозданному копия общего состояния. Это позволяет поддерживать согласованное состояние среди всех потоков. Примитивы синхронизации потоков, такие как получение / снятие блокировок и семафорные операции также неявно откат.
Наш подход имеет несколько преимуществ перед альтернативой для программного обеспечения. отладка, даже если откатить все потоки процесса, когда только один из них обнаруживает ошибку, может показаться неэффективным.Во-первых, наши подход проще, потому что он не требует сложной логики для отслеживать зависимости потоков. Отслеживание зависимостей потоков очень сложно, потому что одновременный доступ к общим память не обрабатывается программным обеспечением или каким-либо специализированным кешем контроллер согласованности. Для отслеживания зависимостей требуется либо оборудование. поддержка или оснащение двоичного кода приложения для уведомления операционная система о совместном использовании данных. Логика отслеживания зависимостей добавляет накладные расходы к безошибочному выполнению, а также подвержен ошибкам.Во-вторых, чтобы охарактеризовать синхронизацию потоков или данных, может быть более информативным откатить все потоки и детерминированно повторно выполнить все потоки шаг за шагом интерактивно. Кроме того, неэффективность отката всех потоки встречаются только при возникновении неисправностей — менее распространенный случай, в то время как отслеживание зависимостей, если оно выполняется динамически, приведет к накладным расходам на общий случай.
3 Реализация в Linux
Мы модифицировали Linux 2.4.22 ядро , добавив три новых системные вызовы — checkpoint (), discard () и replay () для поддержки отката и воспроизведения. Ядро обрабатывает эти функции как описано ранее. Накладные расходы этих систем вызывают нормальный процесс. выполнение является важным фактором в нашей реализации.
Чтобы зафиксировать теневое состояние, мы создаем новый блок управления процессом (task_struct в терминологии Linux) и инициализируем его копией собственная структура вызывающего процесса. Эта копия предполагает создание карты копирования при записи по всей памяти процесса путем создания новый mm_struct , file_struct и signal_struct .Содержимое регистра текущего контекста выполнения, когда оно было в последний раз в пользовательском пространстве копируются в новый блок управления и, наконец, стек ядра нового блока управления инициализируется вручную, так что теневой процесс, когда выполняется, продолжает выполнение, возвращаясь из системный вызов контрольной точки с другим возвращаемым значением.
Процедура захвата состояния отличается от операции fork в несколько способов. Основное отличие состоит в том, что после операции вилки вновь созданный процесс виден остальной части системы.Для Например, количество модулей увеличивается, чтобы отразить тот факт, что дочерний процесс также использует одни и те же модули. Вновь созданный процесс добавлен в списки выполнения планировщика и готов к работе. Запланированное. Напротив, теневой процесс создается только для поддержание состояния. Это не видно остальной части системы и не участвует в планировании.
После захвата теневого состояния вызывающий процесс возвращается из системный вызов и продолжает выполнение как обычно, с теневым изображением буксируемый.Любые изменения, внесенные в состояние после КПП, покидают теневое изображение в первозданном виде.
Вызов системного вызова discard () удаляет тень процесса. image и освобождает все ресурсы, находящиеся в нем. Система replay () call, с другой стороны, отбрасывает ресурсы текущего изображения и перезаписывает блок управления процессом ранее захваченным теневое изображение. Поскольку карта памяти текущего процесса изменяется во время вызова таблицы страниц, соответствующие новому mm_struct , загружаются при вызове switch_mm .
Незаметным результатом восстановления теневого изображения является то, что системный вызов replay () никогда не возвращается к вызывающему. Как только shadow становится активным для вызывающего абонента, обратный адрес для вызов replay () потерян (он был частью спекулятивного состояния), заменяется вместо этого на адрес возврата контрольной точки () вызов, который соответствует состоянию, когда процесс откатывается к.
Когда мы реализовали поддержку отката для многопоточных программ в Linux, мы столкнулись со многими проблемами из-за дизайна Linux thread, на котором основана наша реализация: pthreads.В этом thread, существует взаимно однозначное соответствие между пользовательским пространством и потоки пространства ядра, то есть каждый поток пространства пользователя имеет исполняемый файл аналог процесса внутри ядра. Государственное разделение достигается за счет использование системного вызова clone для создания облегченных процессов которые разделяют доступ к памяти, файловым дескрипторам и обработчикам сигналов среди прочего. Соответствие POSIX в отношении доставки сигналов (и других реквизитов) обеспечивается созданием потока LWP менеджер, который является родителем всех потоков (LWP), связанных с процесс.В то время как взаимно-однозначное сопоставление позволяет библиотеке потоков полностью игнорировать проблему планирования между потоками на user-space, при откате возникает несколько сложностей.
Напомним, что когда один поток пытается обработать событие контрольной точки, мы необходимо фиксировать состояние всех других потоков этого процесса. Поскольку каждый поток пользовательского пространства сопоставляется с потоком ядра, другой потоки могут выполнять системные вызовы или могут быть заблокированы внутри ядро ожидает асинхронных событий (sleep- SIGALRM, disk IO и т. д.). Захват переходного состояния таких потоков может легко привести к несогласованность состояний при откатах, например, откат в спящее состояние , когда соответствующий таймер ядра уже истек . Сложно уловить состояние контекст выполнения из другого контекста выполнения.
В настоящее время мы ищем решение этой проблемы путем явного выявление таких проблемных сценариев и манипулирование пользовательским пространством и стеки ядра, чтобы гарантировать, что прерванный системный вызов повторно выполняется при откате.В частности, потоки, заблокированные в системные вызовы имеют контрольную точку , как будто они вот-вот начнутся выполнение этого прерванного системного вызова.
Обратите внимание на очевидные простые решения, позволяющие обойти эту проблему. например, использование межпроцессного взаимодействия или явного барьера синхронизация до захвата состояния не применяется. в В первом случае механизмы IPC, такие как сигналы и каналы, увеличивают задержка события захвата состояния, потому что их обработка обычно отложенный и часто недетерминированный.Барьерная синхронизация на с другой стороны, приведет к тому, что обработка события захвата состояния будет задерживается до тех пор, пока событие не будет сгенерировано во всех потоках процесса, что может быть нереалистичным в некоторых приложениях.
Чтобы детерминированно воспроизвести выполнение процесса из предыдущее состояние выполнения, мы должны убедиться, что во время повторного выполнения процесс не видит разницы в своем взаимодействии с среда. Например, если процесс прочитал файл и получил определенный массив байтов, во время воспроизведения процесс должен получить тот же массив байтов и возвращаемое значение, что и раньше, хотя содержимое файла, возможно, уже было изменено.
Flashback не гарантирует точно такое же выполнение во время воспроизведения, что и во время первоначального пробега. Вместо этого Flashback производит только впечатление к отлаживаемому процессу, выполнение и взаимодействие с окружающая среда выглядит идентичной той, что была во время первоначального запуска. это трудно обеспечить такое же исполнение, потому что внешний среда, такая как сетевые подключения или состояние устройства и т. д., вне контроля операционной системы. Пока Flashback таким же образом взаимодействует с отлаживаемым процессом, с очень высоким Вероятно, ошибка может быть воспроизведена при воспроизведении.
Процесс в Flashback может работать в одном из двух режимов — log и повтор . В режиме журнала система регистрирует все взаимодействия. процесса с окружающей средой. Эти взаимодействия могут происходить через вызовы системных вызовов, отображение памяти, разделяемую память в многопоточные процессы и сигналы. Процесс переходит в режим журнала когда вызывается примитив контрольной точки. В режиме воспроизведения ядро обрабатывает системные взаимодействия процесса, вызывая функции, имитирующие эффект исходного системного вызова призыв.Режим воспроизведения выбирается при воспроизведении вызывается примитив. В этом режиме Flashback обеспечивает взаимодействие между воспроизводимым процессом и ОС такое же, как было зарегистрировано во время первоначального пробега.
Регистрация и воспроизведение различаются для разных типов системных вызовов:
- Связано с файловой системой — такие вызовы, как открытие, закрытие, чтение, запись, поиск
- , связанные с виртуальной памятью, например выделение памяти, mmap и т. Д.
- Связанные с сетью — такие как создание сокетов, опрос, отправка, получение и т. Д.
- Управление процессом — например, exec, fork, exit, wait
- Связанные с межпроцессным взаимодействием — например, создание очередей сообщений и именованных каналов и управление ими.
- Вспомогательные функции — например, получение времени суток.
При моделировании эффекта системного вызова Flashback должен гарантировать что значения, возвращаемые системным вызовом, идентичны тем вернулся во время первоначального исполнения. Кроме того, оригинал системный вызов может возвращать некоторые « скрытые » значения, изменяя память регионы, на которые указывают аргументы-указатели.Например, read () системный вызов загружает данные из файловой системы в буфер задается одним из параметров. Эти побочные эффекты также необходимо быть захваченным Flashback. Точное воспроизведение системного вызова таким образом требует Flashback для регистрации всех возвращаемых значений, а также побочные эффекты. Хотя несколько утомительно из-за особого внимания требуется каждому системному вызову для обработки его конкретных аргументов, это поддержка может быть легко предоставлена для большого количества системных вызовов.
В Flashback мы перехватываем системные вызовы, вызываемые процессом во время его исполнение.Для этого мы заменяем обработчик по умолчанию на каждый системный вызов с функцией, которая выполняет фактическое ведение журнала и воспроизведите, как показано на рисунке 3. В режиме регистрации функция вызывает исходный вызов, а затем регистрирует возвращаемые значения как а также побочные эффекты. В режиме воспроизведения функция проверяет, подтвердите, что тот же вызов повторяется снова, а затем те же побочные эффекты и возвращает зарегистрированное возвращаемое значение.
Заметное исключение из обхода реальных системных вызовов во время воспроизведения. предназначен для вызовов, связанных с управлением памятью, таких как отображение памяти и управление кучей.В этой ситуации мы не можем подделать выделение памяти. — если процесс обращается к области памяти, которую мы подделали распределения, то это приведет к ошибке сегментации. Этот проблема возникает из-за того, что при выделении и освобождении памяти с помощью системный вызов brk (), к нему можно получить доступ через прямой присвоения переменных. Изменения, внесенные в ячейки памяти, не приводят к любые постоянные изменения в системе; т.е. состояние захватывается обработать исключительно контрольную точку. Однако, как мы вскоре обсудим, это может не относиться к файлам, которые были отображены в память.
После обработки системных вызовов большая часть исходного процесса казнь можно воспроизвести. Например, воспроизводимый процесс может читать данные из файлов, как это было раньше, даже если эти файлы могут на самом деле были изменены или могут даже не существовать в системе больше. Точно так же он будет получать сетевые пакеты в исходном виде. делал с удаленных машин. Что касается процесса, то он считает, что эти события происходят так же, как и раньше, с точки зрения как фактических данных, которыми обмениваются, так и относительного времени асинхронного События.
Linux поддерживает два разных типа разделяемой памяти для межпроцессного взаимодействия. связь — System V IPC и BSD mmap. Эти реализации позволяют процессы для совместного использования одного фрагмента памяти путем сопоставления общей памяти на соответствующие им области памяти. BSD mmap позволяет процессам отображать ранее открытый файл в область его памяти, после чего он может доступ к файлу с помощью простых инструкций по назначению памяти. Когда запрашивается разделяемый сегмент, ядро заставляет управление памятью блок (MMU) для генерации ошибки страницы каждый раз, когда ранее не использовался доступ к секции этой области памяти.В ответ на страницу ошибка, ядро загружает одну страницу данных из файла и считывает ее в память процесса.Файл может быть отображен как частный или общий . Любой изменения, внесенные в файлы с частным отображением, видны только этому процессу и не приводят к изменению файла. С другой стороны, файлы, которые отображаются как общие, могут быть изменены, когда процесс записывает в область памяти. Кроме того, для общих файлов изменения, внесенные в файл процессы будут немедленно видны другим процессам, у которых есть сопоставил тот же регион файла.Обеспечение воспроизведения для общей памяти создает проблемы, поскольку процесс может получить доступ к общей памяти без каких-либо системные вызовы, что затрудняет отслеживание изменений в общей памяти и подделать их позже.
Одним из простых решений для работы с файлами с отображением в памяти является создание копий. страниц, которые возвращаются при ошибке первой страницы в область памяти сопоставлен с файлом. Во время воспроизведения запросов на создание карт памяти области памяти отображаются в фиктивные файлы, а ошибки страниц обрабатываются возврат сохраненных копий страниц.Из-за ленивого подхода к подкачке запросов используется Linux, только те страницы, к которым осуществляется доступ во время выполнения, нуждаются в для копирования, что значительно снижает накладные расходы. Такой подход будет не работает, когда одна и та же область файла отображается как общая область несколькими процессами, каждый из которых вносит изменения в регион. Этот подход работает для файлов, которые были сопоставлены как частные, а также общие сопоставления, в которых все изменения в файл вносятся процессом отлаживается.
Обработка общих файловых сопоставлений с несколькими процессами, записывающими в файл представляет собой более сложную проблему и требует, чтобы ядро принудительно ошибка страницы для каждого доступа к общей области процессом, воспроизводится вместо первого доступа, как в предыдущем случае.А Возможное усовершенствование решения для ведения журнала — установка доступа права данной страницы последнему процессу, чтобы получить к ней доступ, и, следовательно, только ошибка, когда другой процесс получил доступ к странице после этого. Этот Таким образом, несколько последовательных чтений или обновлений потребуют только одного дорогостоящего исключение вместо многих. Однако во время воспроизведения он все равно будет требуется для сбоя для каждого доступа, так как другие процессы могут не быть вокруг больше не вносить свои изменения.
В Flashback на данный момент реализовано простое решение описано ранее.Несмотря на предлагаемые улучшения для общего доступа файловые карты с несколькими авторами, мы считаем, что эффективное решение для решения этой проблемы потребуется поддержка основных архитектура. С общей памятью можно справиться, используя аналогичные механизмы.
Хотя описанные выше методы работают для приложений с единый поток управления, воспроизведение позы многопоточных приложений дополнительные задачи. Регистрация изменений, внесенных многопоточным приложение включает в себя регистрацию изменений каждого потока отлаженный процесс.Во время воспроизведения чередование общей памяти доступы и события должны соответствовать исходной последовательности.
Обеспечение того, чтобы несколько потоков были запланированы в одном и том же относительном порядок во время воспроизведения — другая проблема. Для многопоточных приложений работает на однопроцессорной системе, мы предлагаем принять подход описан в [13] для детерминированного воспроизведения. Основная идея для записи информации о расписании потоков во время исходное исполнение и используйте эту информацию во время воспроизведения, чтобы такое же чередование между исполнениями потоков.Поскольку эта реализация также будет в ядре, расписание физических потоков прозрачно и может использоваться вместо информации о расписании логических потоков. предложен в [13]. Мы реализуем это в будущем в инструмент, возможно, с поддержкой механизмов архитектурного уровня такие как описанные в [55].
Сигналы используются для уведомления процесса о конкретном событии или для заставить процесс выполнить специальный код обработки, когда событие обнаружено во время его выполнения.Сигналы могут быть отправлены в процесс либо другим процессом, либо самим ядром. Сигналы асинхронные и проактивно доставляются процессу ядром. Они могут быть доставлены процессу в любое время. Сигналы представляют собой проблема для детерминированного воспроизведения, потому что сигналы асинхронны события, влияющие на выполнение процесса. Механизм воспроизведения должен гарантировать, что сигналы доставляются точно в одни и те же точки при повторном исполнении как в исходном исполнении.Детерминированное воспроизведение сигналов может быть выполнено с использованием подхода предложенный Slye и Elnozahy [66], хотя Flashback не в настоящее время поддерживает воспроизведение сигнала.Механизм, изложенный в их работе использует счетчик команд для записи времени между асинхронные события. Счетчик команд включен в большинство современных процессорные системы сегодня. При поступлении сигнала система создает журнал запись для него, которая включает значение счетчика инструкций, поскольку последний вызов системного вызова. Во время воспроизведения Flashback проверяет, если следующая запись в журнале соответствует сигналу. Если да, то это инициализирует счетчик инструкций временем от текущего системный вызов до сигнала.Когда ловушка создается из-за тайм-аут, ядро доставляет сигнал процессу.
Мы реализовали прототип механизма воспроизведения Flashback в Linux-2.4.22. Прототип обрабатывает воспроизведение системных вызовов, а также файлы с отображением памяти в ограниченной степени. В Linux процесс в пользовательском пространстве вызывает системный вызов, загружая номер системного вызова в регистр eax и необязательные аргументы в другие регистры, а затем вызывает запрограммированное исключение с вектором 128. Обработчик этого исключение, обработчик системного вызова, выполняет несколько проверок, а затем запускает функция, индексированная в массиве sys_call_table номер системного вызова .Наконец, он возвращает результаты, полученные из этого действие для пользовательского процесса.
Мы использовали syscalltrack [71], инструмент с открытым исходным кодом. что позволяет перехватывать системные вызовы для различных целей, например как логирование, так и блокировка. Ядро инструмента реализовано в модуль ядра, который « захватывает » таблицу системных вызовов, заменяя обработчики по умолчанию для некоторых системных вызовов со специальными функции. Вызовы системных вызовов можно фильтровать на основе нескольких такие критерии, как идентификатор процесса вызывающего процесса, а также значения для конкретных аргументов.Системные вызовы, которые необходимо регистрировать обрабатываются несколькими способами. С одной стороны, специальная функция может зарегистрировать вызов системного вызова и позволить вызову пройти исходному обработчику, а другой может заблокировать систему вызовите вызов и верните ошибку пользовательскому процессу. Настоящий поведение специальной функции контролируется с помощью правил, которые могут быть загружен в ядро.
В нашей реализации мы добавили новый тип действия, особый функция может выполнять, а именно действие AT_REPLAY для воспроизведения.Это действие проверяет, соответствует ли вызов системного вызова вызову, который первоначально созданный процесс, затем устанавливает возвращаемое значение в соответствии с зарегистрированный вызов, а также оказывает те же побочные эффекты на аргументы как прежде. Делая это, он обходит фактический обработчик системного вызова для некоторые системные вызовы и переопределяют его поведение с симуляцией функция. Для других системных вызовов, таких как вызов brk, Flashback позволяет обрабатывать системные вызовы исходным системным вызовом обработчик, поскольку выделение памяти необходимо производить даже во время воспроизведения.
Мы оцениваем наш прототип реализации Flashback, используя микротесты, а также реальные приложения. Данные о сроках, которые мы были получены на машине Pentium IV 1,8 ГГц с 512 КБ L2 кеш и 512 МБ ОЗУ.
Чтобы выполнить очень простую оценку производительности отката возможности, мы инструментировали контрольную точку (), discard () и системные вызовы replay ().Затем мы запустили небольшую программу, которая многократно вызывает checkpoint (), выполняет несколько простых обновлений и затем либо отбрасывает контрольную точку, вызывая discard (), либо откат, вызвав replay ().
На рис. 4 (а) показано время для трех основные операции: контрольная точка, сброс и воспроизведение. КПП принимает около 25-1600 секунд, поскольку количество обновлений состояния между двумя последовательные контрольные точки варьировались от 4 КБ до 400 МБ. С момента создания теневой процесс включает создание карты копирования при записи, стоимость составляет пропорционально размеру памяти, занятой процессом.Точно так же стоимость сброса или воспроизведения тени пропорциональна размер памяти, измененный процессом.
Стоимость сброса (воспроизведения) также прямо пропорциональна количество страниц в соответствующем состоянии контрольной точки (текущий государственный). Это связано с тем, что и сброс, и воспроизведение включают удаление одна карта копирования при записи. Наши результаты показывают, что сброс и повтор около 28-2800 с, когда читается вся память, и между 28-7500 с при записи всей памяти данных.Выше затраты в последнем случае связаны с тем, что ядро должно возвращать большой количество страничных фреймов в его списке свободной памяти, когда теневое состояние упал / восстановлен. Типичные приложения, конечно, не изменят все страницы в их адресном пространстве между контрольными точками, и поэтому затраты операций сброса и воспроизведения будут ближе к нижнему пределу диапазона, показанного на рисунке 4 (б).
Важной целью нашей инфраструктуры отката является обеспечение минимальное влияние на нормальную производительность приложения.Поэтому мы рассмотрите данные для checkpoint () и discard () подробнее важнее, чем для replay (). Это потому, что последний вызывается только при возникновении ошибок и, следовательно, не будет частью обычное поведение. Несмотря на это, накладные расходы, связанные с вызов отката такой же низкий, как и для освобождения теневого состояния. Это многообещающе, поскольку указывает на то, что мы можем восстановить состояние выполнения так быстро, как сброс контрольной точки общего случая.
Чтобы оценить накладные расходы на ведение журнала, мы написали простой тест программа, которая использует два потока, чтобы изолировать влияние накладные расходы на ведение журнала.В программе родительский поток разветвляется и создает ребенок. Затем он загружает правила для входа в фреймворк и уведомляет ребенка, чтобы он начал вызывать системные вызовы. Правила позволяют ядро для фильтрации вызовов системного вызова на основе идентификатора процесса ребенок.
При регистрации системных вызовов, которые имеют побочные эффекты в областях памяти, таких как как read, stat и getsockopt, Flashback также необходимо записать содержимое буфера или структуры. Таким образом, что касается накладные расходы на ведение журнала, есть две группы системных вызовов, которые вызывают побочные эффекты для некоторых областей памяти, а также те, которые просто возвращают значение после выполнения намеченного действия.Мы относимся к первому классу системных вызовов как буфер-копирование (BC), а вторая группа как без копирования (NC). Для системных вызовов ЧПУ нет необходимости записывать содержимое буферов; только идентификатор системного вызова и возвращаемые значения будут хватит.
Чтобы изучить накладные расходы на каждый системный вызов из-за взлома и регистрации, мы вызывали системные вызовы чтения и записи несколько раз, постепенно увеличение количества обращений. В каждом вызове количество прочитанные или записанные байты составляют 4 КБ.Для каждого запуска мы начинаем с чистого файловый кеш, чтобы кешировать системный вызов накладные расходы согласованы. На рисунках 5 показаны накладные расходы, связанные с механизмом песочницы. Накладные расходы из-за песочница происходит из-за лишней косвенности системных вызовов навязанный Flashback. Вместо того, чтобы обрабатываться напрямую системой обработчики вызовов, запросы системных вызовов должны проходить через фильтры и механизм регистрации. Увеличение накладных расходов линейно с количеством системные вызовы для обоих системных вызовов.Разница в наклоне между две линии на графиках представляют дополнительные системные вызовы накладные расходы из-за регистрации. Это около 30 микросекунд на в среднем.
Чтобы оценить влияние копирования буферов на ведение журнала накладные расходы, мы неоднократно вызывали системные вызовы чтения и записи, постепенно увеличивая количество прочитанных или записанных байтов с 4 КБ до 2 МБ. Фактическое количество системных вызовов в этом случае невелико. На рисунке 6 показаны накладные расходы при изменении количество прочитанных или записанных данных.Накладные расходы на системные вызовы BC и NC сопоставимо, и дополнительное копирование буферов не кажется накладывать дополнительные накладные расходы. Это потому, что содержимое журнала буферизируется и записывается на диск асинхронно. В этих экспериментах кэш диска был нагрет, так как все данные для файлов были предварительно загружены перед фактическим исполнением. Таким образом, значения отражают чтение и пишет только с участием кеша.
На рисунке 7 показаны накладные расходы на пространство. из-за регистрации вызовов BC и NC.Как и ожидалось, рост размер файла журнала линейно зависит от количества системных вызовов, хотя наклон больше для BC, поскольку каждый раз записывается больше данных. время.
Чтобы протестировать нашу реализацию захвата состояния на реалистичной окружающей среды, мы измеряем производительность с помощью хорошо известных Веб-сервер Apache . Мы оцениваем накладные расходы системы для обоих многопроцессорная версия и многопоточная версия Apache. Наша оценка служит для демонстрации двух вещей: во-первых, этот мелкозернистый откат поддержка возможна и может быть применена к реальным приложениям; а также во-вторых, влияние на производительность при обычном выполнении минимально.
Во всех описанных здесь экспериментах веб-сервер ограничен сетью и обслуживает данные по всей сети пропускная способность 100 Мбит / с. Мы используем эти эксперименты, чтобы показать, что стандартные машины (1,8 МГц, 512 МБ ОЗУ) имеют достаточно свободных циклов ЦП чтобы обеспечить детальный откат, не влияя на восприятие клиентом представление. Сервер проверяется несколько раз (обычно трижды) при обработке каждого запроса. По сути, мы создаем контрольная точка непосредственно перед чтением HTTP-запроса с вновь принятого сокет перед обработкой действительного HTTP-запроса от существующего подключения и перед записью HTTP-ответа на разъем.Таким образом, в любой момент Flashback поддерживает столько теней, сколько images как общее количество запросов, обрабатываемых сервером. Все точки данных в этом разделе были усреднены по трем прогонам.
Сервер Apache может быть настроен для работы в многопроцессорном или многопоточный режим. В первом случае Apache поддерживает пул рабочих. процессы для запросов на обслуживание. Каждый рабочий процесс представляет собой отдельный поток а количество рабочих в пуле динамически адаптируется в зависимости от оценка нагрузки. Однако в последнем Apache использует гораздо меньший пул рабочих процессов, каждый рабочий процесс состоит из несколько потоков, реализованных пакетом pthread .Мы здесь представлены показатели производительности для обеих конфигураций Apache сервер. В этом эксперименте контрольные точки веб-сервера проверяют свое состояние на прибытие запроса на страницу, обрабатывает запрос и отклоняет КПП. Эти результаты отражают накладные расходы на захват состояния. Поскольку Flashback в настоящее время не поддерживает воспроизведение многопоточного выполнения и разделяемой памяти, мы отключили ведение журнала для воспроизведения во время этих эксперименты.
Для тестирования веб-сервера мы используем HTTP-запрос, генерирующий клиентское приложение, WebStone [73], которое отправляет последовательные запросы к одному веб-серверу.Каждый запрос составляет выборка одного файла, случайно выбранного из заранее заданного « рабочий набор ». В рабочий набор вошли файлы разного размера. от 5 КБ до 5 МБ, но большинство запросов составляли выборку 5 КБ. Приложение, генерирующее запрос, разветвляет заранее заданный номер. клиентских процессов, каждый из которых отправляет серию случайных запросов к веб-серверу. Сервер работал на стандартной частоте 1,8 ГГц. Машина Pentium IV, подключенная к клиенту через LAN 100 Мбит / с. Производительность была измерена с точки зрения пропускной способности, совокупного времени отклика и нагрузки на сервер ПРОЦЕССОР.Во всех описанных здесь экспериментах сервер работал на полная пропускная способность сети 100 Мбит / с.
Мы сравниваем веб-сервер Apache на прототипе системы с базовая система под управлением исходной версии Linux. На рисунке 8 показаны пропускная способность и время отклика в Flashback и базовая система с Apache, работающим в многопроцессорном режиме режим. Из графиков видно, что значимых разница между воспринимаемой клиентом пропускной способностью и временем отклика. Когда клиентов мало, у Flashback на 10% меньше пропускная способность, хотя среднее время отклика такое же, как базовая система.Однако, когда количество клиентов увеличивается, разница между базовой линией и Flashback исчезает. В некоторых случаях, Flashback работает даже лучше, чем базовая система. Мы считаем эти небольшие различия находятся в пределах ожидаемой экспериментальной дисперсии, и пришли к выводу, что влияние поддержки отката на производительность Apache незначительно.
На рисунке 9 показаны результаты для многопоточности. версия Apache. Как и ожидалось, накладные расходы, накладываемые Flashback на многопоточное исполнение немного ниже, чем у многопроцессорная версия, о чем свидетельствуют показатели производительности, которые более в большинстве случаев точно соответствуют друг другу.Эти более низкие накладные расходы прямой результат меньшего количества эффективных системных вызовов, потому что когда один поток подвергается событию захвата, состояние всех других потоков равно автоматически захватывается. Последующие события захвата на другом потоки этого процесса рассматриваются как nops в течение всего срока службы этого теневого процесса. Следовательно, количество необходимых событий захвата намного меньше.
Хотя производительность системы, воспринимаемая клиентом, остается почти незатронутым, ядро выполняет дополнительную работу каждый раз, когда контрольная точка инициирован.Конечно, это не бесплатно. Для количественной оценки стоимости, мы отслеживали среднюю загрузку ЦП на машине, на которой веб сервер. Используемая нами метрика измеряет среднее количество процессов. ожидание в очереди выполнения в течение последней минуты, что является оценкой загрузка системы, поскольку она статистически фиксирует количество времени, в течение которого процесс тратит на очередь выполнения. График 10 эти результаты для многопроцессорной и многопоточной версий. В графики демонстрируют накладные расходы на захват теневого состояния, которые в нашем оценка происходит очень часто (один раз каждый запрос, полученный сервер).Обратите внимание, что даже если загрузка ЦП сервера увеличивается в 2-4 раза, клиент воспринимает производительность, в обоих данных доставленных байтов и времени ответа остается без изменений. Мы утверждаем, что экспериментальная установка реалистична, поскольку современные веб-серверы часто ограничены пропускной способностью сети и имеют резервные циклы ЦП.
Как в многопроцессорной, так и в многопоточной конфигурациях загрузка ЦП значительно увеличивается. В однопоточном случае дополнительная нагрузка составляет довольно высоко. Это связано с тем, что многопроцессорный веб-сервер Apache использует набор отдельных процессов Unix для обработки веб-запросов, каждый из который теперь фиксирует теневое состояние при обработке запроса.в многопоточная версия, событие захвата состояния происходит раз и навсегда потоки выполнения, потому что мы фиксируем состояние всех потоков, в массовом порядке , каждый раз при взятии КПП. Меньшее число системных вызовов и меньший размер захваченного состояния (на одного рабочего thread) вместе вносят свой вклад в многопоточную конфигурацию, демонстрируя лучшая загрузка ЦП, чем многопроцессорная конфигурация.
Используя Flashback, довольно просто включить поддержка контрольных точек, отката и детерминированного воспроизведения в Утилита отладки, такая как gdb .
Мы модифицировали gdb для поддержки трех новых команд — контрольной точки, откат и сброс для создания контрольных точек для поддержки отката и детерминированное воспроизведение отлаженных программ. Программисты могут настроить точки останова в местах, где они могут захотеть создать контрольные точки. В эти точки останова, увидев состояние программы, они могут выберите создание новой контрольной точки с помощью команды контрольной точки. Они также могут отказаться от более ранних контрольных точек, тем самым освобождая систему. ресурсы, связанные с этими контрольными точками, с помощью команды discard команда.Если они обнаружат, что состояние системы непоследовательно, они могут вернуться к предыдущей контрольной точке с помощью команды отката.
Используя Flashback, GDB может автоматически принимать периодические контрольные точки состояния выполняемого процесса. Новые команды добавляются в пользовательский интерфейс отладчика, чтобы программисты могли включить или отключить автоматическое установление контрольных точек во время выполнения отлаженная программа. Программисты также могут контролировать частоту контрольно-пропускные пункты. Это освобождает программиста от необходимости вставлять точки останова в соответствующих местах кода и явное принятие контрольно-пропускные пункты.
Чтобы включить контрольные точки в GDB, мы внесли изменения в компонент обработки целевой системы и пользовательский интерфейс составные части. Компонент обработки целевой системы обрабатывает основные операции, связанные с фактическим контролем выполнения программы, стековый анализ кадров и манипулирование физической целью. Этот компонент обрабатывает запросы точки останова программного обеспечения, заменяя выполнение программы с ловушкой. Во время выполнения ловушка вызывает исключение, которое дает управление в GDB.Пользователь может выбрать контрольную точку в это время. gdb делает это, выполняя системный вызов контрольной точки передача идентификатора отлаживаемого процесса. Аналогично для rollback и replay, gdb использует системные вызовы rollback и replay соответственно.
Для автоматической контрольной точки, помимо этих изменений, gdb поддерживает таймер, который отслеживает время с момента последнего пропускной пункт. Тайм-аут таймера может быть установлен пользователем. Когда происходит тайм-аут, GDB проверяет процесс.
В этой статье мы представили облегченное расширение ОС под названием Flashback. для поддержки детализированного отката и детерминированного воспроизведения для цель отладки программного обеспечения. Flashback использует теневой процесс для эффективно фиксировать состояния процесса в памяти при различном исполнении точки. Для поддержки детерминированного ответа Flashback регистрирует все взаимодействия. отлаживаемой программы со средой выполнения. Результаты наших реализация прототипа на реальных системах показывает, что наш подход имеет небольшие накладные расходы и возможность быстрого отката программ.
Помимо отладки программного обеспечения, нашу систему также можно использовать для улучшения доступность программного обеспечения за счет постепенного отката и повторного выполнения избежать кратковременных ошибок [78]. Кроме того, наши подход может быть расширен для предоставления облегченных моделей транзакций, которые требуется только атомарность, но не постоянство.
Мы находимся в процессе объединения Flashback с аппаратной архитектурой. поддержка отката и детерминированного воспроизведения [56] для дальнейшего уменьшить накладные расходы. Мы также оцениваем Flashback с большим количеством Приложения.Flashback в настоящее время работает только для программ, работающих на одиночная машина. Мы изучаем способы расширить его для поддержки распределенные клиент-серверные приложения путем комбинирования с методами по данным Elnozahy et al. [18].
Будет выпущен Flashback, включающий исправления как для Linux, так и для gdb. сообществу открытого исходного кода, чтобы другие исследователи / разработчики могли Воспользуйтесь преимуществом Flashback в интерактивной отладке.
Мы хотели бы поблагодарить доктора Сринивасана Сешана, пастыря за статью, за полезные предложения и комментарии.Мы также благодарим анонимных рецензентов за полезные отзывы и группа Opera за полезные обсуждения, а также Джагадисан Сундаресан, Пьер Сальверда и Ариджит Гош за их вклад в проект.
- 1
- С. В. Адве, М. Д. Хилл, Б. П. Миллер и Р. Х. Б. Нетцер.
Обнаружение гонок данных в системах со слабой памятью.
В Труды 18-го ежегодного международного симпозиума по Компьютерная архитектура , страницы 234-243, 1991. - 2
- Алвиси и Марзулло.
Компромиссы при реализации протоколов регистрации причинно-следственных сообщений.
В PODC: 15-й симпозиум ACM SIGACT-SIGOPS по принципам распределенных вычислений , 1996. - 3
- К. Амза, А. Кокс, У. Цваенепол.
Стратегии репликации данных для обеспечения отказоустойчивости и доступности на товарные кластеры.
Proc. Международной конференции по надежным системам и Сети., 2000. - 4
- А. Боббио и М. Серено.
Мелкозернистые программные модели омоложения.
In IEEE International Computer Performance и надежность Симпозиум , 1998. - 5
- А. Борг, Дж. Баумбах и С. Глейзер.
Система сообщений, поддерживающая отказоустойчивость.
В Труды 9-го симпозиума ACM по операционным системам Принципы (SOSP) , том 17, страницы 90-99, 1983. - 6
- A. Borg, W. Blau, W. Graetsch, F. Herrmann и W. Oberle.
Отказоустойчивость под UNIX.
Транзакции ACM в компьютерных системах , 7 (1): 1-24, февраль.1989 г. - 7
- К. Бояпати, Р. Ли и М. Ринард.
Типы владения для безопасного программирования: предотвращение скачков данных и тупиковые ситуации.
В Объектно-ориентированное программирование, системы, языки и Applications (OOPSLA) , ноябрь 2002 г. - 8
- Г. Кандеа и А. Фокс.
Программное обеспечение Crashonly.
В Труды 9-го семинара по актуальным вопросам эксплуатации Systems , май 2003 г. - 9
- М. Кастро и Б.Лисков.
Упреждающее восстановление в византийской отказоустойчивой системе.
В OSDI , 2000. - 10
- П. М. Чен, Д. Э. Лоуэлл и Г. В. Данлэп.
Проверка скидок: прозрачное восстановление с низкими накладными расходами для общего Приложения.
Технический отчет, Мичиганский университет, факультет электротехники Инженерия и информатика, июль 1998 г. - 11
- П. М. Чен, В. Т. Нг, С. Чандра, К. Эйкок, Г. Раджамани и Д. Лоуэлл.
Файловый кеш Rio: сбой всех сохранившихся операционных систем.
В Седьмая Международная конференция по архитектурной поддержке Языки программирования и операционные системы , страницы 74-83, Кембридж, Массачусетс, 1-5 октября 1996 г. ACM Press. - 12
- Ю. Чен, Дж. С. Планк и К. Ли.
Clip: инструмент для создания контрольных точек для параллельных программ с передачей сообщений.
В Протоколах конференции ACM / IEEE 1997 г. по суперкомпьютерам (CDROM) , страницы 1-11.ACM Press, 1997. - 13
- Дж. Чой и Х. Шринивасан.
Детерминированное воспроизведение многопоточных приложений Java.
В Труды Симпозиума SIGMETRICS по параллельным и Распределенные инструменты , страницы 48-59, август 1998 г. - 14
- Ж.-Д. Чой и С.Л. Мин.
Race Frontier: воспроизведение гонок данных в параллельной программе Отладка.
В Труды третьего симпозиума ACM SIGPLAN по принципам & Практика параллельного программирования , страницы 145-154, 1991. - 15
- К. Д. Купер, М. В. Холл, Р. Т. Худ, К. Кеннеди, К. С. Мак-Кинли, Дж. М.
Меллор-Крамми, Л. Торцон и С. К. Уоррен.
Среда параллельного программирования ParaScope.
Протоколы IEEE , 81 (2): 244-263, 1993. - 16
- О. П. Дамани и В. К. Гарг.
Как эффективно и асинхронно восстанавливаться, когда не удается оптимизм.
В Международной конференции по распределенным вычислительным системам , страницы 108-115, 1996. - 17
- Г. В. Данлэп, С. Т. Кинд, С. Чинар, М. А. Басрай и П. М. Чен.
Revirt: включение анализа вторжений через ведение журнала виртуальной машины и воспроизвести.
Обзор операционных систем ACM SIGOPS , 35 (SI): 211-224, 2002. - 18
- Э. Н. М. Эльнозахи, Л. Алвиси, Ю. Ван и Д. Б. Джонсон.
Обзор протоколов отката-восстановления в системах передачи сообщений.
Вычислительные исследования ACM (CSUR) , 34 (3): 375-408, 2002. - 19
- Д. Р. Энглер, Д. Ю. Чен и А. Чоу.
Ошибки как несогласованное поведение: общий подход к выводу ошибок в системном коде.
В симпозиуме по принципам операционных систем , страницы 57-72, 2001 г. - 20
- Д. Эванс, Дж. Гуттаг, Дж. Хорнинг и Ю. М. Тан.
Lclint: инструмент для использования спецификаций для проверки кода.
На симпозиуме по основам программной инженерии , Декабрь 1994 г. - 21
- Д.Эванс и Д. Ларошель.
Повышение безопасности с помощью расширяемого облегченного статического анализа.
Программное обеспечение IEEE , 19 (1): 42-51, 2002. - 22
- С. Фельдман и К. Браун.
Игорь: Система отладки программ через обратимое выполнение.
ACM SIGPLAN Notices, Workshop on Parallel and Distributed Отладка , 24 (1): 112-123, январь 1989 г. - 23
- К. Фланаган и С. Н. Фройнд.
Обнаружение гонки на основе типов для Java.
Уведомления ACM SIGPLAN , 35 (5): 219-232, 2000. - 24
- К. Фланаган, К. Лейно, М. Лиллибридж, К. Нельсон, Дж. Сакс и Р. Стата.
Расширенная статическая проверка для java.
В PLDI , 2002. - 25
- G. Candea et. al.
Сокращение времени восстановления в небольшой рекурсивно перезапускаемой системе.
В DSN , 2002. - 26
- К. Гарачорлоо и П. Б. Гиббонс.
Обнаружение нарушений последовательной непротиворечивости.
В Труды третьего ежегодного симпозиума ACM по параллельному Алгоритмы и архитектуры , страницы 316-326, 1991. - 27
- С. Халлем, Б. Шельф, Ю. Се и Д. Энглер.
Система и язык для построения специфичных для системы статических анализов.
В Материалы конференции ACM SIGPLAN 2002 по программированию язык проектирования и реализации (PLDI) , 2002. - 28
- S. Hangal и M. S. Lam.
Отслеживание программных ошибок с помощью автоматического обнаружения аномалий.
В Proc. 2002 г. Конф. Программная инженерия , страницы 291-301, Орландо, Флорида, май 2002 г. - 29
- Р. Хаскин, Ю. Малачи, Г. Чан.
Управление восстановлением в ртути.
Транзакции ACM в компьютерных системах (TOCS) , 6 (1): 82-108, 1988 г. - 30
- Р. Гастингс и Б. Джойс.
Purify: быстрое обнаружение утечек памяти и ошибок доступа.
В зимний USENIX , 1992. - 31
- К.Хавелунд и Т. Прессбургер.
Проверка моделей Java-программ с помощью java pathfinder, 1998. - 32
- Ю. Хуанг, К. Кинтала, Н. Колеттис и Н. Фултон.
Обновление программного обеспечения: анализ, модуль и приложения.
В FTCS-25 , 1995. - 33
- Ю. Хуанг и Ю. Ван.
Почему оптимистичная регистрация сообщений не использовалась в телекоммуникациях системы.
В Труды Международного симпозиума 1995 г. Отказоустойчивые вычисления (FTCS) , страницы 459-463, июнь 1995 г. - 34
- Д. Джонсон и В. Зваенпол.
Восстановление в распределенных системах с использованием оптимистичного журнала сообщений и контрольно-пропускные пункты.
В материалах Седьмого ежегодного симпозиума ACM по принципам of Distributed Computing , страницы 171-181, август 1988 г. - 35
- Корпорация КАИ-Интел.
Заверить.
URL: http: //developer.intel.com/software/products/assure/. - 36
- С. Кумар и К. Ли.
Использование проверки модели для отладки прошивки сетевого интерфейса.
В году Пятый симпозиум по проектированию операционных систем и Реализация (OSDI) , 2002. - 37
- К. Ли, Дж. Нотон и Дж. Планк.
Параллельная контрольная точка в реальном времени для параллельных программ.
В Второй симпозиум ACM SIGPLAN по принципам и практике Параллельное программирование , страницы 79-88, Сиэтл, Вашингтон, март 1990 г. - 38
- К. Ли, Дж. Нотон и Дж. Планк.
Эффективный метод контрольной точки для мультикомпьютеров с червоточиной маршрутизация.
Международный журнал параллельного программирования , 20 (3): 159-180, Июнь 1991 г. - 39
- К. Ли, Дж. Нотон и Дж. Планк.
Параллельная контрольная точка с низкой задержкой для параллельных программ.
Транзакции IEEE в параллельных и распределенных вычислениях , 1994. - 40
- Б. Лисков.
Распределенное программирование на argus.
Сообщения ACM , 31 (3): 300-312, март 1988 г. - 41
- А.Логинов, С. Х. Йонг, С. Хорвиц, Т. В. Репс.
Отладка посредством проверки типов во время выполнения.
В Фундаментальные подходы к разработке программного обеспечения , стр. 217-232, 2001. - 42
- Д. Э. Лоуэлл, С. Чандра и П. М. Чен.
Изучение прозрачности отказов и ограничений общего восстановления.
В OSDI , 2000. - 43
- Д. Э. Лоуэлл и П. М. Чен.
Бесплатные операции с Rio Vista.
В Труды 16-го симпозиума по операционным системам Принципы (SOSP-97) , том 31,5 из Обзор операционных систем , страницы 92-101, Нью-Йорк, октябрь.5-8 1997. ACM Press. - 44
- М. Лухан, Дж. Р. Гурд, Т. Л. Фриман и Дж. Мигель.
Устранение проверок границ массива Java при наличии косвенное обращение.
В материалах Труды совместной конференции ACM Java Grande-Iscope , страницы 76-85, 2002. - 45
- Э. Маркус и Х. Стерн.
Чертежи для высокой доступности.
Джон Уилли и сыновья, 2000. - 46
- Дж. М. Меллор-Крамми и М. Л. Скотт.
Синхронизация без конкуренции.
В Труды 4-й Международной конференции по Архитектурная поддержка языков программирования и операционных систем , стр. 269-278, апрель 1991 г. - 47
- С. Л. Мин, Ж.-Д. Чой.
Эффективная схема обнаружения аномалий доступа на основе кэша.
В Труды Четвертой Международной конференции по Архитектурная поддержка языков программирования и операционных систем , стр. 235-244, 1991. - 48
- Национальный институт стандартов и технологий (NIST), Министерство торговли.
Ошибки программного обеспечения стоят США. экономия 59,5 миллиардов долларов в год.
NIST News Release 2002-10, 2002. - 49
- Г. К. Некула, С. Макпик и В. Веймер.
CCured: модификация устаревшего кода с сохранением типов.
В Симпозиум по принципам языков программирования , стр. 128-139, 2002. - 50
- Р. Х. Б. Нецер.
Оптимальная трассировка и воспроизведение для параллельной отладки с общей памятью программы.
В PADD , 1993. - 51
- Дж.Oplinger и M. S. Lam.
Повышение надежности программного обеспечения с помощью спекулятивных потоков, октябрь 2002 г. - 52
- Д. А. Паттерсон и др. al.
Вычисления, ориентированные на восстановление (roc): мотивация, определение, методы и тематические исследования.
Калифорнийский университет в Беркли CS Tech. Отчет, UCB // CSD-02-1175, 2002. - 53
- Д. Перкович и П. Дж. Келехер.
Протокол-ориентированный подход к обнаружению гонок на лету.
Транзакции IEEE в параллельных и распределенных системах , 11 (10): 1058-1072, 2000. - 54
- Дж. С. Планк, К. Ли и М. А. Пуенинг.
Бездисковая контрольная точка.
Транзакции IEEE в параллельных и распределенных системах , 9 (10): 972 — ??, 1998. - 55
- М. Првулович и Й. Торреллас.
Reenact: использование механизмов предположений на уровне потоков для отладки данных скачки в многопоточных кодах.
В Труды 30-го ежегодного симпозиума по компьютерам Архитектура , 2003 г. - 56
- М.Првулович и Й. Торреллас.
ReEnact: использование спекуляций на уровне потоков для отладки программного обеспечения; An Приложение к гонке данных в многопоточных кодах.
В Труды 30-го ежегодного международного симпозиума по Компьютерная архитектура (ISCA) , июнь 2003 г. - 57
- Р. Родригес, М. Кастро, Б. Лисков.
BASE: Использование абстракции для повышения отказоустойчивости.
В Труды 18-го симпозиума ACM по операционной системе Принципы , страницы 15-28, Банф, Канада, окт.2001 г. - 58
- М. Ронссе и К. Д. Босшере.
RecPlay: полностью интегрированная практическая система записи / воспроизведения.
Транзакции ACM в компьютерных системах , 17 (2): 133-152, 1999. - 59
- М. Руссинович и Б. Когсуэлл.
Воспроизведение для одновременных недетерминированных приложений с общей памятью.
В Труды конференции ACM SIGPLAN 1996 по программированию языковая разработка и реализация , страницы 258-266, Иерусалим, Израиль, 1996.ACM Press. - 60
- Ю. Сайто и Б. Бершад.
Служба транзакционной памяти в расширяемой операционной системе.
На ежегодной технической конференции USENIX , 1998. - 61
- К. Салем и Х. Гарсиа-Молина.
Контрольная точка резидентных баз данных в памяти.
Технический отчет CS-TR-126-87, Департамент компьютерных наук, Принстонский университет, 1987 год. - 62
- М. Сатьянараянан, Х. Машберн, П. Кумар, Д. Стир и Дж.Кистлер.
Облегченная восстанавливаемая виртуальная память.
В SOSP , 1993. - 63
- С. Сэвидж, М. Берроуз, Г. Нельсон, П. Собальварро и Т. Андерсон.
Eraser: детектор динамической гонки данных для многопоточных программ.
Транзакции ACM в компьютерных системах , 15 (4): 391-411, 1997. - 64
- Э. Шенберг.
Обнаружение аномалий доступа «на лету».
В конференции ACM SIGPLAN ’89 по дизайну языков программирования и Реализация (PLDI) , июнь 1989 г. - 65
- М. Зельцер, Ю. Эндо и К. Смолл.
Как справиться с катастрофой: выжить с некорректно работающими расширениями ядра.
В OSDI , 1996. - 66
- Дж. Х. Слай и Э. Н. Эльнозахи.
Поддержка недетерминированного выполнения в отказоустойчивых системах.
В Труды Двадцать шестого Международного симпозиума по Fault-Tolerant Computing , страницы 250-261, Вашингтон, 25-27 июня 1996 г. IEEE. - 67
- С.В. Смит, Д. Б. Джонсон и Дж. Д. Тайгар.
Полностью асинхронное оптимистичное восстановление с минимальными откатами.
In FTCS-25: 25-й Международный симпозиум по отказоустойчивости Computing Digest of Papers , страницы 361-371, Пасадена, Калифорния, 1995. - 68
- Н. Стерлинг.
Warlock: инструмент для статического анализа гонки данных.
В Зимняя техническая конференция USENIX , 1993. - 69
- Дж. М. Стоун.
Отладка параллельных процессов: пример из практики.
В конференции ACM SIGPLAN по проектированию языков программирования и Реализация (PLDI) , июнь 1988 г. - 70
- Р. Э. Стром и С. А. Йемини.
Оптимистичное восстановление в распределенных системах.
Транзакции ACM в компьютерных системах , 3 (3): 204-226, август 1985. - 71
- домашняя страница программного обеспечения syscalltrack по адресу https://syscalltrack.sourceforge.net/how.html.
- 72
- К. А. Теккат и Х. М. Леви.
Аппаратная и программная поддержка для эффективной обработки исключений.
В ASPLOS , 1994. - 73
- Г. Трент и М. Саке.
Webstone: Первое поколение тестов HTTP-серверов.
, февраль 1995 г. - 74
- К. против Праун и Т. Гросс.
Обнаружение гонки объектов.
В 16-я ежегодная конференция по объектно-ориентированному программированию, Системы, языки и приложения (OOPSLA) , Тампа-Бэй, Флорида, октябрь 2001 г. - 75
- Д. Вагнер и Д. Дин.
Обнаружение вторжений с помощью статического анализа.
В Симпозиум IEEE по безопасности и конфиденциальности , страницы 156-169, 2001 г. - 76
- Д. Вагнер, Дж. Фостер, Э. Брюэр и А. Эйкен.
Первый шаг к автоматическому обнаружению переполнения буфера уязвимости.
В симпозиуме по безопасности сетей и распределенных систем , стр. 3-17, Сан-Диего, Калифорния, февраль 2000 г. - 77
- Y. Wang, P.Y. Chung, Y. Huang, E. N. Elnozahy.
Интеграция контрольных точек с обработкой транзакций.
В FTCS , 1997. - 78
- Ю. Ван, Ю. Хуанг, В. К. Фукс, К. Кинтала и Г. Сури.
Прогрессивная повторная попытка для восстановления программного сбоя при передаче сообщений Приложения.
Транзакции IEEE на компьютерах , 46 (10): 1137-1141, октябрь 1997 г. - 79
- Ю. Ван, Ю. Хуанг, К.-П. Во, П.-Ю. Чанг и К. Кинтала.
Контрольно-пропускной пункт и его приложения.
В FTCS-25 , 1995. - 80
- М.Ву и В. Зваенпол.
eNVy: энергонезависимая система хранения с основной памятью.
В Труды Шестой Международной конференции по Архитектурная поддержка языков программирования и операционных систем , стр. 86-97, Сан-Хосе, Калифорния, 4-7 октября 1994 г. ACM SIGARCH, SIGOPS, SIGPLAN, и компьютерное общество IEEE. - 81
- Ю. Се и Д. Энглер.
Использование избыточности для поиска ошибок.
В Труды десятого симпозиума ACM SIGSOFT по фондам программного обеспечения , страницы 51-60, 2002. - 82
- Ю. Чжоу, П. М. Чен и К. Ли.
Быстрое переключение кластера при отказе с использованием связи с отображением виртуальной памяти.
В состоялась 13-я Международная конференция ACM по суперкомпьютерам , Июнь 1999 г.
Этот документ был создан с использованием LaTeX 2HTML-переводчик, версия 2002 (1.62)
Авторские права © 1993, 1994, 1995, 1996,
Никос Дракос,
Подразделение компьютерного обучения, Университет Лидса.
Авторские права © 1997, 1998, 1999, г.
Росс Мур,
Математический факультет Университета Маккуори, Сидней.
Аргументы командной строки:
latex2html -split 0 -show_section_numbers -local_icons -white paper
Перевод инициирован 06.05.2004
Сноски
- …
- Эта работа была частично поддержана NSF в рамках грантов CCR-0325603, EIA-0072102 и CHE-0121357; DARPA по гранту F30602-01-C-0078; грантом IBM SUR; и дополнительными подарками от IBM и Intel.
- … истек
- sleep в Linux реализован с помощью nanosleep, который заменяет процесс после добавления таймера к таймеру ядра список
2004-05-06 .