Обновить
64K+

Отладка *

Поиск и устранение ошибок в коде

23,29
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

12 инструментов для отладки .NET-приложений по производительности и по памяти

Время на прочтение7 мин
Охват и читатели23K
В недавнем интервью с Джоном Скитом мы пришли к выводу, что профессиональная работа с любой технологией подразумевает умение диагностировать проблемы и понимать, как ваши приложения работают под капотом. Вдогонку к тому разговору, я узнал у Саши goldshtn Гольдштейна, одного из лучших в мире экспертов по производительности .NET, автора книги «Pro .NET Performance», на какие инструменты следует обратить внимание .NET-разработчикам.

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


Читать дальше →

Узнать и полюбить Xdebug

Время на прочтение6 мин
Охват и читатели88K
Вот уже 15 лет прошло со времен первого релиза Xdebug. Прекрасный повод вновь представить эту систему миру и объяснить как и почему она делает то что делает.
image
Xdebug — это расширение для PHP (должно быть скомпилировано и установлено в процессе установки PHP) которое представляет разработчику следующий функционал для отладки:
Читать дальше →

Как удалённо отлаживать через WinDbg не включая отладочный режим Windows

Время на прочтение4 мин
Охват и читатели13K
Иногда при анализе какой-нибудь платной программы малвари случается так, что она не хочет нормально работать, если в памяти есть отладчик или включён отладочный режим Windows.
В таких ситуациях помогает использование виртуальной машины с подключённым к ней отладчиком (например, GDB или IDA). Это если программа не пытается «сломаться» и в виртуальной машине тоже.
Читать дальше →

Поиск неисправностей с помощью WinDbg, Sos и Sosex

Время на прочтение15 мин
Охват и читатели14K


Изображение: Julien Dumont, Flickr


К сожалению, иногда случаются ситуации, когда система перестает работать или начинает безудержно потреблять ресурсы, а логи и системные метрики не могут помочь. Ситуация еще усугубляется тем, что на системе в продакшене нет Visual Studio или какого-либо отладчика, невозможно поотлаживаться удаленно. Чаще всего даже нет возможности получить доступ этой машине. В данном случае единственным решением является анализ дампа памяти процесса. Я хочу описать несколько общих сценариев поиска проблем на таких дампах. Это поиск взаимоблокировок, утечек памяти и высокого потребления процессорных ресурсов.

Читать дальше →

slit — новое слово в мире PAGERов, либо как тратить меньше времени на просмотр логов

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

less установлен у всех, все привыкли с ним работать, знают о базовых вещах, как поиск вперед-назад, фильтрация по &, переход в конец(G) файла, переход в начало(g) и так далее.

А так же, все уже смирились с тем, что в любой момент, при добавлении фильтра less может подвиснуть на неопределенный срок, выводить по строчке в 5 секунд и так далее. В конечном счете, особенно при считывании логов с stdin — приходится быть аккуратным. Фильтр может сработать, а может и не сработать.

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

Под катом демо (gif 2.2mb) и немного истории.
Читать дальше →

No Bugs, No Flaws или о надежности систем как таковых

Время на прочтение4 мин
Охват и читатели3.3K
Сегодня просматривая публикацию Егора Бугаенко When Do You Stop Testing!, с удивлением обнаружил, что немногие понимают и задумываются о том, что проблема тестирования и утверждения того, что система не имеет недостатков принципиально не решаема. Это кстати еще актуально и в связи с внедрением электронных выборов, и требованиями со стороны официальных лиц и журналистов доказательств отсутствия дыр в системе безопасности. Например у нас (Эстония) эта дискуссия идет полным ходом, и политики хотят получить стопроцентные доказательства надежности системы электронных выборов. Публичные политики, как правило незнакомы с логикой в её формальном виде. А Юм и Поппер, в лучшем случае, напоминают о каких то скучных философских семинарах, о которых лучше забыть. Но когда я слышу о том, что тестер или сеньор начинает вполне серьезно доказывать, что код протестирован и ошибок нет совсем, мое лицо приобретает это выражение:

image
Читать дальше →

Суперсилы WinDbg для .NET-разработчиков

Время на прочтение18 мин
Охват и читатели19K
Продолжая серию публикаций по докладам на конференциях, мы остановились на лучшем докладе DotNext 2016 Moscow, в которой Саша goldshtn Гольдштейн рассказывает о возможностях WinDbg для отладки .NET приложений. Этот действительно мощный инструмент позволяет решать задачи, с которыми не справляется встроенный отладчик Visual Studio.

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


Немного о строках в Си, или несколько вариантов оптимизировать неоптимизируемое

Время на прочтение9 мин
Охват и читатели218K
Хабра, привет!

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

Разговор о программировании под Linux медленно перешел к тому, что этот человек стал утверждать, что сложность системного программирования на самом деле сильно преувеличена. Что язык Си прост как спичка, собственно как и ядро Linux (с его слов).

