Рубрика «gdb» - 4

Так уж случилось, что по долгу работы очень много времени провожу с операционными системами семейства GNU/Linux. Основным видом моей деятельности является разработка программного обеспечения на С++.

Так вот, основной проблемой при использовании отладчика – это отображение сложных контейнеров, например, stl-контейнеров.

Решение, которое я предлагаю, актуально для gdb. Этот отладчик поддерживает скрипты, написанные на языке python, а механизмы отображения сложных объектов, называются pretty printers. Т.е. чтобы отладчик отображал нам все правильно, необходимо указать ему где находятся скрипты с этими самыми pretty printers. Для указания отладчику дополнительных команд необходим файл .gdbinit.

Итак, попробую оформить все, как инструкцию, так и читать удобней, и сам не забуду.
Читать полностью »

Быстрый отладчик от Mozilla с записью и воспроизведениемMozilla выпустила инструмент, который наверняка многим облегчит жизнь: это фреймворк RR под Linux для записи и последующего воспроизведения хода выполнения программы. Воспроизведение происходит абсолютно детерминированно, то есть с теми же регистрами и адресами памяти — и неизменно с тем же сбоем (если он был). Другими словами, можно бесконечно гонять тесты, а как только появится баг — не спеша его изучить в офлайне, прокрутив запись сколько угодно раз. Записываются все деревья процессов и потоков.

RR создан для точного воспроизведения багов, которые проявляют себя непредсказуемо. В таких случаях при отладке стандартными средствами нет смысла запускать программу снова: не факт, что баг опять проявится. Эта проблема постоянно портит жизнь разработчикам. Вот почему в Mozilla решили создать такой фреймворк.
Читать полностью »

Я работаю системным администратором Unix. Однажды к нам в отдел эксплуатации сервисов упал тикет от программиста с выдержой из лога application-сервера в заголовке: "pgbouncer cannot connect to server". Посмотрев логи pgbouncer'ов, я увидел, что периодически возникают lookup fail'ы при обращении к нашим DNS. Было установленно, что это связано не с работой наших DNS-серверов, а с ненадёжностью самого протокола UDP: иногда возникают потери пакетов по разным причинам.
image
В результате, было решено установить на каждом сервере с pgbouncer'ами по кэширующему BIND. И тут возникла интересная проблема: pgbouncer не перечитывал по сигналу HUP файл /etc/resolv.conf и продолжал обращаться к старым DNS-серверам. А перезагружать баунсеры категорически нельзя: есть проблемные проекты, которые очень болезненно относятся к разрывом сессий с базой.

В данной статье я расскажу как можно pgbouncer или любую другую программу, использующую библиотечный вызов getaddrinfo(), заставить перечитать resolv.conf и начать использовать новый DNS-сервер совершенно безболезненно для клиентов (без даунтайма). Читать полностью »

Приветствую уважаемое IT-сообщество !

Потратьте 30 секунд вашего времени и вдумайтесь в названия этих проектов:

  • Технология Contract Shared Memory в ОС Microsoft Singularity
  • Back-In-Time Debugger: отладчик под Linux с возможностью восстановления предыдущего состояния отлаживаемой программы
  • Модификация Dalvik VM для бета-тестирования Android-приложений с возможностью воспроизведения пользовательских действий

На что способен школьник 10 11 класса и о будущем IT сообщества в нашей стране

Все это — научные проекты российских школьников 10-11 класса.
Сходу в это непросто поверить, но это так.
В этом посте я хочу рассказать:

  • откуда в России появляются школьники с такими проектами и где на все такие проекты можно посмотреть;
  • как от всего этого, на мой взгляд, зависит будущее IT-сообщества в нашей стране;
  • что каждый участник этого сообщества может сделать, чтобы будущее это стало таким, которым мы хотим его видеть.

Читать полностью »

Часто приходиться слышать о том, что сильные и богатые корпорации вроде Google, Facebook или LG следят за каждым пуком несчастных пользователей. И исследовав некоторое из их software, я должен признать что таки да — они следят. Шпионят, гады.

