Skip to content

Commit af9e990

Browse files
committed
feat: preparation for Release 3.0
1 parent f5d2b0b commit af9e990

File tree

11 files changed

+77
-25
lines changed

11 files changed

+77
-25
lines changed

README.md

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11

22
# TDA - Thread Dump Analyzer
3+
4+
> [!IMPORTANT]
5+
> **2026-01-30 - TDA 3.0 is now available!** 🚀
6+
> This major release brings significant enhancements:
7+
> * **Extended MCP Server**: Now with **Carrier Thread Pinning** detection and support for **SMR (Safe Memory Relocation)** parsing.
8+
> * **Modernized UI**: Completely refreshed look and feel using **FlatLaf**.
9+
> * **Usability Improvements**: Fixed several long-standing issues, including improved split-pane management and faster parsing.
10+
> * **Native macOS Support**: Now providing a dedicated macOS binary.
11+
> * **Logging**: Especially for troubleshooting in MCP Mode.
12+
313
[![Java CI with Maven](https://github.com/irockel/tda/actions/workflows/build.yml/badge.svg)](https://github.com/irockel/tda/actions/workflows/build.yml)
414
[![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/irockel/tda/issues?q=is%3Aissue+is%3Aopen+label%3Adependencies)
515
[![Dependencies](https://img.shields.io/librariesio/github/irockel/tda)](https://libraries.io/github/irockel/tda)
@@ -26,6 +36,7 @@ TDA supports Java 1.4.x through Java 21+, including specialized support for **Vi
2636
- [4. JSON-based Thread Dumps (Experimental)](#4-json-based-thread-dumps-experimental)
2737
- [5. MCP Server (Headless Analysis)](#5-mcp-server-headless-analysis)
2838
- [🏗 Building from Source](#-building-from-source)
39+
- [🛠️ Troubleshooting](#️-troubleshooting)
2940
- [📜 Changelog](CHANGELOG.md)
3041
- [📜 License](#-license)
3142

@@ -159,18 +170,6 @@ The MCP server exposes the following tools:
159170
| `get_zombie_threads` | None | Returns a list of zombie threads (unresolved SMR addresses) with timestamps and dump names. |
160171
| `clear` | None | Resets the server state and clears the internal thread store for a new log file. |
161172

162-
#### Troubleshooting
163-
164-
- **Logging**: TDA maintains a log file for troubleshooting. The location depends on your operating system:
165-
- **macOS**: `~/Library/Logs/TDA/tda.log`
166-
- **Windows**: `%LOCALAPPDATA%\TDA\Logs\tda.log`
167-
- **Linux/Unix**: `~/.tda/logs/tda.log`
168-
You can check this file if TDA or the MCP server doesn't behave as expected.
169-
- **Path issues**: Ensure you use absolute paths for the JAR file and the log files you want to parse.
170-
- **Headless mode**: If you see errors related to `java.awt.HeadlessException`, double-check that `-Djava.awt.headless=true` is set.
171-
- **Permissions**: Make sure the user running the MCP server has read permissions for the log files.
172-
- **Memory issues**: If you see `OutOfMemoryError`s, you can increase the memory allocation by setting `-Xmx`.
173-
174173
#### 🤖 AI Agent Configuration (Cursor / Junie)
175174

176175
To ensure that AI agents use TDA efficiently and don't attempt to read large log files directly (which is slow and expensive), you should configure a **System Prompt**.
@@ -221,6 +220,40 @@ The resulting standalone JAR will also be located in the `tda/target/` directory
221220

222221
---
223222

223+
## 🛠️ Troubleshooting
224+
225+
If you encounter issues while using TDA, check the following sections for guidance.
226+
227+
### 1. Logging
228+
TDA maintains a centralized log file to help diagnose issues. If something isn't working as expected, the log file is the first place to look.
229+
230+
#### Log File Locations
231+
* **macOS**: `~/Library/Logs/TDA/tda.log`
232+
* **Windows**: `%LOCALAPPDATA%\TDA\Logs\tda.log`
233+
* **Linux/Unix**: `~/.tda/logs/tda.log`
234+
235+
#### Error Indicators (UI Mode)
236+
In standalone or plugin mode, TDA will display a **red dot** in the status bar (next to the memory indicator) if a critical error has occurred. Hover over the dot to see a tooltip reminding you to check the log file.
237+
238+
### 2. MCP Server Specifics
239+
Running TDA as a headless MCP server has specific requirements:
240+
241+
* **Headless Environment**: Ensure you pass `-Djava.awt.headless=true` when running the JAR. TDA is a Swing-based application, and the MCP mode must bypass UI initialization.
242+
* **Std-in/Std-out Pollution**: The MCP protocol communicates via `stdin` and `stdout`. Avoid using any commands or scripts that print additional information to `stdout`, as this will corrupt the JSON-RPC stream and cause the AI client to lose connection.
243+
* **Absolute Paths**: When calling `parse_log`, always use **absolute paths** for the log file. The working directory of the MCP server might not be what you expect depending on how your AI client (e.g., Claude Desktop) launches it.
244+
* **Permissions**: Ensure the user running the AI client has read permissions for the log files being analyzed.
245+
246+
### 3. Memory Management
247+
Thread dumps from large production systems can be hundreds of megabytes.
248+
249+
* **OutOfMemoryErrors**: If TDA crashes or fails to parse a large file, increase the heap size using the `-Xmx` flag:
250+
```bash
251+
java -Xmx2g -jar tda.jar
252+
```
253+
* **Max Logfile Size**: TDA has a safety limit for log file sizes. You can adjust this in the **Preferences** dialog (UI mode) or by manually editing the configuration if necessary.
254+
255+
---
256+
224257
## 📜 License
225258
TDA is licensed under the **Lesser GNU General Public License (LGPL)**.
226259

docs/index.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,25 @@ <h1 class="text-4xl md:text-6xl font-extrabold mb-6 leading-tight">
6363
<p class="text-xl text-slate-300 mb-6 max-w-2xl mx-auto">
6464
TDA (Thread Dump Analyzer) is a powerful tool for parsing and analyzing Java thread dumps, helping you identify performance bottlenecks and deadlocks in seconds.
6565
</p>
66+
<!-- TDA 3.0 Announcement Box -->
67+
<div class="mb-12 inline-block bg-blue-600/30 backdrop-blur-md border border-blue-400/50 rounded-2xl p-6 text-left max-w-3xl mx-auto shadow-2xl">
68+
<div class="flex items-center mb-4">
69+
<span class="bg-blue-500 text-white text-xs font-black px-3 py-1 rounded-full uppercase tracking-wider mr-3">New Release</span>
70+
<h2 class="text-2xl font-bold text-white">TDA 3.0 is here! 🚀</h2>
71+
</div>
72+
<p class="text-blue-100 mb-4 font-medium">
73+
This major update modernizes the TDA experience and brings powerful new analysis capabilities to both the GUI and the MCP server.
74+
</p>
75+
<ul class="grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-2 text-sm text-slate-200">
76+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span><b>Carrier Thread Pinning</b> detection in MCP</span></li>
77+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span><b>SMR (Safe Memory Reclamation)</b> parsing (also in MCP)</span></li>
78+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span><b>Native Stack Information in MCP</b> parsing</span></li>
79+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span>Modern UI with <b>FlatLaf</b></span></li>
80+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span>Improved split-pane & usability fixes</span></li>
81+
<li class="flex items-start"><i class="fas fa-check-circle text-blue-400 mt-1 mr-2"></i> <span>Logging for Troubleshooting in MCP Mode</span></li>
82+
</ul>
83+
</div>
84+
6685
<div class="mb-10">
6786
<span class="inline-flex items-center px-4 py-1.5 rounded-full text-sm font-bold bg-blue-500/20 text-blue-300 border border-blue-500/30">
6887
<i class="fas fa-unlock-alt mr-2"></i> Free & Open Source

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>de.grimmfrost.tda</groupId>
77
<artifactId>tda-parent</artifactId>
8-
<version>2.7</version>
8+
<version>3.0</version>
99
<packaging>pom</packaging>
1010

1111
<name>TDA Parent</name>

tda-macos-binary/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>de.grimmfrost.tda</groupId>
88
<artifactId>tda-parent</artifactId>
9-
<version>2.7</version>
9+
<version>3.0</version>
1010
</parent>
1111

1212
<artifactId>tda-macos-binary</artifactId>

tda/dependency-reduced-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<artifactId>tda-parent</artifactId>
55
<groupId>de.grimmfrost.tda</groupId>
6-
<version>2.7</version>
6+
<version>3.0</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99
<artifactId>tda</artifactId>

tda/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>de.grimmfrost.tda</groupId>
77
<artifactId>tda-parent</artifactId>
8-
<version>2.7</version>
8+
<version>3.0</version>
99
</parent>
1010

1111
<artifactId>tda</artifactId>

tda/src/main/java/de/grimmfrost/tda/mcp/MCPServer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ private static int getId(String line) {
7373

7474
private static void handleInitialize(JsonObject request) {
7575
JsonObject result = new JsonObject();
76-
result.addProperty("protocolVersion", "2024-11-05");
76+
result.addProperty("protocolVersion", "2025-11-25");
7777
JsonObject capabilities = new JsonObject();
7878
capabilities.add("tools", new JsonObject());
7979
result.add("capabilities", capabilities);
8080
JsonObject serverInfo = new JsonObject();
8181
serverInfo.addProperty("name", "tda-mcp-server");
82-
serverInfo.addProperty("version", "1.0.0");
82+
serverInfo.addProperty("version", "3.0.0");
8383
result.add("serverInfo", serverInfo);
8484

8585
sendResponse(request.get("id").getAsInt(), result);

tda/src/main/resources/de/grimmfrost/tda/doc/README

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<html>
22
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
33
<body bgcolor="#f5f5f5">
4-
<h3>TDA - Thread Dump Analyzer -- Version 2.7</h3>
4+
<h3>TDA - Thread Dump Analyzer -- Version 3.0</h3>
55

6-
<p>Note: This is the 2.7 release of the software, for an usage overview see <b><a href="https://github.com/irockel/tda">README</a> on GitHub</b>.</p>
6+
<p>Note: This is the 3.0 release of the software, for an usage overview see <b><a href="https://github.com/irockel/tda">README</a> on GitHub</b>.</p>
77

88
<p>Recent changes are:</p>
99

10-
<h4>Version 2.7</h4>
10+
<h4>Version 3.0</h4>
1111
<ul>
1212
<li>Introduced logging for easier debugging in MCP mode, added red dot in UI mode if error occurred with tooltip to check logfile.</li>
1313
<li>Experimental support for JSON based jmap thread dumps.</li>
14-
<li>Support for SMR parsing in thread dumps (Java 11+).</li>
14+
<li>Support for SMR (Safe Memory Reclamation) parsing in thread dumps (Java 11+).</li>
1515
<li>Detect stuck Carrier Threads used by Virtual Threads in Java 21+ thread dumps.</li>
1616
<li>Extended MCP Server for fetching pinned Carrier Threads.</li>
1717
<li>Added a method to the MCP Server to enable the Agent to fetch a list of threads which are running in native code, including library information if available.</li>

visualvm-lib-component/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>de.grimmfrost.tda</groupId>
88
<artifactId>tda-parent</artifactId>
9-
<version>2.7</version>
9+
<version>3.0</version>
1010
</parent>
1111

1212
<artifactId>visualvm-lib-component</artifactId>

visualvm-logfile-component/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>de.grimmfrost.tda</groupId>
88
<artifactId>tda-parent</artifactId>
9-
<version>2.7</version>
9+
<version>3.0</version>
1010
</parent>
1111

1212
<artifactId>visualvm-logfile-component</artifactId>

0 commit comments

Comments
 (0)