Показаны сообщения с ярлыком перевод. Показать все сообщения
Показаны сообщения с ярлыком перевод. Показать все сообщения

пятница, 10 мая 2013 г.

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


Оригинал

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



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

Чтобы опустить отладочную информацию передайте флаг '-s' компоновщику (например, go build -ldflags "-s" prog.go).

Код, генерируемый компилятором gc, включает встраивание вызовов функций и регистеризацию переменных. Эти оптимизации иногда могут сделать отладку с помощью GDB сложнее. Чтобы отключить их на время отладки, передайте флаг -gcflags "-N -l" команде go, которая используется для сборки отлаживаемого кода.

Распространенные операции

  • Показать файл и номер строки кода, установить точку останова и дизассемблировать:
     (gdb) list
     (gdb) list line
     (gdb) list file.go:line
     (gdb) break line
     (gdb) break file.go:line
     (gdb) disas
  • Показать трассировку и раскрученные стековые кадры:
(gdb) bt
(gdb) frame n

  • Показать имя, тип и расположение в стековом кадре локальных переменных, аргументов и возвращаемых значений:
(gdb) info locals
(gdb) info args
(gdb) p variable
(gdb) whatis variable

  • Показать имя, тип и расположение глобальных переменных:
(gdb) info variables regexp


Go расширения

Новый механизм расширений GDB позволяет загружать скрипты расширений для заданного двоичного файла. Инструментарий использует этот факт, для того чтобы расширить GDB небольшим числом команд, позволяющих исследовать внутренности исполняемого кода (такие как горутины) и красиво отображать встроенные типы словарей, срезов и каналов.
  • Красивое отображение строк, срезов, словарей, каналов или интерфейсов:
(gdb) p var
  • $len() и $cap() функции для строк, срезов и словарей:
(gdb) p $len(var)
  • Функция для приведения интерфейсов к их динамическим типам:
(gdb) p $dtype(var)
(gdb) iface var


Известная проблема: GDB не может автоматически находить динамический тип значения интефейса, если его длинно имя отличается от короткого (раздражает, когда выводится трассировка стека, вместо красивого отображения мы получаем короткое имя типа и указатель).
  • Исследование горутин:
(gdb) info goroutines
(gdb) goroutine n cmd
(gdb) help goroutine
     Например:
(gdb) goroutine 12 bt

Если Вы хотите узнать как скрипт расширения работает или хотите расширить его, посмотрите src/pkg/runtime/runtime-gdb.py в директории исходных кодов Go. Он зависит от нескольких специальных магических типов (hash<T,U>) и переменных (runtime.m и runtime.g), описание которых в DWARF коде обеспечивает компоновщик (src/cmd/ld/dwarf.c).

Если Вам интересно как выглядит отладочная информация, запустите 'objdump -W 6.out' и просмотрите секции .debug_*.

Известные проблемы

  1. Красивое отображение строк срабатывает только для типа строка, а не для для типов, наследуемых от него.
  2. Информация о типах отсутствует для частей библиотеки времени выполнения написанных на C.
  3. GDB не понимает определения имен Go и рассматривает "fmt.Print" в качестве неструктурированного литерала с ".", который должен быть помещен в кавычки. Это еще более относится именам методов `pkg.(*MyType).Meth`.
  4. Все глобальные переменные причисляются к пакету main.

пятница, 26 апреля 2013 г.

Крэши, вызванные исключениями

Оригинал

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

пятница, 8 июля 2011 г.

Linux для встраиваемых систем in Google Docs now!

Перевод "Linux для встраиваемых систем для начинающих" плавно перехал в  Google Docs,  но работа продолжается. Если кому-то интересна эта тема, скажите писать ли перевод сюда?

пятница, 1 апреля 2011 г.

Linux для встраиваемых систем. Часть 1.2. Linux для встраиваемых систем сегодня


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

LinuxDevices.com, популярный новостной и информационный портал, основанный Rich Lenhrbaum, проводит ежегодный обзор рынка Linux для встраиваемых систем. В своем последнем исследовании, они сообщают, что Linux стала доминирующей операционной системой, используемой в тысячах новых разработках каждый год. Действительно, почти половина опрошенных сообщили об использовании Linux во встраиваемых устройствах, в то время как ближайшая конкурирующая операционная система, как сообщается, использовалась только примерно одним из восьми опрошенных. Даже если у Вас есть причины подвергнуть сомнению эти результаты, нельзя не принимать во внимание взрывной рост рынка Linux для встраиваемых систем сегодня.

четверг, 31 марта 2011 г.

Linux для встраиваемых систем. Часть 1.1. Почему Linux?

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

Вот некоторые причины роста Linux для встраиваемых систем:

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

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

Часть 1.2. Linux для встраиваемых систем сегодня

        Linux для встраиваемых систем. Глава 1. Введение

        Уход от проприетарных операционных систем вызывает настоящий переполох в корпоративных офисах компаний, занимающихся традиционными операционными системами (ОС). По многим хорошо обоснованным причинам Linux, в настоящее время, принимается в качестве операционной системы во многих продуктах за пределами своего традиционного оплота – серверных приложений. Примеры этих встраиваемых систем включают в себя сотовые телефоны, DVD плееры, видео игры, цифровые камеры, сетевые коммутаторы и устройства беспроводных сетей. Вполне возможно, что Linux уже в Вашем доме или Вашем автомобиле.

        Linux для встраиваемых систем

        Этой статьей я начинаю серию переводов книги Embedded Linux Primer. Эта книга нужна в первую очередь мне самому для работы. Ее переводов на русский язык я не нашел, поэтому решил переводить сам. Надеюсь, мой перевод поможет кому-нибудь еще сэкономить время и силы.

        Сама книга разбита на короткие кусочки, что позволяет мне публиковать ее перевод в виде отдельных статей. Все статьи будут помеченых тегами "linux", "embedded", "primer", "перевод", поэтому Вы легко сможете "собрать" ее из кусочков. Также я буду добавлять ссылки к следующей части в конце текста.

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