Pull to refresh

Поддержка многопоточности, удаленная отладка кода: что ждет на митапе LoGeek Night C++ 14 октября

Luxoft corporate blog C++ *Conferences

С++ продолжает быть одним из важнейших языков в индустрии разработки ПО, поэтому именно он станет главным героем митапа LoGeek Night 14 октября.

В ходе мероприятия наши разработчики расскажут о поддержке многопоточности, продемонстрируют некоторые ее виды и шаблоны разработки, позволяющие максимизировать эффект от внедрения многопоточности. Так же в режиме реального времени продемонстрируют примеры удаленной отладки кода на С++ с использованием GDB!

Читать далее
Total votes 4: ↑4 and ↓0 +4
Views 874
Comments 0

Привет из свободного от libc мира! (Часть 1)

Programming *
Translation
В качестве упражнения я хочу написать программу на С. Достаточно простую для того, чтобы дизассемблировать ее и объяснить весь код самой себе.

Звучит несложно, правильно?

У читателя предполагается наличие опыта компиляции программ и работы в Линуксе. Небольшое умение читать ассемблерный код тоже пригодится.
Читать дальше →
Total votes 138: ↑126 and ↓12 +114
Views 26K
Comments 61

Вышел GDB 7.1

Open source *
Вышла новая версия замечательного консольного отладчика GDB. Изменения:
  • Добавлена поддержка мультипрограммной отладки (т.е. теперь можно работать с несколькими программами в рамках одной сессии отладки)
  • Добавлена поддержка Position Independent Executable (PIE)
  • Поддержка платформ Xilinx MicroBlaze и Renesas RX
  • Улучшения в поддержке Python (напомню, что для GDB можно писать скрипты на Python)
  • Расширена поддержка C++
  • Новые возможности при работе с tracepoint'ами
  • Улучшения в записи процессов (Process Record)
  • Улучшения в протоколе удалённой отладки
Сам я новую версию пока что не «щупал», так что за всеми подробностями, пожалуйста, обращайтесь к документации.

К своему удивлению я не нашёл на хабре топиков, посвящённых этой программе. Поэтому хочу спросить: Интересно ли будет вам прочитать топик по основам отладки в GDB?
Total votes 61: ↑56 and ↓5 +51
Views 1.7K
Comments 21

Qt Creator 2.3 и Remote Linux Deploy

Qt *
Tutorial
В очередной раз на хабре осталась незамеченной новость, которая пробежала в блоге Qt Labs и известила о выходе Qt Creator 2.3. Если вскользь просмотреть список изменений, то как обычно можно увидеть кучу прикольных плюшек, одна из которых заинтересовала меня неимоверно. А именно — развёртывание и отладка приложения на удалённой Linux-машине, при помощи ssh, прямиком из среды разработки.
Читать дальше →
Total votes 40: ↑39 and ↓1 +38
Views 13K
Comments 22

PHP под С-шным дебаггером: копаемся внутри Zend Engine

PHP *
Как-то пришлось мне столкнуться с проблемой: веб-краулер на PHP работает себе нормально, работает, а потом вдруг (через 3-6 часов работы) перестает что-либо делать и начинает кушать 100% CPU. Как искать такую проблему? Как узнать, где он зацикливается? А что если подключиться к PHP сишным дебаггером и узнать оттуда все, что необходимо? Подробности под катом.
Читать дальше →
Total votes 82: ↑78 and ↓4 +74
Views 4.9K
Comments 41

Использование GDB на примере MaNGOS

