powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отладчик получает текстовое представление элементов множества?
18 сообщений из 18, страница 1 из 1
Как отладчик получает текстовое представление элементов множества?
    #39672795
Доброй ночи! Подскажите пожалуйста, а как отладчик получает текстовое представление элементов множества?
Я объявил перечисление и множество:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
type
  EMyEnum = (
    MyEnumA,
    MyEnumB,
    MyEnumC
  );
  TMyEnum = EMyEnum;
  TMySet = Set Of TMyEnum;


Я могу получить текстовое представление run-time при помощи RTTI примерно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function MySetToText(MySet: TMySet): String;
var MyEnum: TMyEnum;
begin
Result:='[';
for MyEnum in MySet do
    begin
    if (Result.Length>1) then
        Result:=Result+', ';
    Result:=Result+GetEnumName(TypeInfo(TMyEnum), Ord(MyEnum));
    end;
Result:=Result+']';
end;

procedure TForm1.Button1Click(Sender: TObject);
var S: TMySet;
begin
S:=[MyEnumA, MyEnumC];
ShowMessage(MySetToText(S));
end;


Но если я сделаю так:
Код: pascal
1.
2.
3.
4.
5.
  EMyEnum = (
    MyEnumA = 0,
    MyEnumB = 15,
    MyEnumC = 30
  );


То код перестаёт компилироваться с ошибкой:
[dcc32 Error] : E2134 Type 'TMyEnum' has no type info
И так же GetTypeData(TypeInfo(TMySet)).TypeData.CompType тоже равно nil.

Но при этом отладчик всё равно в Watches показывает переменные типа TMyEnum и TMySet в виде имён.
Как именно он это делает? Могу ли я делать так же run-time? Хотя тут мне больше любопытно, чем для практики...
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39672801
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чародей УченикаКак именно он это делает?

Через отладочную информацию в DCU файлах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39672805
Инспектор объектов получает через RTTI. А через что получает отладчик я как-то просто не задумывался.
Столкнувшись с фактом что инспектор навернулся, а отладчик как ни в чём не бывало получает, стало очевидно что последний - не из RTTI.
Собственно я и предпологал что возможно в отладочной информации что-то могло остаться, только думал что берёт из exe. Точно из DCU?

Ну а допустим у меня всё ещё имеются DCU, я их не удалял - могу ли в теории сделать run-time так же как отладчик?
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39672827
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Чародей УченикаИнспектор объектов получает через RTTI. А через что получает отладчик я как-то просто не задумывался.
Столкнувшись с фактом что инспектор навернулся, а отладчик как ни в чём не бывало получает, стало очевидно что последний - не из RTTI.
Собственно я и предпологал что возможно в отладочной информации что-то могло остаться, только думал что берёт из exe. Точно из DCU?

Ну а допустим у меня всё ещё имеются DCU, я их не удалял - могу ли в теории сделать run-time так же как отладчик?

элементарно
Код: pascal
1.
2.
3.
4.
function EMyEnum _Name(Value : EMyEnum ) : String ;
begin
     Result := GetEnumName(TypeInfo(TSymbolType),Integer(Value));
end ;
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39672905
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C'est la vie.
уверен, ты бы тоже не стал заморачиваться с такими клиентами, которые используют вместо приличного перечисления банальный набор констант.
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673032
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чародей УченикаНо если я сделаю так:
Код: pascal
1.
2.
3.
4.
5.
  EMyEnum = (
    MyEnumA = 0,
    MyEnumB = 15,
    MyEnumC = 30
  );


То код перестаёт компилироваться с ошибкой:Дырявые енумы не имеют TypeInfo
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673586
defecatorэлементарно
Код: pascal
1.
2.
3.
4.
function EMyEnum _Name(Value : EMyEnum ) : String ;
begin
     Result := GetEnumName(TypeInfo(TSymbolType),Integer(Value));
end ;

Что такое TSymbolType?

white_niggerДырявые енумы не имеют TypeInfoНу а этот-то не "дырявый":
Код: pascal
1.
2.
3.
4.
5.
6.
type
  EMyEnum = (
    MyEnumA = 3,
    MyEnumB = 4,
    MyEnumC = 5
  );

И всё равно
[dcc32 Error] : E2134 Type 'TMyEnum' has no type infoВидимо должно быть одновременно "не дырявый" и "с нуля".

Но вопрос-то данной темы как бы не в этом...
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673591
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Чародей Ученикаdefecatorэлементарно
Код: pascal
1.
2.
3.
4.
function EMyEnum _Name(Value : EMyEnum ) : String ;
begin
     Result := GetEnumName(TypeInfo(TSymbolType),Integer(Value));
end ;


Что такое TSymbolType?


замени на EMyEnum
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673598
Так об чём и речь в первом посте:Чародей Ученикакод перестаёт компилироваться с ошибкой:
[dcc32 Error] : E2134 Type 'EMyEnum' has no type info
И вопрос-то - а возможно run-time повторить способность отладчика? Ему type info видимо не нужен.
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673671
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чародей Ученикаа возможно run-time повторить способность отладчика?

Можно: сделай ассоциативный массив имён своих констант.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673695
При возможности/необходимости я бы мог это сделать. Это элементарно. Мне интересно как именно делает отладчик.
Компилятор создаёт ассоциативный массив имён перечисления и прячет в отладочной информации, а отладчик как-то его находит и берёт из него? Если так, то как он его находит?
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673697
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чародей Ученика,

В exe-нике точно есть.
Видимо, только ДСП :-(
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673711
зонд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оффтопCobalt747ДСП
Древесно-стружечная плита???
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673730
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чародей УченикаКомпилятор создаёт ассоциативный массив имён перечисления и прячет в отладочной информации, а отладчик как-то его находит и берёт из него? Если так, то как он его находит?

Очевидно, знает, где искать. Поищи описание отладочной информации, тоже будешь знать.
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39673884
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerЧародей УченикаНо если я сделаю так:
Код: pascal
1.
2.
3.
4.
5.
  EMyEnum = (
    MyEnumA = 0,
    MyEnumB = 15,
    MyEnumC = 30
  );


То код перестаёт компилироваться с ошибкой:Дырявые енумы не имеют TypeInfo
Попахивает скерее дырявым TypeInfo и не полным RTTI.
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39674406
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka,

интересно, а как оно в других языках, например C#?
Там есть TypeInfo, и такие "дырявые" множества?
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39674510
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, это чисто паскалевская упрощалка-удобняшка типа массивов с регулируемым началом диапазона индекса, из-за которой в итоге больше проблем, нежели пользы
...
Рейтинг: 0 / 0
Как отладчик получает текстовое представление элементов множества?
    #39674565
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
enum Suit { Diamonds = 5, Hearts, Clubs = 4, Spades };  




Да.. Какая дикость
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отладчик получает текстовое представление элементов множества?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]