оценить переменную / функцию в GDB - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть следующий код,

...
char* seg = mmap(0, ...)
printf("seg=%x\n", seg);
...

Программа печатает с seg=b7ffd000. В то время как в GDB (для того же выполнения), при использовании p/x seg, он печатает $2 = 0x0. Я запутался здесь. Разве это не тот же вар seg? почему значения разные.

PS: в mmap первый аргумент - это предпочтительно адрес отображаемой памяти, а возвращаемое значение - фактический адрес отображенной памяти.

1 Ответ

4 голосов
/ 29 апреля 2011

Теперь, когда вы ответили на мой вопрос в комментариях, я могу ответить!

Значение, которое вы видите в результате printf, является реальным адресом.Вы видите 0 как значение seg в отладчике, потому что, когда оптимизация включена, компилятор свободен делать все виды странных вещей (что обычно делает пошаговую отладку сложной).Однако «наблюдаемое» поведение всегда должно быть правильным (при условии, что вы не полагаетесь на какое-либо неопределенное поведение).

...