hprof profiler шығысы «lineno» мәнінен тәуелсіз сызықтық нөмірлерді қамтымайды

Мен жүгіріп жүрмін

java -cp some:jars:out \
-agentlib:hprof=cpu=times,format=a,file=java.hprof.txt,lineno=y,doe=y com.foo.Benchmark \
< /dev/null

ал шығарылымда сызық нөмірлері жоқ стек кадрларды аламын

THREAD START (obj=50000150, id = 200002, name="HPROF gc_finish watcher", group="system")
THREAD START (obj=50000151, id = 200001, name="main", group="main")
THREAD START (obj=50000281, id = 200003, name="Thread-1", group="main")
THREAD END (id = 200003)
THREAD END (id = 200001)
THREAD START (obj=500002a5, id = 200004, name="DestroyJavaVM", group="main")
THREAD END (id = 200004)
TRACE 307081:
        com.foo.Benchmark.methodName(Benchmark.java:Unknown line)
        com.foo.Benchmark.anotherMethodName(Benchmark.java:Unknown line)
        ...

lineno = y параметрін lineno = n деп өзгертсем, мен белгісіз желі дегенді аламын.

Мен сабақтарды -g арқылы жасадым. Менің javac сияқты көрінеді

javac -g -Xlint -encoding UTF-8 -source 1.5 -d out -classpath ... src/main/com/foo/*.java

Жол кодтары бар екеніне көз жеткізу үшін .class файлдарын тексердім:

javap -classpath out -c -l com.foo.Benchmark

көптеген нәрселерді көрсетеді

  LineNumberTable: 
   line 1077: 0
   line 1078: 8
   line 1079: 14
   line 1080: 21
   line 1082: 23
   line 1083: 31
   line 1084: 43

Жолдың нөмірін шығаруға кедергі келтіретін кейбір жалау комбинациясын қолданамын ба?

3

1 жауаптар

Мен дәл сол мәселеге тап болдым, бірақ -g -мен дерекқорды құруға көмектесті. -g -мен құрастырылғаннан кейін, осы сияқты жол нөмірін көремін (басқаша көрмеймін, -g опциясы жоқ) -

LineNumberTable:
 line 16: 0
 line 17: 8
 line 18: 12
 line 19: 20
 line 18: 29
 line 21: 35

Енді, егер мен бұны іске асыратын болсам -

java -cp "./build/classes" -agentlib:hprof=heap=sites,depth=20  org.sample.welcome.Main a b c

Мен пайдаланушы анықтайтын сыныптар үшін сызық сандарын аламын. Сіздің ісіңізде не болып жатқанын білмеймін, бірақ бұл менің ескертулерім -

  • -g жоқ javac пайдалану: Егер -lineno (әдепкі y ) болса, code>, мен әлі күнге дейін сыныптың сандарын класстың көпшілігінде көрмеймін, тек пайдаланушы анықтаған сыныптар (жоғарыда Main ). Егер -lineno параметрін n деп орнататын болсам, онда кез келген сынып үшін кез келген жолдың нөмірін көрмеймін.

  • -g көмегімен javac пайдалану: -lineno болса, y мәніне орнатылған болса, сыныптар (сіздің ісіңізде не дұрыс емес екеніне сенімді емес).

HPROF сайтынан басқа ештеңе айта алмайтын жалғыз құжаттама . Менің ойымша, бір опция қосымша аргументтерді азайтуға және нәтижелерді көруге болады.

Ескерту: Жоғарыда келтірілген мысалда JDK 1.6 пайдаланамын

1
қосылды
Көрсеткіш үшін рақмет. Менде бұл тестілеудің оңай болуы үшін орнатылмаған, бірақ мен мұны есте ұстаймын.
қосылды автор Mike Samuel, көзі
Майк мысалында cpu = times опциясы бар, сіздің - heap = сайттар . Кейінгі нұсқа жолдың нөмірін шығарады, ал бірінші - ЕМЕС.
қосылды автор Ilya Silvestrov, көзі