У меня был с собой ноутбук с Linux, на котором присутствовал джентльменский набор утилит для разработки на языке Си (gcc, vim, make, valgrind, gdb). Я уже не помню, какую цель мы тогда перед собой поставили, но через пару минут мой оппонент оказался за этим ноутбуком, полностью готовый решать задачу.

И буквально на первых же строках он допустил серьезную ошибку при аллоцировании памяти под… строку.

char *str = (char *)malloc(sizeof(char) * strlen(buffer));

buffer — стековая переменная, в которую заносились данные с клавиатуры.

Я думаю, определенно найдутся люди, которые спросят: «Разве что-то тут может быть не так?».
Поверьте, может.

А что именно — читайте по катом.
Читать дальше →

Украшаем жизнь с помощью gdb PrettyPrinting API

Время на прочтение5 мин
Охват и читатели7.8K
Что gdb можно как-то улучшать на питоне, знает каждый, кто хоть раз заглядывал в документацию. А кто хоть раз просматривал ее по диагонали, знает про такую штуку, как «Pretty Printers» — которые вроде позволяют gdb красиво печатать разные сложные структуры. Я документацию по диагонали просматривал, хотя особо и не вникал. Но однажды, набирая в очередной раз что-то вроде (все примеры из исходников MariaDB, которые я дебажу по много раз каждый божий день, иногда исключая выходные):

(gdb) p/t table->read_set->bitmap[0] @ (table->read_set->n_bits+7)/8

Я подумал «а фигли?». И все заверте…
Читать дальше →

Реинкарнация графического отладчика PIX для DirectX 12

Время на прочтение4 мин
Охват и читатели7.6K
Я люблю графические отладчики. Обычные я тоже люблю, но графические — больше. Они дают ощущение сродни заглядыванию за кулисы театра во время выступления: «ага, вот эта декорация крепится так, а этот луч света падает отсюда, а у этого шкафа нет задней стенки...». Графический отладчик пробрасывает мостик понимания между текстовым кодом приложения и полученной красивой картинкой.

Но индустрия не балует нас обилием подобного инструментария. Есть графические отладчики от Intel, NVidia и AMD, но они не работают на чипах конкурентов и предназначены не столько для разработки\отладки, сколько для бенчмарков и хвастовства своими видеокартами. Они неплохо рассказывают ЧТО и КОГДА произошло, но плохо объясняют ПОЧЕМУ и КАК ИСПРАВИТЬ.

В другом лагере находится мой любимый RenderDoc, о котором я уже писал. Прекрасная утилита, написанная ребятами из Crytek для себя и людей. Открытый код, поддержка всех вендоров, DirectX11 (с планами на Вулкан и DirectX12), куча мелких полезных мелочей.

Вторым представителем когда-то был PIX — утилита для анализа производительности DirectX9. Задумывалась она как инструмент для разработки под XBox (само название это аббревиатура от Performance Investigation for XBox), но хорошо работала и для десктопных приложений. До того момента, пока не умерла (с выходом DirectX 10/11 и новых версий Windows). Microsoft, у которого в очередной раз маркетологи победили инженеров, объявил единственным инструментом для графической отладки Visual Studio, в которой именно для этих целей было много лишнего, многого не хватало, а кое-что было и вовсе невозможно. Студия — прекрасный инструмент для программирования, но далеко не столь хорошая вещь для изучения, профилирования и отладки графического кода (тем более чужого).

Всё это уныние продолжалось несколько лет, пока инженеры Microsoft не одержали временную победу и в январе 2017 года Microsoft объявила о запуске беты полностью обновлённой версии PIX для DirectX 12!

Давайте же посмотрим, что мы получили.
Читать дальше →

Решение проблем с памятью, занимаемой модулем IntelliMemory в Diskeeper и SSDkeeper

Время на прочтение2 мин
Охват и читатели4.7K
После установки SSDkeeper заметил очень странную картину — через некоторое время работы компьютера количество доступной памяти заметно снижается. При стандартном наборе постоянно запущенных приложений (браузеры, торрент и DC++ клиент) из 16Гб остается примерно половина.

Диспетчер задач не давал ответа на вопрос об утечке памяти, поэтому следующей утилитой диагностики была RamMap:

image

На скриншоте приведено состояние системы уже после устранения проблемы, ранее Nonpaged Pool занимал порядка 4-6Гб.
Читать дальше →

Обзор uniset2-testsuite — небольшого велосипеда для функционального тестирования. Часть 2

Время на прочтение23 мин
Охват и читатели3.1K


В первой части был обзор возможностей. А в этой части рассмотрим, какие уже реализованы интерфейсы тестирования и как добавить свой…
Читать дальше →

Обзор uniset2-testsuite — небольшого велосипеда для функционального тестирования

Время на прочтение10 мин
Охват и читатели4.7K


Как естественное продолжение работы над libuniset2, возник проект uniset2-testsuite. Это свой небольшой велосипед для функционального тестирования. В итоге он развился до более-менее универсального решения с «плагинами». Написан на python. Если интересно почитать, то прошу… заходите.
Читать дальше →

Ближайшие события

Эксперимент: ищем int i = 0xDEADBEEF в дампе физической памяти

