Как стать автором
Обновить

Комментарии 30

Было бы круто еще строки и структуры расколупать таким же образом.
К сожалению, у автора это единственная статья по теме. Но мне в голову приходила такая же мысль и я подумывал над тем, чтобы самому заняться этим вопросом…
Вы можете сделать это сами, и посмотреть, как компилятор выравнивает свойства. В принципе, не rocket science.
В молодости, когда интернет был дорогой и знания приобретались на ошибках, я ковырял память с помощью указателя на байт (или массив байт), и просто смотрел в Borland C++ 5.02 с помощью watch.
Хорошая статья. Тут речь идёт об изучении C, а мне например, GDB очень помог разобраться с ассемблером. Упомянутая команда x действительно мощная, с помощью неё можно и регистры процессора отслеживать во время отладки (не сочтите за К.О. :)).
Сейчас как раз в процессе работы над переводом по теме изучения ассемблера с помощью GDB :)
Дааа, будет интересно почитать, особенно если, как примеры, подробно показать с картинками передачу аргументов при вызове функции через регистры (на 64-битной архитектуре) и через стек (на 32-битной архитектуре), сохранение значений вызывающей функции и т.д.
Картинок не обещаю, но кое-какая визуализация будет.
Зачем ждать, если можно самому?
Чем мне всегда нравился больше С по сравнению с Ruby, Scheme,… — можно посмотреть, что на самом деле происходит: скомпилил (без оптимизации), поставил точку останова, «Open disassembler at ...» и смотришь, что происходит.
Но вообще gdb куда сложнее, чем C, на мой взгляд (потому название статьи немного рушит шаблоны). Лично мне куда более приятно пользоваться гуёвыми оболочками, будь то MSVS или QtCreator.
«На фоне Haskell изучение C — настоящее испытание» — o rly?)
А почему бы и нет? Если понял Хаскель, то Си становятся чем-то инопланетным и наоборот. Совершенно разные миры.
Смайлик как-бы намекает на несерьезность моего предыдущего комментария)
А если серьезно, то, как мне кажется, если человек смог понять и изучитьХаскель, то Си ему выучить — раз плюнуть, даже несмотря на абсолютно различные идеологии и парадигмы.
Да ладно уж. Если взять какую-нибудь объективную метрику, например насколько сложно обучить человека, никогда не сталкивавшегося с программированием, до того, чтобы он смог написать какую-нибудь там простую программу, то Си окажется сильно сложнее Хаскеля.
Не самая лучшая объективная метрика, очень уж сильно она зависит от той самой «простой программы».

Не спорю
module Main where
main = putStrLn "Hello, world!"

выглядит проще, чем
#include <stdio.h>

int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

Но если начать объяснять, что же скрывается за этим `putStrLn`, то придется потратить кучу времени на объяснение, зачем такие выкрутасы. Можно, конечно, и не объяснять, а просто сказать, что эта штука выводит строку на экран, но тогда можно ли сказать, что вы обучили человека Хаскелю? Только на крайне базовом уровне, которого для написания чуть более сложных программ уже не достаточно.
Еще кстати очень часто рекомендуют использовать не голый GDB, а фронденд для него, ввиде такой штуки как DDD. Всё никак не попопробую. Я думаю тут многие ей пользовались. Стоит ведь использовать? Намного ли удобнее?
по небольшому опыту могу сказать, что «быстренько запустить и позырить на стек из дампа коры» — более чем подходит. Отладка с просмотром переменных — тоже довольно удобно разместить watch-имое на экране и двигаться по шагам.
Тогда уж сразу KDbg.
REPL? in Pure C? Выражаясь в стиле Ритчи — если тебе нужен пайтон, ты знаешь где его взять — а вообще без обид, лишний раз убеждаюсь в том какими разными путями люди приходят к одному и тому-же.
Ссылка в посте на The Ksplice Pointer Challenge внезапно оказалось любопытной, кто читал пост и не смотрел, рекомендую.
Пройдёт ещё лет 20 и линюксовые красноглазики откроют для себя турбо-дебагер (1989) или даже M$ visual studio, и мир никогда не станет прежним.
Бывают ситации, когда программа выполняется только где-то на сервере, и единственный способ понять в чем проблема — запуск gdb по ssh из консоли.
А это не к тому, что отладчик не нужен, сам, бывалоча, корки смотрел этим самым GDB… Это к тому, что забыть его надо было как страшный сон ещё в конце 80х!
А чем он плох?
Командной строкой.
gdb не ограничивается командной строкой же. Можно использовать любой фронтенд. А как отладчик он, имхо, очень хорош. За довольно продолжительное время работы с ним на большом проекте(несколько миллионов строк кода) не видел особых проблем. Visual studio, к примеру, на том же коде тормозит при отладке намного больше, хотя это субъективно, конечно.
Кроме того, на linux у gdb есть некоторые очень удобные фичи(например, чекпоинты и возможность отладки дочерних процессов), которых нет в той же Visual studio. Хотя может и есть, но я про них не знаю.

В общем, он ничем не хуже других хороших дебаггеров. Мир не изменится, красноглазики уже давно открыли для себя все что нужно. :)
Фронтэнд?
Это DDD или KDbg? Чем такой дебагер и такой фронтэнд, уж лучше старая добрая отладочная печать.

Век строчных редакторов кончился в 70е годы. Я не знаю ни одного извращенца, который набирает тексты в ed.
Но gdb живее всех живых, хотя по уровню технологии UI это тот-же ed — строчный дебагер.
Ниже привели пример фронтэнда NVIDIA Nsight Tegra.
NVIDIA Nsight Tegra, плагин для студии, позволяющий собирать и отлаживать нативные приложения для Андроид в среде Visual Studio. Угадаете бэкенд отладчика?
Вы не поверите, но можно подключиться по протоколу gdb по цепочке, используя на машине с пользователем таки графическую обёртку. Да, бывают ситуации, когда быстрее что-то набрать в консоли — не спорю, да и никто ж не отказывается от gdb. Но это — достаточно сложный инструмент, для новичка, изучающего C, это не нужно.
Да знаю, в том же Eclipse можно подключиться, но надо настраивать, и проблемы с конфигурированием есть.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории