Представлен релиз отладчика GDB 17.1 (первый выпуск серии 17.x, ветка 17.0 использовалась для разработки). GDB поддерживает отладку на уровне исходных текстов для широкого спектра языков программирования (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, Power, Sparc, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS)...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=64463
Дебагер с функцией обхода защиты я считаю это пять.
Там нет обхода защиты, там есть поддержка механизма этой защиты.
Ну и вообще лудший отладчик
Скажем спасибо dbx за предоставленный код. А то так бы и не начали писать.
Что лучше - gdb или lldb?
windbg или cdb
Windbg - это сильно нишево, а GDB - многоплатформенно.
Однозначно GDB, он пока более фичастый. lldb очень похож, но поддерживает меньше архитектур, и не все возможности. При этом lldb умеет в альясы для GDB, и если вы знаете GDB, вы почти всегда так же комфортно сможете использовать и lldb, практически как прямую замену GDB.Но, в одном случае, при изучении современных C++ выражений, lldb может оказаться в некоторых случаях конкретном в этом более фичастым. Если вы плюсовик, lldb возможно, для вас лучший выбор.
Если вы плюсовик и пользуетесь g++, то вряд ли.
всегда им пользуюсь
>аппаратные возможности процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.Настоящие сишники настолько хорошо пишут на С что даже интелу пришлось в процессор встраивать аппаратные костыли с защитой от таких профессионалов.
Что естественно доказывает что раст не нужен.
Cи причем, если архитектура у вас гуляйвася? Какая архитектура такой и язык под нее, очевидно ведь.
>Настоящие сишники настолько хорошо пишут на С что даже интелу пришлось в процессор встраивать аппаратные костыли с защитой от таких профессионалов.mov esp,eax. Причем тут Си, если это разрешено в машинных иструкциях?
При том, что есть один язык, печально известный переполнениями буфера со времен червя Морриса, и это не ассемблер.
Это сработает только при компиляции с -fomit-frame-pointer.
А Intel вам сказал, что он это сделал исключительно ради сишников?
Shadow stack - это отличная идея!
Вместе с swadow fleet.
Чуваки не осилили запилить к нему собственный стандартный UI.
сделали, консольный. Не нравится - не пользуйтесь
Звучит как «жрите, что дают»… а, это оно и есть.
Ты видимо перепутал с проприетарщиками.
Вот он стандартный к нему UI https://www.gnu.org/software/emacs/manual/html_node/emacs/GD...
+--------------------------------+--------------------------------+
| GUD interaction buffer | Locals/Registers buffer |
|--------------------------------+--------------------------------+
| Primary Source buffer | I/O buffer for debugged pgm |
|--------------------------------+--------------------------------+
| Stack buffer | Breakpoints/Threads buffer |
+--------------------------------+--------------------------------+скриншоты, которые мы заслужыле
>If gdb-many-windows is non-nil, then M-x gdb displays the following frame layout:Они там реально на всю голову ушибленные.
Кто-нибудь обясните уже этим ГНУтым дидам, что Руководство Пользователя не есть мануал по погромирован на лишпе.И что клавиша Meta всегда была только на клавиатурах их любимых лишп-машин, никому не нужных и сдохших дцать лет назад.
> что Руководство Пользователя не есть мануалруководство не есть руководство, угу
> по погромирован на лишпе.
это руководство для эмакса, чего ты ожидал?
> И что клавиша Meta всегда была только на клавиатурах их любимых лишп-машин, никому не нужных и сдохших дцать лет назад.
а не безразлично, если ее можно задать?
Зачем "собственный стандартный"? Пусть GUI пишут специалисты в UI, а не специалисты в том как лучше дебажить программы.gdb имеет прекрасно описанный проток и каждый может написать свою веб-морду к нему. Причем даже встроенную в твой любимый редактор кода (как, например, сделано в vscode).
Вот, например, не стандартный, но зато GUI: KDbg.
У gdb есть встроенный TUI, очень удобная штука, например, если нужно отслеживать состояния регистров
С другой стороны, это ж опенсурс. Ну ты понял
Десятки других смогли сделать GUI к gdb, наверное как раз потому что у него стандартизированный IO по stdin/stdout. Как там со стандартизацией GUI, кстати? Уже все перешли на проверенный рабочий X11? Ой, а, нужно новые GPU продать, а никто их чё-то покупать не хочет потому что всех всё устраивает, упс, что-то надо придумать... О!
Вантузники ноют, что нет GUI. Это хороший признак для gdb. Так держать. Лично мне GUI не нужен.
UI без надобности -- вы же не с помощью cat программы пишете. Нормальный редактор сам этот UI обеспеивает, подключаясь к отладчику. GDB предоставляет протокол, а как там уже редактор обеспечит взаимодействие, это не забота gdb.
>Суть защиты в том, что после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном "теневом" стеке, который не может быть изменён напрямую.А чего бы просто link register не добавить, как в aarch64?
Потому что LR от затирания адреса возврата никак не защищает - в non-leaf функциях LR выгружается/загружается со стека.
Очередное доказательство, что Сообщество справляется лучше корпораций. Отладчика лучше gdb так и нет.
Да, и написан на Си. Так что хватит звиздеть, что у языка Си есть какие-то нерешаемые проблемы. Си - язык прошлого, настоящего и будущего!
gdb написан на C++
Откуда ты это взял, шиз? Хоть в репозиторий загляни для приличия
Так-то он прав. Файлы просто называются .c, а на самом деле код c++.
> Откуда ты это взял, шиз?1. В репозиторий заглянул
2. Я много лет работаю с gdb, и когда он крашится - у него плюсовый трейс.> Хоть в репозиторий загляни для приличия
Дак уже в отличия от тебя
Вот так выглядит работа с DWARF2 в gdb:
template<typename Elem, typename Alloc>
static void
file_write (FILE *file, const std::vector<Elem, Alloc> &vec)
{
if (!vec.empty ())
file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
}
/* In-memory buffer to prepare data to be written later to a file. */
class data_buf
{
public:
/* Copy ARRAY to the end of the buffer. */
void append_array (gdb::array_view<const gdb_byte> array)
{
std::copy (array.begin (), array.end (), grow (array.size ()));
}
/* Copy CSTR (a zero-terminated string) to the end of buffer. The
terminating zero is appended too. */
void append_cstr0 (const char *cstr)
{
const size_t size = strlen (cstr) + 1;
std::copy (cstr, cstr + size, grow (size));
}
...
Значит надо переписать C++ код на чистый.
> Programming languages: Python, C, C++Без Си никуда.
Чисты Си и только чистый Си. Остальные не нужны!
Кто программирует на modula-2?
Вот реально, список в студию, плз.
Это вам, наверное, к программистам из Решетнёва.
Которые вылезли из Решетнёва?
https://ru.wikipedia.org/wiki/Информационные_спутниковые_системы
Я черепашкой программирую.
> Для выделения ошибок и предупреждений задействованы символы emoji.Вот она, киллерфича выпуска!
Надо ещё QR-коды ввести.
А где smalltalk? GNU фаны считают его недостойным язычком?
В 18-й, думаю, добавят Algol68. В GCC добавление уже одобрили.
Там и алгол69 будет.
Возвращаемое из функции значение как отлаживать?
Можно выполнять построчно и выводить значение нужной переменной.
rax
загугли System-V Calling ABI
Любым образом останавливаешь выполнение внутре функции и делаешь finish. Я не уверен, что вывод возвращаемого значения на экран котируется за отладку возвращаемого значения, но если нет, то тебе стоит пояснить, что ты имеешь в виду.
GDB - шикарный отладчик.
В начале 00ых годов с помощью него кучу коммерческого софта от Avaya под Solaris "отучил" от лицензий :))
Благо что ассемблер для SPARC нормально знал (ну и опыт по crack'y для других платформ - уже был солидный).