2017-09-26 4 views
0

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

Répondre

0

Changé l'argument -pp -process-dir R:\...\OCLRuler\src\ pour -pp -process-dir R:\...\OCLRuler\

et il semble fonctionner très bien ... Les fantômes se promènent toujours là, mais il y a des fichiers de résultats dans le dossier de sortie!

[edit:] Oups, ceci est devenu une nouvelle question ... Les fichiers de sortie sont ... VIDE !!! Comme je l'ai dit, il y a encore des avertissements sur les fantômes et les sorties sont générées pour tous les fichiers (java et classe)

Pourquoi sont-ils vides ?? [/ edit]

0

Cela pourrait bien être un problème avec l'interface de code source de Soot, qui est fortement dépassée à ce jour. Je recommanderais de compiler les fichiers .java en .class et en donnant ceux à Soot.

+0

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é –

+0

Le projet que je vise l'analyse est en Java 8. –