Previous Entry Share Next Entry
photo25

SymLevel Debugger (репост)

Оригинал взят у esil0x в SymLevel Debugger
Где-то год назад я решил начать делать собственный проект: GUI C/C++ отладчик для Linux x64 на базе LLDB. Думаю, настало время показать что получилось. Проект не open source, планируется как коммерческий, распространяться будет в бинарях под Linux x64.



Вот примерный список того, что хотелось получить в результате:

1. Удобный быстрый GUI.

Существующие font-end'ы к gdb обмениваются с ним данными через стандартный ввод/вывод, из-за чего всё достаточно сильно тормозит и глючит. Линковаться напрямую с gdb и дергать его функции напрямую практически невозможно, потому что gdb немодифицируемое нечто и никто этим заниматься не будет.

Удобство существующих интерфейсов тоже на нуле. Например, один из лучших на мой взгляд, qtcreator в панели точек останова отображает 8 стобцов, большинство из которых просто не нужны при обычном использовании, но отключить их никак нельзя. Окно добавления точки останова - это какой-то ад из 100500 параметров, в котором сразу даже не понятно что куда вводить. Ну и так далее.

2. Хорошая поддержка всех стандартных типов C++ из коробки.

gdb постоянно в каких-то местах не может отобразить то одно, то другое. Например, уже несколько лет стандартные принтеры gdb не могут отобразить std::vector<std::shared_ptr<std::string>>. Чинить никто и не думает, потому что авторов gdb это не интересует, а остальные связываться не хотят. В моём отладчике свой фреймворк для форматтеров типов, всё покрыто юнит-тестами. Если какой-то тип где-то не отображается, то это баг, который будет исправлен.

Все front-end'ы отображают то, что получают от gdb, и страдают всем описанным.

3. Продвинутые функции пошагового исполнения.

Во-первых, текущее поведение gdb в некоторых случаях просто раздражает. Например, команда step-over, при выходе из текущей функции переходит на строку, следующую за местом вызова, пропуская при этом все остальные вызовы, которые идут в той же строке, что и вызов текущей функции. Нужно использовать finish (о чем часто зыбываешь), или step-into (и тогда часто приходится идти дальше вглубь). В lldb step-over из коробки при выходе из функции переходит на ту строку, где был вызов, и это уже очень сильно повышает удобство отладки.

В дальнейшем хочется добавить возможность сделать step-into в выбранную функцию, иметь возможность включить/отключить обход функций стандартной библиотеки или функций, расположенных в указанных исходниках или пронстранствах имен. Всё это в планах, но довольно просто реализовать, если уже есть базовая инфраструктура.

Итак, что уже сделано и что отладчик умеет:
1) Быстрый удобный GUI
2) Стандартные функции для отладчика в GUI (threads, call stack, breakpoints, locals, watch, source tree, etc)
3) Запуск отлаживаемого приложения в терминале
4) Поддержка нормального отображения большинства стандартных типов libstdc++,
кроме некоторых, которые я в данный момент доделываю (valarray, bitset, etc)
5) Поддержка простой командной строки отладчика (синтаксис lldb с незначительными изменениями)

Что отладчик не умеет:
1) Remote debug и поддержка других архитектур, кроме x64. Планируется в одной из следующих версий.
2) Автодополнение и подсказки в командной строке отладчика. Планируется в одной из следующих версий.
3) Отладка без отладочной информации (отображение в GUI памяти, дизассемблера, регистров, etc).
Можно всё это делать в командной строке, но поддержки в GUI нету. Планируется во второй версии.
4) Поддержка типов libc++/boost/qt. Планируется в третьей версии.
5) Поддержка кастомных форматтеров. Фреймворк форматтеров будет выторчен наружу. Планируется в третьей версии.


Если заинтересовались, то скачать потыкать можно здесь: http://dev.symlevel.com/debugger/download


Что хотелось бы услышать от занитересованных:
1) Все недоделки и недочеты, которые бросаются в глаза. Начиная от опечаток и заканчивая отсутствием
каких-то очевидно необходимых вещей, о которых я забыл.
2) Пожелания о том, что какой функционал хотелось бы видеть в первую очередь. Можно придумывать что угодно,
что вам действительно нужно. Например, отображение дерева типов как в IDE, или навигация по коду.

Что слышать не хотелось бы:
1) C++ не нужен
2) Взлетит / не взлетит, и вообще gdb рулит. Если рулит, то у вас всё в порядке, и я рад.
3) Почему не open source?



  • 1
amarao_san July 7th, 2015
Ну, решать тебе, но сильно надеяться на помощь комьюнити с проприетарным софтом не стоит.

Максимум - "окай".

wizzard0 July 7th, 2015
И да, и нет. Фидбек-то полезен в любом случае.

slonopotamus July 7th, 2015
Дебаггер вне IDE? Думаю что не взлетит.

  • 1
?

Log in

No account? Create an account