Вот намедни я исследовал самый свежий (на момент написания этой статьи) официальный iOS-клиент Twitter версии 5.13.1. Мне, кроме всего прочего, было интересно посмотреть на траффик между клиентом и сервером. Поскольку клиент Twitter использует certificate pinning, его траффик довольно трудно перехватить с помощью Fiddler2 и подобных программ. Поэтому я написал define-команду для GDB, который цепляется на точку останова в [NSURLConnection start] и дампит в консоль интересные мне поля NSURLConnection непосредственно перед вызовом этого самого start. Такой нехитрый в общем-то фокус позволяет видеть что именно программа посылает на сервер ещё до того как это «что именно» будет зашифровано для дальнейше передачи по HTTPs.

И знаете что я увидел? Оказывается клиент Twitter, кроме своих обычных запросов (регистрация пользователя, авторизация, твит и т.п.) часто… нет, не так… очень часто посылает на сервер POST запросы на некий загадочный URL https://api.twitter.com/1.1/jot/client_event. Эти загадочные запросы отсылались на сервер почти по любому поводу. Я запустил клиент — запрос пошел! Я нажал кнопку «Sign in» (ещё не залогинился, просто кнопку жмакнул) — запрос пошел! Вылез экран логина, поле «Username» получило фокус — запрос пошел! Я свернул клиент — запрос пошел!.. Я конечно удивился и полез разбираться. Читать полностью »

Перевод статьи Девида Альберта — Understanding C by learning assembly.

В прошлый раз Аллан О’Доннелл рассказывал о том, как изучать С используя GDB. Сегодня же я хочу показать, как использование GDB может помочь в понимании ассемблера.

Уровни абстракции — это отличные средства для построения вещей, но иногда они могут стать преградой на пути изучения. Цель этого поста состоит в том, чтобы убедить Вас, что для твердого понимания C нужно так же хорошо понимать ассемблерный код, который генерирует Ваш компилятор C. Я сделаю это на примере дизассемблирования и разбора простой программы на С с помощью GDB, а затем мы используем GDB и приобретенные знания ассемблера для изучения того, как устроены статические локальные переменные в С.
Читать полностью »

в 8:15, , рубрики: gdb, переводы, метки: ,

Перевод статьи Аллана О’Доннелла Learning C with GDB.

На фоне таких высокоуровневых языков, как Ruby, Scheme или Haskell, изучение C может оказаться настоящим испытанием. В придачу к преодолению высокоуровневых особенностей C, таких как ручное управление памятью и указатели, вы еще должны обходиться без REPL. Как только Вы привыкнете к исследующему программированию в REPL, иметь дело с циклом написал-скомпилировал-запустил будет для Вас небольшим разочарованием.

С недавнего времени, мне пришла в голову идея, что я мог бы использовать GDB как псевдо-REPL для C. Я немного поэкспериментировал, используя GDB как инструмент для изучения языка, а не просто отладки С, и это принесло мне много веселья.
Читать полностью »

Нижесказанное относится к инструментарию gc. Gccgo имеет встроенную поддержку gdb. Помимо этого обзора Вы можете консультироваться с руководством по GDB.

Когда Вы компилируете и компонуете ваши Go программы с помощью инструментария gc в Linux, Mac OS X или FreeBSD, полученный в результате бинарные файлы содержат отладочную информацию DWARFv3, которую отладчик GDB последней версии (>7.1) может использовать для исследования живого процесса или дампа.Читать полностью »

Как запустить программу без операционной системы: часть 2

В первой части нашей статьи мы рассказали о том, каким образом можно получить простую программу “Hello World”, которая запускается без операционной системы и печатает сообщение на экран.

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

! ВАЖНО!: Все дальнейшие действия могут успешно осуществляться только после успешного прохождения всех 6-ти шагов описанных в первой части статьи).

Читать полностью »

О чем эта статья

В двух предыдущих статьях я рассказывал как отлаживать приложения для Android без исходного кода на Java и о некоторых особенностях установки breakpoints. Если уважаемый читатель ещё не ознакомился с этими статьями — я настоятельно рекомендую начать с них, а уже потом читать эту статью.

Так уж вышло что до сих пор я рассказывал исключительно об отладке байткода Dalvik и ни словом не обмолвился об отладке native методов. А ведь именно в native методах часто скрывается самое вкусное — хитрые защиты, интересные malware фичи, уязвимости нулевого дня. Поэтому сегодня я сжато, без «воды», расскажу как отлаживать native методы без исходного кода на C/C++ (ну или на чем, уважаемый читатель, они у вас там написаны).
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js