Граф вызовов целого приложения

Существует ли непустяковый инструмент, который может создать граф вызовов целого приложения? Я не означаю просто получать изображение или тянуть граф вызовов посредством указывающего метода методом.

Мне нужен граф вызовов, который доступен программно, т.е. инструмент должен сбросить его в файл в текстовом режиме (например, XML) или создать граф вызовов в памяти (который становится проблематичным для крупного приложения). Граф вызовов, созданный в DB, был бы большим.

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

Я попробовал Сажу до сих пор. Однако это не может обработать даже проекты среднего размера как FreeCol (источники Java доступны). Сажа истощает 1.5 ГБ памяти на том проекте и затем катастрофические отказы JVM, как описано здесь: http://www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html

Кто-либо мог предложить, чтобы инструмент генерировал граф вызовов, как описано выше? Java или языки.NET в порядке.

19
задан Yu Hao 22 December 2018 в 15:38
поделиться

3 ответа

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

Я не использовал сажа, поэтому я не могу прокомментировать, как jProfiler стоит по сравнению с сажей, но ожидаю, что jProfiler требует 2,5-3 раза памяти по сравнению с приложением.

2
ответ дан 30 November 2019 в 05:15
поделиться

Ограничения могут быть определены как отложенные, что означает, что они проверяются при фиксации, а не во время изменения данных. См. следующие 2 ссылки:

http://www.oracle-base.com/articles/8i/ConstraintCheckingUpdates.php

http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

надеюсь, что это поможет

-121--3978026-

Ограничения могут быть помечены или определены как отложенные. В этом случае проверки ограничений могут быть «немедленными» или «отложенными». При определении ограничения можно задать значение по умолчанию/начальное значение, изначально немедленное или первоначально отложенное . Если установлено значение отложено , ограничение применяется только после фиксации транзакции.
Вы можете изменить поведение отложенных ограничений, например, с помощью

set constraints all immediate;

см. также: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

-121--3978023-

Извлечь http://semmle.com/

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

NDepend ( http://www.ndepend.com/ ) - это подобные инструменты для .NET, которые я также использовал, но я не уверен, что можно получить доступ к нему программным путем. XDepend ( http://www.xdepend.com/ ) - это их инструмент для Java, который я не использовал.

1
ответ дан 30 November 2019 в 05:15
поделиться

Наш DMS Software Reengineering Toolkit может создавать графики глобальных вызовов для C, Java и COBOL. Они вычисляются как структура данных in-memory, а затем могут быть пройдены для сбора произвольных других фактов. (Вы можете экспортировать его в какой-нибудь другой инструмент, чтобы пройтись по нему, но для большого графика вызовов время и усилия для экспорта будут доминировать время, чтобы просто проанализировать его, так что мы, как правило, не экспортировать его. YMMV.).

Относительно легко извлечь информацию из вызывного графика из высказывания абстрактной формы "CALL X(...)", потому что целевой X находится прямо там, в коде на месте вызова. Косвенные (виртуальные или вызовы методов) проблематичны тем, что реальные цели вызова не тривиальны в коде на сайте вызова, а на самом деле разбросаны по всей системе и, что еще хуже, контролируются условиями выполнения. При отсутствии какой-либо дополнительной информации конструктор графа вызовов должен предполагать, что косвенный вызов может перейти к любой цели с соответствующей сигнатурой; это вводит много ложноположительных дуг вызова на графе.

В рамках процесса извлечения графа вызова DMS использует (консервативный) глобальный анализ по точкам, чтобы определить, куда идут такие непрямые вызовы, минимизируя при этом ложноположительные срабатывания. Дополнительные примеры того, что может извлечь СУБД, и пример графика, извлеченного из системы из 250 000 функций, см. в Анализ потоков и графы вызовов .

7
ответ дан 30 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: