blob: 6d6929cd2830f5e14ab7a20bd5c64b85f4205d2f [file]
/*
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
import collections.nextOrNull
import hprof.item
import hprof.normalize
import hprof.readProfile
import hprof.write
import kdump.hprof.toHProfProfile
import kdump.item
import kdump.readDump
import text.prettyPrintln
import java.io.File
import java.io.PushbackInputStream
fun main(args: Array<String>) {
main(args.iterator())
}
fun main(args: Iterator<String>) {
when (args.nextOrNull()) {
"print" ->
args.nextOrNull()?.let { format ->
args.nextOrNull()?.let { pathname ->
when (format) {
"kdump" -> mainPrintKdump(pathname)
"hprof" -> mainPrintHprof(pathname)
else -> null
}
}
}
"convert" ->
args.nextOrNull()?.let { inFormat ->
args.nextOrNull()?.let { inPathname ->
args.nextOrNull()?.let { outFormat ->
args.nextOrNull()?.let { outPathname ->
when (inFormat) {
"kdump" ->
when (outFormat) {
"hprof" -> mainConvertKdumpHprof(inPathname, outPathname)
else -> null
}
else -> null
}
}
}
}
}
else -> null
} ?: mainUsage()
}
fun mainUsage() {
println("Usage:")
println(" kdumputil print kdump <file>")
println(" kdumputil print hprof <file>")
println(" kdumputil convert kdump <file> hprof <file>")
}
fun mainPrintKdump(pathname: String) {
File(pathname).readDump().let { prettyPrintln { item(it) } }
}
fun mainPrintHprof(pathname: String) {
File(pathname).readProfile().let { prettyPrintln { item(it) } }
}
fun mainConvertKdumpHprof(inPathname: String, outPathname: String) {
File(inPathname)
.inputStream()
.buffered()
.let { PushbackInputStream(it) }
.readDump()
.toHProfProfile()
.normalize()
.run { File(outPathname).write(this) }
}