Пацаны может действительно не в курсе? Ты покажи примеры хороших не 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]
-
- Ты сначала говоришь "не сделать 100500 окошек", а потом требуешь 100500 хотелок. - POV_(27.10.2019 22:24, )