asm.js - получает значение указателя
Asm.js имеет дело с большим количеством математики и для простоты использует целые числа как указатели.
Я пытаюсь отладить некоторый код, но я не вижу фактические значения, только "указатели" в asm.js.
Есть ли способ перейти прямо к стоимости?
2 ответа
Если у вас есть доступ к Module
объект, скажем, в инструментах разработчика, и если у вас есть значение указателя и вы знаете, на какую переменную он указывает, вы можете использовать getValue
, Например, чтобы получить 32-разрядное целое число в ячейке памяти 2434
Вы бы позвонили:
Module.getValue(2434, 'i32');
Ты можешь использовать i8
, i16
, i32
, i64
, float
или же double
для типа данных в ячейке памяти. Я не знаю, есть ли другие типы, которые вы можете передать.
Причина, по которой он использует int, не для простоты, а для безопасности: код не должен быть в состоянии индексировать за пределами ArrayBuffer: кучи, которую вы видите, имеют дополнительное косвенное обращение точно так же, как usespace не может видеть физические адреса и вместо этого только видит виртуальные адреса (за исключением того, что asm.js не фрагментирует основное хранилище).
Что ты пытаешься сделать?
Если вы пытаетесь получить значение из отладчика, тогда что-то может быть возможным (определите базовый адрес ArrayBuffer, используя точку останова на его конструкции, добавьте индекс).
Если вы хотите получить значение из своего кода C++, скомпилированного в asm.js, то это не сработает, потому что это поставит под угрозу безопасность.