Не уверен, что сюда с вопросом… но…
Сейчас копаюсь в коде PABC (свой плагин делаю) и пока не сообразил, как вытянуть индекс первой ячейки массива в режиме Debug?
Глянул в лист значений локальных переменных … и там с нуля!!!
Пока добрался до списка локальный переменных:
Debugger.ProcessEventArgs.Process.LocalVariables из события Process_DebuggeeStateChanged
где Process из WorkbenchServiceFactory.DebuggerManager.DebuggedProcess
Элементы списка экземпляры класса Debugger.Value
Примитивные типы вроде как через строку можно получить.
Value с массивом получают так:
var value = e.Process.LocalVariables.ToArray();
var array = value[3].GetMembers()[0]
Ну и сами значения через
var elms = array.GetArrayElements().ToArray();
А вот ссылку на экземпляр “статического массива” пока не получил… Не понял пока…
Нет экземпляра, нет данных о классе и members…
Есть еще мысль залезть в сам модуль и через рефлексию получить сам экземпляр класса, но надеялся через IDE данные получить.
Некий рекорд написания кода и процесса пошаговой отладки, чтобы затем можно было визуализировать в другой программе. С изменением текста и перемещением курсора быстро разобрался. А вот с отладкой немного запутался. Позицию текущей выполняемой строки получил. Имена и значения локальных переменных из этого списка легко получить. А вот с массивом завис. Собственно, мне только простые вещи нужны, для учебных видео, для школьников. В основном в объеме ЕГЭ. Поэтому перечисления, ООП и прочие сложности не нужны.
Пожалуйста, добавьте поддержку индексов типа BigInteger в динамических массивах. Из-за того, что её нет, мне в моём проекте придётся дублировать половину или треть кода программы.
Если вы её не добавите, прошу сказать, как перевести значение в BigInteger в значение в Integer, если значение в BigInteger точно лежит в допустимых пределах для Integer (MinInteger<=BigInteger<=MaxInteger).
Я легко могу представить себе такой массив, и даже больше. Но одновременно представить использование его в Паскале мне трудно. Если нужен такой массив, может надо подумать еще и об языке?
Чуть больше двух миллиардов степеней свободы - может быть и не среднее число в некоторых расчетах, однако ничем не выдающееся. Матрица 100 на 100 тысяч элементов вполне разумная. Насчет числа атомов - вот число Авогадро. И вот именно поэтому методами молекулярной динамики пока что сложно воспользоваться для чего-то близкого к макроскопическому размеру.
Если матрица разреженная - их и хранят и обрабатывают по совсем другим алгоритмам. Если плотная - смысл хранить триллионы, если их обработать не хватит никаких вычислительных ресурсов? И пишут там на фортране однозначно, не на Паскале.
Получается, что несмотря на наличие средств в самом .Net, выделение непрерывных областей для огромных структур с параллельными “фантомами” - особенно для 32-битных процессов - не спасёт ни дефрагментация, ни принудительный сбор мусора, ни файл подкачки, ни рейд-массив, ни масштабируемость.