# Pfadanalyse/Aufrufanalyse



## nodder (1. Mrz 2018)

Hallo zusammen,
ich versuche hie ein Problem in einer recht komplexen Software zu finde und dafür muss ich für ein Objekt herausfinden, wo eine bestimmte Methode aufgerufen wird.

Vereinfachtes Beispiel: Ich habe ein Objekt der Klasse O:

```
public class O {
    private String variable;
    public void setVariable(String v){
       this.variable = v;
    }
    public String getVariable() {
       return variable;
    }
}
```

Das wandert in meiner Software in eine Methode "methodeEins(O o)" und nach einer gewissen Aufrufkette landet das Objekt dann in "methodeZwei(O o)".

Soweit so unspektakulär.

Mit der Call Hierarchy von eclipse kann ich mir auch die Pfade zwischen den beiden Methoden zusammensuchen, das ist auch noch nicht sonderlich schwierig. Was mich aber interessiert sind alle Stellen an denen der Wert von "variable" geändert wird, also wo "setVariable(String v)" aufgerufen wird. Dafür suche ich jetzt halt ein Tool, das mir alle Verästelungen mit allen potenziellen aufrufen von "setVariable(String v)" ausgibt. Also nicht einfach die "References" sondern wirklich alle genauen Aufrufpfade die zwischen den beiden Methoden vorkommen können.

Idealerweise in Eclipse, nutze aber auch gerne andere tools.

Keine Ahnung, ob es für diese Anforderung nen Fachbegriff gibt. Sieht für mich eigentlich nach einer gängigen Analyse Anforderung aus. Ich kann aber beim besten Willen nichts finden. Ich weiss eigentlich nicht mal, wonach ich suchen soll.

Vielleicht kann mir ja einer nen entscheidenden Tipp geben.

Danke schonmal.


----------



## Flown (1. Mrz 2018)

Du bist doch mit Call Hierarchy doch gut bedient. Lass doch einfach das aufbauen für die Methode setXXX.


----------



## nodder (1. Mrz 2018)

Hi, danke für die Antwort.
Genau das will ich ja nicht. Da bekomme ich ja ALLE Calls der Methode. Ich will aber eben explizit nur die, die während des Stackdurchlaufs von methodeEins bis methodeZwei möglich sind.

Vereinfacht ausgedrückt, will ich wissen, wo überall die Methode potenziell verwendet wurde, während sich der Thread in einem abgesteckten Codebereich befindet.


----------



## Flown (1. Mrz 2018)

Ich kenn jetzt kein Tool, dass explizit solcha Pfade filtert, aber im Debugger kannst du ja sehen, ob die Methode ausgeführt wird und wer der Caller ist.


----------



## nodder (1. Mrz 2018)

Ist in dem Konext aus zwei Gründen nicht möglich, ich habe keinen Zugriff auf das laufende System und mein Problem (Bug) lässt sich nicht so ohne weiteres reproduzieren. Das ist genau der Grund, warum ich eben genau diese Informationen habe um zu analysieren, was passiert sein könnte.


----------



## Flown (1. Mrz 2018)

Wow dann hilft trotzdem nur mit Hilfe der Call Hierarchy das zu analysieren. Wie schon gesagt mir ist jetzt kein Tool bekannt was sagt wie du von a nach b kommst.


----------



## Barista (26. Mrz 2018)

Du kannst Dir so ein Tool mit der ASM Bytecode Lib selber schreiben.

https://jaxenter.de/bytecode-analyse-im-eigenbau-17102


----------