Время на прочтение5 мин
Охват и читатели17K

КДПВ


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


int main()
{
    unsigned i = 0xDEADBEEF;
    std::cout << "address of i is " << std::hex << &i;
    std::cin.get(); //Чтобы процесс не завершился
    return 0;
}

Затем попробуем найти физический адрес и просмотреть значение по этому адресу.


Читать дальше →

Консоль в массы. Переход на светлую сторону. Автоматизация рутинных задач

Время на прочтение6 мин
Охват и читатели15K
routine tasks automation

Введение


Машины всегда будут быстрее, независимо от того насколько мы продуктивны и как быстро мы набираем команды. Суровая правда жизни. С другой стороны, если мы выполняем одно и тоже действие множество раз, то почему бы не заставить машины страдать. Написать скрипт на bash (ваш любимый язык программирования) и каждый раз вызывать этот скрипт, а не набирать монотонные команды, которые забирают так много времени, сил и энергии. А мы, пока скрипт будет выполнять свою работу, можем помечтать о том, как космические корабли бороздят просторы нашей Вселенной.

В прошлой статье мы рассмотрели основы программирования на bash. Сегодня мы будем применять полученные знания на практике.

Средства программирования PIC-контроллеров

Время на прочтение15 мин
Охват и читатели181K

Введение


PIC-контроллеры остаются популярными в тех случаях, когда требуется создать недорогую компактную систему с низким энергопотреблением, не предъявляющую высоких требований по ее управлению. Эти контроллеры позволяют заменить аппаратную логику гибкими программными средствами, которые взаимодействуют с внешними устройствами через хорошие порты.

Миниатюрные PIC контроллеры хороши для построения преобразователей интерфейсов последовательной передачи данных, для реализации функций «прием – обработка – передача данных» и несложных регуляторов систем автоматического управления.

Компания Microchip распространяет MPLAB — бесплатную интегрированную среду редактирования и отладки программ, которая записывает бинарные файлы в микроконтроллеры PIC через программаторы.

Взаимодействие MPLAB и Matlab/Simulink позволяет разрабатывать программы для PIC-контроллеров в среде Simulink — графического моделирования и анализа динамических систем. В этой работе рассматриваются средства программирования PIC контроллеров: MPLAB, Matlab/Simulink и программатор PIC-KIT3 в следующих разделах.

• Характеристики миниатюрного PIC контроллера PIC12F629
• Интегрированная среда разработки MPLAB IDE
• Подключение Matlab/Simulink к MPLAB
• Подключение программатора PIC-KIT3
Читать дальше →

Как работает hashCode() по умолчанию?

Время на прочтение12 мин
Охват и читатели148K

Попытка заглянуть вглубь hashCode() привела к спелеологическому путешествию по исходному коду JVM, с рассмотрением структуры объектов и привязанной блокировки (biased locking), а также удивительных последствий для производительности, связанных с использованием hashCode() по умолчанию.
Читать дальше →

Недокументированные возможности Windows: точки остановки для ключей реестра

Время на прочтение3 мин
Охват и читатели13K
Иногда в процессе обратной разработки какой-либо программы (в том числе драйвера) может потребоваться прервать ее исполнение в момент совершения некоторого действия с определенным ключом реестра, в такой ситуации можно воспользоваться недокументированной функциональностью точек остановки для ключей реестра.

Впервые точки остановки для ключей реестра появились в Windows XP, где была реализована возможность исполнения ядром инструкции int 3 при открытии ключа реестра с пометкой (отладочным флагом) BREAK_ON_OPEN или при создании подключа в составе такого ключа.
Читать дальше →

Visual C++ for Linux Development: Практика использования для Windows разработчиков

Время на прочтение5 мин
Охват и читатели30K

enter image description here


Так получилось, что за достаточно долгую карьеру Windows и Embedded разработчика судьба свела меня по серьезному с Linux всего лишь несколько месяцев назад. Нужно было написать не очень сложную консольную программу. На тот момент все мои знания о Linux были взяты из курса по операционным системам в вузе (10 лет назад). Но Stackoverflow, google и опыт позволили достаточно быстро справиться с задачей. В итоге все было написано в Visual Studio Code под Ubuntu 14.04. Правда, приложение под Linux являлось только лишь небольшим клиентом для Windows сервера. Поэтому результат не очень удовлетворял меня, так как был оторван от основного проекта в Visual Studio. И только сейчас я смог перенести код в основной проект с помощью Visual C++ for Linux Development. В процессе мне пришлось решить несколько сопутствующих проблем. Об этом я рассажу под катом.

Читать дальше →

Заметка о способе отладки блокировок в ядре Linux

Время на прочтение3 мин
Охват и читатели7.2K

Всем привет! Данная заметка касается одного практического приёма, который я использовал при решении задачи определения места в ядре ОС Linux, где удерживается определённая спин-блокировка (спин-лок). Данная проблема возникла достаточно спонтанно и, учитывая сложность ядра, могла бы потребовать большое количество времени для решения. Если Вам это интересно, прошу читать далее...

Читать дальше →