2009-04-17 2 views
14

Как устаревший и болезненный, так это - я работаю в компании, которая продолжает активно использовать VB6 для большого проекта. Фактически, 18 месяцев назад мы столкнулись с лимитом идентификатора 32k.Точный доступ к ограничениям VB6

Не желая сдаваться на большой базе кода и переписывать все в .NET, мы разбили наше приложение на основной исполняемый файл и несколько поддерживающих DLL-файлов. На этой неделе мы снова столкнулись с лимитом 32 тыс.

Проблема заключается в том, что ни один инструмент, который мы можем найти, не укажет нам, сколько уникальных идентификаторов используется нашим источником. У нас нет точного способа оценить, как наши усилия уменьшают количество идентификаторов или насколько мы близки к пределу, прежде чем мы достигнем его.

Кто-нибудь знает инструмент, который сканирует источник проекта и возвращает некоторые точные показатели и статистику?

ответ

2

ОК. Средство просмотра показателей проекта, которое является частью инструмента Project Analyzer от Aivosto, будет делать именно то, что вы хотите. Я включил скриншот, а также ссылку на список метрик, которые включают в себя количество переменных и т.д.

Metrics List

alt text http://www.aivosto.com/project/help/pm-main.gif

+0

Я хочу, чтобы этот инструмент работал ... Он показывает количество объявлений переменных (как и CodeSMART), но он по-прежнему не показывает количество уникальных идентификаторов. Если у вас есть три подсетей, в которых все содержат одну и ту же переменную «myvar», то она считается тремя объявлениями переменных, но только одним уникальным идентификатором. Анализатор проекта показывает только количество объявлений ... –

1

CodeSmart от AxTools очень хорошо.
alt text http://www.axtools.com/products/showcs2k3vb/CodeStatistics.gif

+1

Да, но запрашивающему необходимо подсчитать количество объявлений переменных, и я не вижу, где именно это показывает код CodeSmart. Можете ли вы сказать нам, где это должно быть? Благодарю. –

+0

Он есть, но у меня нет хостинг изображений, чтобы исправить скриншот с сайта производителя. Если вы загрузите пробную версию и установите ее, вы можете запустить ее и убедиться сами. – MaSuGaNa

+0

У меня установлен CodeSMART, но я не могу его найти. Можете ли вы указать «путь» дерева, где отображается это значение? –

-1

Кажется, что у Compuware's DevPartner был такой анализ кода. Я не знаю, поддерживает ли текущая версия Visual Basic 6.0. (Но, по крайней мере, существует 14-дневная пробная версия)

0

Вы можете получить это от инструмента, извлеченной идентификаторы из VB6 кода. Тогда вам нужно всего лишь отсортировать список, устранить дубликаты и измерить размер списка. У нас есть source code search engine, который разбивает исходный код на языковые маркеры («лекс»), причем некоторые из этих токенов являются именно этими идентификаторами. Это будет содержать именно нужные вам данные.

Но, возможно, есть еще один способ решить вашу проблему: выяснить, какие имена переменных встречаются редко и заменить их набором стандартных имен (например, «темп»). Так что вы действительно хотите, это количество чисел каждого имени переменной, чтобы вы могли сортировать «небольшое количество ссылок». Те же данные лексера могут предоставить эту информацию.

Тогда все, что вам нужно, - это инструмент, позволяющий переименовать идентификаторы низкого уровня в нечто из стандартного набора. Мы предлагаем обфускаторы, которые заменяют одно имя другим, что, вероятно, может это сделать.

[Обновление от октября 2014 года]. Просто был длинный разговор с кем-то с этой проблемой. Оказывается, есть довольно концептуальный ответ на основание инструмента, и это называется register coloring, который выделяет фиксированное количество регистров произвольному числу операндов. Это работает путем вычисления «интерференционного графа» над операндами; и двум операндам, которые не «мешают», может быть присвоен один и тот же регистр. Можно было бы использовать это, чтобы выделить 2^16 доступных имен имен переменных для произвольного количества идентификаторов, если граф помех недостаточно плох. Я предполагаю, что это не так. YMMV, и кто-то еще должен построить такой инструмент, нуждающийся в том, чтобы парсер и машина VB6 вычислили такой график. [Проверьте мою биографию].

0

Cheat - создать неиспользуемый класс с #### уникальными переменными в нем. Используйте Excel или что-то для генерации алфавитных уникальных имен переменных. Удалите класс из проекта, когда вы достигнете предела, или закомментируйте блоки из 100 уникальных переменных.

Я предпочел бы опираться на компилятор (который определяет, сколько переменных слишком много), чем на любом стороннем инструменте.

(о падла, жаль Necro - не заметил даты)

1

Компания Я работаю также имеет большой VB6 проект, который встречается ограничение идентификатора. Я разработал способ точно подсчитать количество оставшихся идентификаторов, и это было включено в наш процесс сборки для этого проекта.

После попытки нескольких инструментов без успеха я наконец понял, что сама VB6 IDE точно знает, сколько идентификаторов осталось. Фактически, VB6 IDE выдает ошибку «из памяти» при добавлении одной переменной за ее пределы.

Воспользовавшись этим фактом, я написал проект надстройки VB6, который сначала компилирует загруженный в настоящий момент проект в среде IDE, а затем добавляет в проект уникальные имена переменных, пока не выдает ошибку. Когда возникает ошибка, она записывает количество идентификаторов, добавленных до ошибки, в число оставшихся идентификаторов.

Этот номер хранится в файле в месте, известном нашему автоматизированному процессу сборки, который затем считывает это число и сообщает об этом команде разработчиков. Когда он становится ниже ценности, с которой нам удобно, мы планируем некоторое время рефакторинга и переходим больше кода из этого проекта в проекты DLL. Мы используем это в производстве уже несколько лет и зарекомендовали себя как надежный процесс.

Чтобы непосредственно ответить на вопрос, использование надстройки - единственный способ узнать точное количество оставшихся идентификаторов. Хотя я не могу использовать код надстройки, который использует наш проект, я могу сказать, что не так много кода, и разработка не заставила себя долго ждать.

Microsoft имеет приличное руководство для того, как создать Add-In, который может получить вы начали: https://support.microsoft.com/en-us/kb/189468

Вот некоторые важные детали, характерные для подсчета идентификаторов:

  • VB6 IDE не будет последовательно вызывать ошибку, когда из идентификаторов до тех пор, пока не будет скомпилирован текущий загруженный проект. Наша надстройка программно делает это, прежде чем добавлять идентификаторы, чтобы гарантировать точный подсчет. Если проект не может быть скомпилирован, то точное количество не может быть получено.
  • Для нового пустого проекта VB6 доступно 32 500 идентификаторов.
  • Учитываются только имена уникальных идентификаторов. Две локальные переменные с одинаковым именем в двух разных подпрограммах считаются только одним идентификатором.
Смежные вопросы