Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Где взять названия enum-ов

17K
05 октября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
Объявлен тип-перечисление:
enum inputType {
itKeyBoard = 1
, itRS232 = 2
, itUSB = 3
, itEthCard = 4
, и т. д.
}
Хочется в log-е видеть сообщения вида:
получено 12 байт с устройства "itRS232"
превышен интервал ожидания на устройстве "itEthCard"

Пока сделано топорно:
switch (it){
case itKeyBoard: str = "itKeyBoard";
break;
case itRS232: str = "itRS232";
break;
case itUSB: str = "itUSB";
break;
case itEthCard: str = "itEthCard";
break;
default:
, и т. д.
}

Я точно знаю, что исполняемый файл имена enumов хранит. GDB эти имена вытаскивает, причем из блоков памяти моего процесса. Как это можно сделать в коде моей программы?:confused:[HTML][/HTML]
5.4K
05 октября 2006 года
Svyatozar
221 / / 11.09.2006
[QUOTE=Салтаев Д. П.]Я точно знаю, что исполняемый файл имена enumов хранит. GDB эти имена вытаскивает, причем из блоков памяти моего процесса. Как это можно сделать в коде моей программы?:confused:[HTML][/HTML][/QUOTE]
Никак. Даже если компилятор вставляет исходники в выполняемые файлы - на это нельзя полагаться.

Да, в Си/Си++ надо определять енум, а для него еще и массив константных строк.
309
06 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Кстати, если при отладке программы в строку отладочного окна записать выражение с использованием перечисляемых значений, то дебаггер просто не поймёт этого. Ему нужно указывать числа.
17K
06 октября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
Понятно. Где наша не пропадала... Сделаю скрипт, пусть ищет все enumы и вставляет в массивы.

[QUOTE=Svyatozar]Даже если компилятор вставляет исходники в выполняемые файлы - на это нельзя полагаться.
[/QUOTE]

Я проводил такой эксперимент:
    скомпилировал простейшую программку с enumом, заглянул в исполняемый файл текстовым редактором - мой enum там
    убил исходники, чтобы GDB не догадался
    скачал исходники GDB, скомпилировал и запустил отладку моей программки
    запустил отладку отладчика из KDevelop ... :eek: ... до конца не понятно, но видно, что GDB лазает по памяти отлаживаемого процесса и каким-то образом достает оттуда имена enumов
10
06 октября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Салтаев Д. П.]до конца не понятно, но видно, что GDB лазает по памяти отлаживаемого процесса и каким-то образом достает оттуда имена enumов[/QUOTE]
Если это не отладочная инфа, то это - RTTI.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог