Web-разработка, иностранные языки, Eclipse и разные разности

Портфолио

Санскрит

Verbarium

Проблема со знаками ??? в Memory Rendering (HexRendering) в Eclipse

20.01.2018

Условия возникновения:

Если при запуске отладочной сессии не было остановки на брейкпоинте, останов случился по нажатию на кнопку "Suspend", то в HexRendering появляются знаки ??, которые не исчезают и при дальнейшей отладке

Причина:

Знаки вопроса в HexRendering появляются в тех случаях, когда у MemoryByte не установлен флаг MemoryByte.READABLE. В моем случае этого произошло, поскольку при начале отладке не было события Suspend и, соответственно, не был получен ответ на GDB команду "-data-read-memory". Проверка происходит в классе HexRendering на строке 43:

if (data[i].isReadable())

Строка со знаками вопроса находится в переменной paddedStr, определенной выше

После того, как я нажимаю на кнопку "Suspend", в GDB логе вижу, что возвращаются запрашиваемые байты, однако, знаки вопроса по-прежнему остаются, даже подсвечиваются красным цветом. Почему?

Проблема заключается в том, что в DsfMemoryBlock новым полученным байтам (в которых установлен флаг MemoryByte.READABLE) происходит присвоение флагов байтов, определенных до Suspend в переменной fBlock (в которых флаг MemoryByte.READABLE не установлен)

Строки 488-489:

newBlock[distance + i].setFlags(fBlock[i].getFlags()); 
newBlock[distance + i].setHistoryKnown(true);

Решение:

Вижу несколько вариантов: один из них - принудительный refresh с пересозданием экземпляра GdbMemoryBlock, но в моем случае было проще создать наследник класса HexRendering и изменить логику проверки
Облако тегов
Меню
Архив
© Psytronica.ru 2015-2018 Наверх