Analyze a Stack Trace and Find the Root Cause
Paste a stack trace from any of 8 languages and get the root cause, the first frame of your own code, and every frame split into function, file, line, and column.
About this tool
stack-trace-analyzer turns a pasted crash log into a readable map of what failed. It understands common stack trace formats from Java/Kotlin/Scala, Python, JavaScript/TypeScript/Node, Go, Ruby, C#/.NET, Rust, and PHP, then reports the detected language, the reported exception, the root cause at the end of the exception chain, and the first frame that looks like your own code.
Use it when a trace is long, nested, or mixed with framework calls. The analyzer normalizes frame order so the throw or panic site appears first by default, marks each frame as user or framework, and can hide framework frames entirely when you only want the code paths you control. If automatic classification is too broad, add comma-separated Your code prefixes such as com.example, /app/src, or my_service.
Worked example
Input:
Exception in thread "main" com.example.SvcException: could not start
at com.example.App.start(App.java:42)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at com.example.Db.connect(Db.java:17)
Default report highlights:
Language: Java / Kotlin / Scala (auto-detected)
Reported: com.example.SvcException: could not start
Root cause: java.net.ConnectException: Connection refused
First user frame: com.example.Db.connect(Db.java:17)
Set Output to table for a Markdown frame table or json when you want a structured exception chain for another script. Enable Hide framework frames to drop standard-library, package-manager, runtime, and framework frames from the displayed output.
Options and limits
- Language defaults to
auto. Force a language for short or truncated traces. - Output chooses readable report, Markdown table, or JSON.
- Your code prefixes is an allow-list. When set, only functions or file paths matching those prefixes count as user code.
- Hide framework frames removes framework rows from the rendered output but still counts them.
- List frames in call order flips the default innermost-first order to outermost-first.
- Max frames per exception accepts 1 through 2000; the default is 100.
- Input is capped at 200,000 bytes. Paste the failing trace rather than an entire application log.
- The parser is heuristic. It does not execute code, fetch source maps, symbolicate minified JavaScript, de-obfuscate Java class names, or reconstruct frames missing from the pasted trace.
FAQ
Which stack trace formats does it parse?
It handles Java-style at Class.method(File.java:42) traces including Caused by, Python Traceback blocks, JavaScript/Node at function (file:line:col) traces, Go panics and goroutine frames, Ruby, C#/.NET, Rust panics/backtraces, and PHP fatal-error traces. Use the language selector when a very short snippet cannot be detected reliably.
How does it decide what is my code?
Without prefixes it uses language-specific framework rules such as Java java.*, Node node_modules and node:internal, Python site-packages, Ruby /gems/, Rust /rustc/, and .NET System.*. If you provide Your code prefixes, those prefixes become the rule: only matching function or file paths are marked as user code.
What is the root cause?
The root cause is the innermost exception in a chain: the last Caused by in Java, the original exception behind Python __cause__ / context text, the deepest inner exception in .NET-style traces, or the single reported exception when there is no chain.
Can it symbolicate minified JavaScript or native crash dumps?
No. It only analyzes the text you paste. Source maps, debug symbols, minidumps, JVM heap dumps, and IDE-specific symbolication are out of scope. If the trace already contains file names, line numbers, and functions, this tool will structure and classify them.
Is the trace uploaded anywhere?
No. The same Rust parser runs locally in the WebAssembly page and in the CLI. Your stack trace is processed in your browser or terminal.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool stack-trace-analyzer 'Exception in thread "main" com.example.SvcException: could not start
at com.example.App.start(App.java:42)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
Caused by: java.net.ConnectException: Connection refused
at com.example.Db.connect(Db.java:17)'New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/stack-trace-analyzer/?trace=Exception%20in%20thread%20%22main%22%20com.example.SvcException%3A%20could%20not%20start%0A%09at%20com.example.App.start%28App.java%3A42%29%0A%09at%20org.springframework.boot.SpringApplication.run%28SpringApplication.java%3A301%29%0ACaused%20by%3A%20java.net.ConnectException%3A%20Connection%20refused%0A%09at%20com.example.Db.connect%28Db.java%3A17%29&language=auto&output=report&user_packages=com.example%2Cmyapp&hide_framework=true&reverse=true&limit=100Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
