est la commande ici, je l'utilise sur shell de commande WIndows 10:SOOT - CompilationDeathException (et une armée fantôme)
java
-cp .\soot-2.5.0.jar soot.Main
-cp ".;R:\...\OCLRuler\lib;C:\...\jdk1.8.0_144\bin"
-pp -process-dir R:\...\OCLRuler\src\
-src-prec java
-d R:\...\test\soot
-allow-phantom-refs
-main-class OCLRuler
Quand je l'exécute, je reçois la sortie suivante:
Soot started on Tue Sep 26 13:28:32 EDT 2017
Warning: java.dyn.InvokeDynamic is a phantom class!
Warning: Main is a phantom class!
Warning: MainMulti is a phantom class!
Warning: oclruler.a_test.MainRawTesting is a phantom class!
... all of them (100+ lines)...
Warning: oclruler.utils.ToolBox is a phantom class!
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found.
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found.
Exception in thread "main" soot.CompilationDeathException: Could not compile
at soot.javaToJimple.JavaToJimple.compile(JavaToJimple.java:104)
at soot.javaToJimple.InitialResolver.formAst(InitialResolver.java:117)
at soot.JavaClassSource.resolve(JavaClassSource.java:54)
at soot.SootResolver.bringToHierarchy(SootResolver.java:215)
at soot.SootResolver.bringToSignatures(SootResolver.java:239)
at soot.SootResolver.processResolveWorklist(SootResolver.java:154)
at soot.SootResolver.resolveClass(SootResolver.java:124)
at soot.Scene.loadClass(Scene.java:448)
at soot.Scene.loadClassAndSupport(Scene.java:433)
at soot.Scene.loadNecessaryClasses(Scene.java:1076)
at soot.Main.run(Main.java:167)
at soot.Main.main(Main.java:141)
Tous Les bibliothèques utilisées dans le projet OCLRUler sont incluses dans OCLRUler/lib
et toutes les sources dans OCLRuler/src
. Le répertoire de sortie n'est pas inclus dans le répertoire de suie. En outre, le projet compile (je travaille dessus et avec). Le répertoire .
contient tous les pots de suie/jasmin/heros.
Cependant, toutes les classes sont considérées comme fantômes, et les abords de compilation de suie parce que (je suppose) il manque des corps de ces classes. Je veux dire que "EvaluatorOCL" (c'est-à-dire, devinant toujours, la source de CompilationDeathException) est une "classe Phantom".
Qu'est-ce qui ne va pas?
Dois-je ajouter tous les paquets dans le chemin de classe de Soot?
J'ai essayé toutes sortes d'expressions de ligne de commande - jusqu'à ce que je sois complètement perdu. Quelqu'un a une idée sur la question?
Merci beaucoup. Edouard
Merci Eric. Mais en utilisant le dossier bin (contenant les fichiers de classe), avec '-src-prec class', j'obtiens un' RuntTimeException: Impossible de charger CLassfile: oclruler.genetics.Oracle' Qui est un fichier existant et compilé –
Le projet que je vise l'analyse est en Java 8. –