Configuring Linux *
Sandbox
Tutorial
Представьте на мгновение, что вы капитан и механик огромного космического корабля, на котором одновременно находятся множество пассажиров. Но это не идеальный корабль, а полуразвалившаяся посудина. Да многое работает, но многое еще предстоит починить. Возникает вопрос, как? Вот был бы такой инструмент, который позволил разобрать наше судно до мельчайшего болтика, понять как он устроен, что происходит внутри него при нажатии той или иной кнопки, прочувствовать сущность, его душу. Мало того, было бы идеальным еще иметь возможность останавливать время в момент починки неполадки, что бы все разложить по полочкам. Ведь это не так легко, понять, а что же происходит внутри!
Раньше я боялся залазить внутрь такого монстра как mangos, и пользовался отладчиком только при подготовке задания по информатике в институте. Но оказалось, что все намного проще и нет ничего страшного, хоть там и много кода. Я попробую описать, как пользуясь GDB залезть внутрь популярного эмулятора одной MMORPG и посмотреть на его работу изнутри. Главное, не бояться экспериментировать, в пределах разумного. Те, кто знает что такое GDB не найдут тут ничего нового для себя.
Читать дальше →
Total votes 33: ↑30 and ↓3 +27
Views 4.8K
Comments 8

Использование отладчика GDB по максимуму

НеоБИТ corporate blog Debugging *
В нашей повседневной работе, как и всем, требуется много пользоваться отладчиком. В силу специфики работы: (разработка ОС, использование технологий виртуализации наподобие Intel-VT, ит.д.) нам часто требуется использовать отладчик для работы со специфическими случаями: отладка кода загрузчика ядра, отладка загрузчиков виртуальных машин, а так же в принципе обеспечение возможности отлаживать ОС собственной разработки. Именно эти особые случаи так пафосно названы в заголовке ”по максимуму”.

Для решения всех этих задач (и конечно, многих других) мы используем gdb. Возможно использование и таких оболочек как DDD, но лично я предпочитаю использовать cgdb как оптимальный выбор, особенно для случая работы с отладчиком по ssh.
В этой статье мы расскажем о том, как можно использовать gdb для отладки кода загрузочных секторов и загрузчиков.
Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Views 36K
Comments 3

Отладка приложений для Android без исходных кодов: native методы

Information Security *Debugging *Reverse engineering *
Tutorial

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


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

Так уж вышло что до сих пор я рассказывал исключительно об отладке байткода Dalvik и ни словом не обмолвился об отладке native методов. А ведь именно в native методах часто скрывается самое вкусное — хитрые защиты, интересные malware фичи, уязвимости нулевого дня. Поэтому сегодня я сжато, без «воды», расскажу как отлаживать native методы без исходного кода на C/C++ (ну или на чем, уважаемый читатель, они у вас там написаны).
Читать дальше →
Total votes 41: ↑39 and ↓2 +37
Views 24K
Comments 5

Стабилизируем PHP на бою — что и почему «роняет» веб-сервер

Битрикс24 corporate blog Website development *
Вы отвечаете за стабильность работы веб-проекта на PHP. Нагрузка постоянно растет, добавляются фичи, клиенты довольны. В один прекрасный день начинают появляться загадочные ошибки…

Ошибки серверного софта


… которые программисты не знают как исправить, т.к. «ломается» серверный софт, например связка apache-PHP — а клиент получает в ответ на запрос страницу о регламентных работах. Веб-разработчик часто не обладает глубокими знаниями в программировании на C в unix/linux, а сисадмин нередко, к сожалению, глубже bash в систему не погружается. Настоящий хардкор :-)

Нестабильная работа серверных скриптов


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

На практике я часто встречаю проекты, которые сталкиваются с подобным классом ошибок «серверного софта», и в команде не всегда знают, что делать. В логе apache часто появляются сообщения о нарушении сегментации (segmentation fault), клиенты получают страницу об ошибке, а веб-разработчик с сисадмином ломают себе голову, играются с разными версиями PHP/apache/прекомпилятора, собирают PHP из исходников с разными опциями снова и снова, пишут о багах, а им доказывают, что это баги не PHP, а их кода и так до бесконечности…

В статье я хочу рассказать как можно просто и быстро найти причину, почему PHP рассыпался на боевом сервере и устранить ее — не погружаясь в прекрасный мир системного программирования на C для unix :-) От вас потребуется желание и одна чашечка кофе.

Читать дальше →
Total votes 119: ↑98 and ↓21 +77
Views 77K
Comments 72

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

НеоБИТ corporate blog System Programming *


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

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

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

Читать дальше →
Total votes 124: ↑118 and ↓6 +112
Views 63K
Comments 9

Отладка Go кода с помощью GDB. Введение

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

Когда Вы компилируете и компонуете ваши Go программы с помощью инструментария gc в Linux, Mac OS X или FreeBSD, полученные в результате бинарные файлы содержат отладочную информацию DWARFv3, которую отладчик GDB последней версии (>7.1) может использовать для исследования живого процесса или дампа.
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Views 9.6K
Comments 2

Изучаем С используя GDB

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

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

Недавно мне пришло в голову, что я мог бы использовать GDB как псевдо-REPL для C. Я поэкспериментировал, используя GDB как инструмент для изучения языка, а не просто для отладки, и оказалось, что это очень весело.
Читать дальше →
Total votes 70: ↑66 and ↓4 +62
Views 99K
Comments 30

Разбираемся в С, изучая ассемблер

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

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

Уровни абстракции — отличные инструменты для создания вещей, но иногда они могут стать преградой на пути обучения. Цель этого поста — убедить вас, что для твердого понимания C нужно также хорошо понимать ассемблерный код, который генерирует компилятор. Я сделаю это на примере дизассемблирования и разбора простой программы на С с помощью GDB, а затем мы используем GDB и приобретенные знания ассемблера для изучения того, как устроены статические локальные переменные в С.
Читать дальше →
Total votes 76: ↑70 and ↓6 +64
Views 80K
Comments 30

Twitter следит за тобой, анонимус

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

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

И знаете что я увидел? Клиент Twitter, кроме своих обычных запросов (регистрация пользователя, авторизация, твит и т.п.) часто… нет, не так… очень часто отсылал на сервер POST запросы на некий загадочный URL api.twitter.com/1.1/jot/client_event. Эти запросы шли на сервер почти по любому поводу. Я запустил клиент — запрос пошел. Я нажал кнопку «Sign in» (ещё не залогинился, просто кнопку жмакнул) — запрос пошел. Вылез экран логина, поле «Username» получило фокус — запрос пошел. Я свернул клиент — запрос пошел… Я конечно удивился и полез разбираться.
Разобраться
Total votes 136: ↑107 and ↓29 +78
Views 41K
Comments 51

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

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

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



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

Читать дальше →
Total votes 130: ↑110 and ↓20 +90
Views 43K
Comments 52

Как вынудить процесс использовать новый адрес DNS-сервера из обновлённого resolv.conf без перезапуска самого процесса

System Programming *
Я работаю системным администратором 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-сервер совершенно безболезненно для клиентов (без даунтайма).
Читать дальше →
Total votes 38: ↑36 and ↓2 +34
Views 12K
Comments 18

Быстрый отладчик от Mozilla с записью и воспроизведением

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

RR создан для точного воспроизведения багов, которые проявляют себя непредсказуемо. В таких случаях при отладке стандартными средствами нет смысла запускать программу снова: не факт, что баг опять проявится. Эта проблема постоянно портит жизнь разработчикам. Вот почему в Mozilla решили создать такой фреймворк.
Читать дальше →
Total votes 52: ↑50 and ↓2 +48
Views 10K
Comments 7

Отладка C++ программ в ОС GNU/Linux

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

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

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

Итак, попробую оформить все, как инструкцию, так и читать удобней, и сам не забуду.
Читать дальше →
Total votes 44: ↑30 and ↓14 +16
Views 26K
Comments 11

Меня попросили взломать программу на собеседовании

Information Security *Assembler *Debugging *
Translation
TL;DR Меня попросили взломать программу на собеседовании. И я получил работу.

Всем привет,

Я собеседовался на позицию инженера программной безопасности, они спрашивали в основном разные низкоуровневые вещи. Некоторые ответы я знал, некоторые нет.
Потом они прислали email с защищённым и зашифрованным бинарником, который нужно было взломать.
Когда я добрался до дома, я скачал его и увидел, что он спрашивает пароль. Они хотели, чтобы я нашёл этот пароль.
Вот что я увидел при первом запуске:
Читать дальше →
Total votes 220: ↑187 and ↓33 +154
Views 193K
Comments 61