Пожалуйста, смотрите назад след ниже, я не думаю, что я видел это раньше, и я не могу найти какую-либо информацию в документации:Что означает знак @ в GDB?
(gdb) bt
#0 0x000000007b44042c in Driver::setRec (this=0x1, [email protected])
Пожалуйста, смотрите назад след ниже, я не думаю, что я видел это раньше, и я не могу найти какую-либо информацию в документации:Что означает знак @ в GDB?
(gdb) bt
#0 0x000000007b44042c in Driver::setRec (this=0x1, [email protected])
Я не могу найти его в документации, но, похоже, это то, как GDB отображает ссылки на переменные. Согласно backtrace, вы были остановлены методом класса, приняв 1 параметр по ссылке со следующей подписью: Driver::setRec(message&)
.
Обновление:
Не указано в @
в документации C++ Expressions. Единственное указано является:
В списке параметров отображаются при GDB отображает кадр, значение эталонных переменных не отображается (в отличии от других переменных); этот позволяет избежать помех, поскольку ссылки часто используются для больших структур. Адрес ссылочной переменной всегда отображается, если у вас нет , указанный «заданный адрес печати выключен».
Я не знаю, если это помогает, но от http://sources.redhat.com/gdb/download/onlinedocs/gdb.html#index-g_t_0040_0040_0040r_007b_002c-referencing-memory-as-an-array_007d-525
Часто полезно распечатывать несколько последовательных объектов одного и того же типа в памяти; раздел массива или массив динамически определенного размера, для которого в программе существует только указатель.
Вы можете сделать это, обратившись к непрерывному интервалу памяти как искусственный массив, используя двоичный оператор
@'. The left operand of
@ 'должен быть первым элементом желаемого массива и быть отдельным объектом. Правым операндом должна быть желаемая длина массива. Результатом является значение массива, элементы которого являются всеми типами левого аргумента. Первый элемент - фактически левый аргумент; второй элемент поступает из байтов памяти сразу после тех, которые содержат первый элемент, и так далее. Вот пример. Если в программе указано
Там, где я хотел бы интерполировать это 0x50, это адрес указателя на начало строки, где выводится сообщение. Если я найду дополнительную информацию об этом, я обновлю сообщение.
его для печати последовательных адресов памяти, таких как массив.
$gdb *[email protected]
${1,2,3,4,5,6,7,8,9,10}
его менее мощный, но простой в использовании осмотр памяти. если вам нужно больше энергии, вы должны использовать команду x (изучить память). консультации
$info gdb
Я не думаю, что это имеет значение. Оператор @, который вы описываете, имеет два операнда, левый операнд и правый операнд. @ В OP имеет только один. –
Я не думаю, что это имеет значение. Оператор '@', который вы описываете, имеет два операнда, левый операнд и правый операнд. '@' В OP имеет только один. –
Мой вывод все еще согласуется с консенсусом, хотя и другие примеры в нем ссылаются на какой-то указатель. –