linux - strace eller procmon ækvivalent til java

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg kører et C ++ program, og det siger 'ude af stand til at åbne fil', men siger ikke, hvad filnavnet er, bruger jeg normalt strace (Linux) eller procmon (Windows) for at finde ud af hvilken fil den forsøger at åbne, og hvor den leder efter det.


Jeg kan ikke gøre det med java-programmer, fordi alt dette styres fra java vm. Nogle af de krukker/klasser, jeg behandler, har konfigurationsfiler, som er valgfrie. Nogle gange ville det være rart at vide, hvad disse konfigurationsfiler (f.eks. css-filer til javafx-programmer) kaldes, især når der ikke rapporteres fejl.


Hvis jeg f.eks. Ikke har adgang til kildene, når jeg får en .jar eller .class-fil, er der et tilsvarende strace (Linux) eller procmon (windows) til java eller er det en kombination af fejlretningsindstillinger det får java VM til at liste ud af hvilke filer det forsøger at åbne, eller hvor det er på udkig efter filerne?

Bedste reference


prøv lsof i linux, som kan liste filer åbne ved processen
hvis det hvad du leder efter,
eller du kan altid vedhæfte JVM debugger.
eller hvis du ved mere om java klasselader, kan du bruge den til at finde ud af.

Andre referencer 1


Efter at have slået rundt meget, ser det ud til at det er tilbage til strace.


strace -f java xxx | egrep openat 1> files.log 2>&1


Så kig på files.log. Hvad jeg ikke værdsætter var, at java lancerer den eksekverbare som en anden proces. Strace -f sporer også de forked-processer.


openat er opkaldet til at åbne filer. Der er mange åbner på klasse, jar og .so filer. Når de er taget ud, er det de øvrige filer, der er tilbage.