2015-11-30 2 views
0

Я знаю, что для получения символьного адреса lauterbach используется Address.Offset(), но эта команда не работает для статических функций! статический символ не найден. Итак, какая команда для получения смещения адреса статического символа?Получение адреса статического символа в Trace32 Lauterbach

+0

Может быть, вы пытаетесь отладить оптимизированный код? Что делает Var.INFO говорит, что для вас статическая функция? – Holger

+0

Ничего, Var.INFO пуст для статических символов – Khaled

ответ

1

Я использую компилятор GreenHills. Добавив параметр/GHS в Data.Load.Elf, проблема решена.

0

Я предполагаю, что ваш компилятор оптимизировал вашу статическую функцию, например. включая тело функции непосредственно в вызывающем. Компиляторы могут это сделать, и если они делают, символ ввода статической функции больше не доступен и, следовательно, не может использоваться в любом отладчике.

Итак, в своем make-файле убедитесь, что вы компилируете код без оптимизации (или меньше оптимизаций) и убедитесь, что вы компилируете для отладки. Или объявите свою функцию внешней. Или используйте некоторые компиляторы компилятора или атрибуты для сохранения статической функции.

Также убедитесь, что ваша статическая функция вызывается - в противном случае ее можно также сбрасывать компилятором.

+0

Мой компилятор вообще не оптимизирован. – Khaled

+0

Я думаю, вам действительно нужно предоставить более подробную информацию. Все, что мы знаем сейчас, это то, что TRACE32 не может видеть символ входа вашей статической функции. Но какой компилятор вы используете? Как вы называете компилятор? Как вы называете компоновщика? Какую архитектуру процессора вы используете? Как вы загружаете свой файл ELF в TRACE32? Является ли ваша статическая функция когда-нибудь вызвана? – Holger

+0

Я также предлагаю использовать такой инструмент, как «readelf» GNU, чтобы проверить, отображается ли ваша статическая функция в таблице символов ELF или в информации об отладке DWARF. – Holger

Смежные вопросы