Когда GDB помечает переменную как «недоступно»? - PullRequest
4 голосов
/ 27 мая 2011

Я довольно новичок в GDB, и я еще не нашел подобный вопрос, и мой поиск в Google был напрасным, так что здесь.

Я подключаюсь к удаленной плате на основе PowerPC через COM-порт, используя GDB, и я достиг точки останова. Вот мой (очень отредактированный) сеанс GDB.

(gdb) where
#0 WaitForStuff () at graphfile.c:1234
#1 0x00012af4 in WaitForOtherStuff () at graph.c:2345
#2 0x001d0a7c in DrawScreens (DefaultScreenFct=0x2bef02 <DefaultFct>,
SecondScreenFct=0x2bef02 <DefaultFct>, DrawBothPages=Variable "DrawBothPages"
is not available.
[...]
(gdb)

Вот объявление функции в кадре № 2:

void DrawScreens(void (*DefaultScreenFct)(void), void (*SecondScreenFct)(void),
const BOOLEAN DrawBothPages);

Вот где я потерялся: почему эта переменная «недоступна» и как я могу сделать ее «доступной»? Я скомпилировал программу, используя GCC с ключом -g3, на всякий случай, если мне нужно больше информации, но я получаю ту же ошибку. Я также убрал флаг -O, который мы использовали. Может ли это быть BOOLEAN typedef (просто unsigned char)? Или, возможно, const Несс параметра? Мне кажется странным, что GDB даже не дал мне адрес, на который я мог бы взглянуть.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

-O превращает в оптимизацию в GCC (это эквивалентно -O1).

Вы хотите использовать -O0 для выключения оптимизации (и используется по умолчанию).

Кроме того, ABI PowerPC, вероятно, передает параметры в регистрах.Я не знаю, заставит ли -O0 GCC отразить аргумент в ячейке памяти стека в функции или нет.

2 голосов
/ 27 мая 2011

Обычно он находится в регистре и был сброшен или связан с чем-то другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...