У нас есть программа на C ++, такая как:
int&
Instance()
{
static int test;
return test;
}
int
main( int argc, char ** argv )
{
int& test = Instance();
printf("%d\n",test);
return 0;
}
Теперь я пытаюсь напечатать Instance::test
, как это предлагается в документации gdb: https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_52.html
Тем не менее, это дает:
(gdb) p Instance::test
No symbol "test" in specified context.
Я компилирую с помощью -O0 -g
.
7
Sioux
13 Авг 2014 в 00:44
1 ответ
Лучший ответ
(gdb) p 'Instance()::test'
У меня работает на Ubuntu 14.04, gdb 7.7, g ++ 4.8.2. Как я узнал, что это был символ?
$ nm -C a.out | grep test
0000000000601040 d Instance()::test
13
Jordan Samuels
13 Авг 2014 в 01:21
3
Правильный. Ключ - это одинарные кавычки.
– Sioux
14 Авг 2014 в 19:59
Да, я должен был обратить на это внимание с самого начала.
– Jordan Samuels
14 Авг 2014 в 20:00
У меня была похожая проблема, и ваш трюк с
– nm
решил ее для меня. Однако символ был prevRev.6906
. Это сработало, но что это за символ и как я должен был его угадать?
Baruch
4 Ноя 2014 в 13:14
Какой компилятор, версию и флаги вы используете? И вы компилируете код в исходном вопросе или другом коде?
– Jordan Samuels
4 Ноя 2014 в 16:21
Другой код. gcc (mingw64) 4.9.2,
– -g
. В моем коде область статической переменной находится не непосредственно в функции, а во внутреннем блоке (он объявлен в блоке if
)
Baruch
5 Ноя 2014 в 01:31
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
printf
, которая ничего не знает о том, что такое ссылка. Мне это кажется неправильным. Я высуну шею - прямо сейчас у меня нет спецификации C ++, но я хеджирую свою ставку на то, что код имеет неопределенное поведение из-за передачи ссылки наprintf()
The only issue that I could see is with the vararg implementation
Это было моей точкой зрения. Кроме того, комментарии предназначены для комментариев, то есть я не публиковал свой комментарий в качестве ответа.