Где взять названия enum-ов
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]
Никак. Даже если компилятор вставляет исходники в выполняемые файлы - на это нельзя полагаться.
Да, в Си/Си++ надо определять енум, а для него еще и массив константных строк.
Кстати, если при отладке программы в строку отладочного окна записать выражение с использованием перечисляемых значений, то дебаггер просто не поймёт этого. Ему нужно указывать числа.
[QUOTE=Svyatozar]Даже если компилятор вставляет исходники в выполняемые файлы - на это нельзя полагаться.
[/QUOTE]
Я проводил такой эксперимент:
- скомпилировал простейшую программку с enumом, заглянул в исполняемый файл текстовым редактором - мой enum там
- убил исходники, чтобы GDB не догадался
- скачал исходники GDB, скомпилировал и запустил отладку моей программки
- запустил отладку отладчика из KDevelop ... :eek: ... до конца не понятно, но видно, что GDB лазает по памяти отлаживаемого процесса и каким-то образом достает оттуда имена enumов
Если это не отладочная инфа, то это - RTTI.