ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
955201 Топик полностью
Связанные сообщения
Debug
[protodb] Protocol Debugger. Отладка и реверс-инжиниринг протоколов.2023-11-12
Восьминогие ATTINY402 нарисовались на digikey.com (в Элитане от 31,80 р.) Интересно, чем их программировать? ATtiny817 Xplained ...2019-04-29
Из доступных средств и хороших, на мой взгляд, следующие:2017-10-27
fk0, легенда (27.10.2019 13:31, просмотров: 840) ответил POV_ на Крайне сомнительный тезис насчет не-гдб отладчик. И серии "а пацаны-то не в курсе"
Пацаны может действительно не в курсе? Ты покажи примеры хороших не gdb-отладчиков. С отладкой на уровне исходного кода. В частности должны быть доступны следующие функции, пишу по своему опыту: 1) размотка стека, с отображением последовательности вызовов (backtrace); 2) и значений переменных на каждом уровне, и аргументов для каждой функции (насколько это возможно); 3) возможность переключения на выбранный уровень стека и просмотр значений регистров (восстановленных отладчиком из стека); 4) показ листинга программы (конверсия адреса в имя файла и номер строки, как это делает addr2line) по заданному адресу в памяти (это может быть не только регистр $pc, т.к. очень часто программист может захотеть посмотреть вручную адреса на стеке, когда размотка не справилась); 5) отображение переменных, в частности, отображение строк и структур; 6) возможность выбора конкретного элемента структуры для отображения; 7) возможность вычисления выражений на основе известных отладчику переменных, включая приведения типов; 8) возможность получить тип переменной; 9) возможность вызова функций (в т.ч. в контексте вычисления выражений) в отлаживаемой программе; 10) возможность установки переменных (смены значений регистров, памяти); 11) в том числе, возможность перехода в заданную точку программы; 12) и возможность возвращения из отлаживаемой функции (без её выполнения); 13) умение работать с таблицей символов и уметь использовать символы в выражениях (фактически для глобальных переменных это не явно подразумевается пунктом 5, но отладчик должен уметь использовать символы любых типов, а не только переменные); 14) просмотр содержимого памяти в заданном программистом формате (тип, ширина слова, знак, система счисления), в том числе, как списка адресов, с автоматической заменой известных адресов символьным представлением (т.е. не только hex, с дальнейшими подсчётами на калькуляторе); 15) возможность поиска заданного текста, или бинарных данных, в памяти; 16) остановка программы в заданных точках (breakpoint); 17) возможность задания точек остановка по регулярному выражению применяемому к таблице символов (например, все функции такого-то класса, остановка не в функции, а в PLT), в том числе возможность вывода и сохранения списка установленных точек останова (см. п. 23); 18) поддержка inline-функций при установке точек останова (это же касается и пункта 4); 19) задание условий срабатывания для точки останова в виде вычисляемых выражений, см. п. 7, в том числе должны быть доступны ряд встроенных функции отладчика позволяющих найти регулярное выражение в строке, проверить что данная функция вызывается именно из такой функции, и т.п.) 20) распечатка результатов выражения в точке останова (с автоматическим продолжением работы) -- даже Visual Studio умеет... 21) выполнение заданных произвольных команд отладчика в точке остановам, в частности автоматическое пошаговое исполнение программы до выполнения заданного условия с протоколированием значений переменных, аргументов и строк исполняемой программы (фактически -- трассировка); 22) при пошаговом исполнении -- возможность пропуска заданных функций и библиотек; 23) возможность предварительного создания и загрузки сценария, набора команд отладчику, из файла (т.к. он может быть достаточно большой и сложный, а после каждого перезапуска руками всё повторять -- невозможно). 24) возможность сохранения вывода отладчика в файл (особенно если там уже многие мегабайты, см. п. 20-21); 25) ведение протокола работы: все введённые команды и их результаты записываются в файл или окно, и всегда можно во-первых отмотать назад и посмотреть что было сделано, во-вторых показать протокол работы коллегам; 26) отображение диапазонов адресов известных сегментов памяти, отображение имени секции и имени модуля размещающихся в данном сегменте (может использоваться для понимания, чему именно принадлежит данный адрес); 27) отображение информации о загруженных исполняемых файлах и о том как прочитана из них отладочная информация; 28) задание списков путей для поиска исходников и файлов содержащих отладочную информацию (т.к. на данной машине всё может оказаться разложено не так, как на той, на которой собирали, т.к. все библиотеки могли быть собраны в другом, каждая в своём, каталоге и иметь другие пути); 29) на худой конец -- возможность загрузки таблицы символов из текстового файла (для работы с несовместимыми компиляторами); Функции специфичные для аппаратуры (точка останова по изменению памяти, трассировка и т.п.) -- намерено пропущены. Watchpoints обычно у многих есть и вопросов не вызывают, трассировки обычно ни у кого нет или работает только для галочки. Visual Studia или WinGDB действительно кое-чего умеют (местами лучше GDB). А среди embedded и т.п. я ничего хорошего не видел и не увижу. Оно понятно почему: отладчик такого уровня делается лет 10 как минимум, это не продукт сегодняшнего дня. У того же микрочипа местами был интересный набор функций, совместно с realice, например, но оно больше направлено на отладку аппаратуры или маленьких программок тесно взаимодействующих с аппаратурой. Трассировка на уровне ассемблера -- кому она нужна, программистам на ассемблере? Хотелось бы на уровне C/C++ и не в терминах хексов и байтов, а в терминах типов определённых в программе.
[ZX]