diff --git a/MODULE.bazel b/MODULE.bazel
index 225917e995e0..85fabd92bd86 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -49,8 +49,8 @@ kotlin_test_deps(name = "kotlin_test_deps")
http_file(
name = "debugger_test_deps_debugger_agent",
downloaded_file_path = "debugger-agent.jar",
- sha256 = "b425c8604b860f7febe09809a7256f5f6209ac8f778ac27cc5ec1de328b3d1cb",
- url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/org/jetbrains/intellij/deps/debugger-agent/1.131/debugger-agent-1.131.jar",
+ sha256 = "d08d14bf727e3a393dc9e0f95b86b3483d32c15027673324558a13d4eee3756e",
+ url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/org/jetbrains/intellij/deps/debugger-agent/1.133/debugger-agent-1.133.jar",
)
jbr_toolchains = use_extension("@community//build:jbr-toolchains.bzl", "jbr_toolchains")
diff --git a/java/debugger/debugger-agent/intellij.java.debugger.agent.holder.iml b/java/debugger/debugger-agent/intellij.java.debugger.agent.holder.iml
index 35a64b6fa9d4..856383befc71 100644
--- a/java/debugger/debugger-agent/intellij.java.debugger.agent.holder.iml
+++ b/java/debugger/debugger-agent/intellij.java.debugger.agent.holder.iml
@@ -7,19 +7,19 @@
-
+
-
- b425c8604b860f7febe09809a7256f5f6209ac8f778ac27cc5ec1de328b3d1cb
+
+ d08d14bf727e3a393dc9e0f95b86b3483d32c15027673324558a13d4eee3756e
-
+
-
+
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java b/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java
index 94af1ffc7549..91a01573060d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/AsyncStacksUtils.java
@@ -1,6 +1,7 @@
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.debugger.engine;
+import com.intellij.debugger.JavaDebuggerBundle;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
@@ -38,10 +39,16 @@ import com.intellij.platform.eel.EelDescriptor;
import com.intellij.platform.eel.provider.EelProviderUtil;
import com.intellij.platform.eel.provider.LocalEelDescriptor;
import com.intellij.platform.eel.provider.utils.EelPathUtils;
+import com.intellij.ui.ColoredTextContainer;
+import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.BazelEnvironmentUtil;
import com.intellij.util.SlowOperations;
import com.intellij.util.containers.ContainerUtil;
+import com.intellij.xdebugger.frame.XCompositeNode;
+import com.intellij.xdebugger.frame.XStackFrame;
+import com.intellij.xdebugger.frame.XValueChildrenList;
import com.intellij.xdebugger.impl.XDebugSessionImpl;
+import com.intellij.xdebugger.impl.frame.XStackFrameWithSeparatorAbove;
import com.sun.jdi.*;
import com.sun.jdi.event.LocatableEvent;
import org.jetbrains.annotations.ApiStatus;
@@ -189,8 +196,13 @@ public final class AsyncStacksUtils {
String className = dis.readUTF();
String methodName = dis.readUTF();
int line = dis.readInt();
- Location location = DebuggerUtilsEx.findOrCreateLocation(vm.getVirtualMachine(), className, methodName, line);
- item = new StackFrameItem(location, null);
+ if ("< Unknown".equals(className) && "Stack > ".equals(methodName)) {
+ item = new ThrottledStackFrameItem(vm.getVirtualMachine());
+ }
+ else {
+ Location location = DebuggerUtilsEx.findOrCreateLocation(vm.getVirtualMachine(), className, methodName, line);
+ item = new StackFrameItem(location, null);
+ }
}
res.add(item);
}
@@ -497,6 +509,8 @@ public final class AsyncStacksUtils {
if (isSuspendHelperEnabled()) {
properties.setProperty("suspendHelper", "true");
}
+ boolean throttling = DebuggerSettings.getInstance().AGENT_THROTTLING;
+ properties.setProperty("throttling", Boolean.toString(throttling));
double overhead = Registry.doubleValue("debugger.async.stack.trace.overhead.percent");
properties.setProperty("overheadPercent", Double.toString(overhead));
if (JavaCollectionBreakpointType.isEnabled()) {
@@ -532,4 +546,60 @@ public final class AsyncStacksUtils {
breakpoint.setSuspendPolicy(DebuggerSettings.SUSPEND_THREAD);
breakpoint.createRequest(process);
}
+
+ private static class ThrottledStackFrameItem extends StackFrameItem {
+ ThrottledStackFrameItem(VirtualMachine vm) {
+ super(createSyntheticLocation(vm), Collections.emptyList());
+ }
+
+ private static Location createSyntheticLocation(VirtualMachine vm) {
+ return DebuggerUtilsEx.findOrCreateLocation(vm, "", "", -1);
+ }
+
+ @Override
+ public XStackFrame createFrame(@NotNull DebugProcessImpl debugProcess, @Nullable SourcePosition sourcePosition) {
+ return new ThrottledFrame();
+ }
+ }
+
+ private static class ThrottledFrame extends XStackFrame implements XStackFrameWithSeparatorAbove, JVMStackFrameInfoProvider {
+ private boolean myWithSeparator;
+
+ @Override
+ public void customizePresentation(@NotNull ColoredTextContainer component) {
+ component.append(JavaDebuggerBundle.message("async.stack.throttled.frame.label"), SimpleTextAttributes.GRAY_ITALIC_ATTRIBUTES);
+ }
+
+ @Override
+ public void computeChildren(@NotNull XCompositeNode node) {
+ node.setMessage(JavaDebuggerBundle.message("async.stack.throttled.frame.info"), null,
+ SimpleTextAttributes.REGULAR_ATTRIBUTES, StackFrameItem.CAPTURE_SETTINGS_OPENER);
+ node.addChildren(XValueChildrenList.EMPTY, true);
+ }
+
+ @Override
+ public String getCaptionAboveOf() {
+ return StackFrameItem.getAsyncStacktraceMessage();
+ }
+
+ @Override
+ public boolean hasSeparatorAbove() {
+ return myWithSeparator;
+ }
+
+ @Override
+ public void setWithSeparator(boolean withSeparator) {
+ myWithSeparator = withSeparator;
+ }
+
+ @Override
+ public boolean isSynthetic() {
+ return true;
+ }
+
+ @Override
+ public boolean isInLibraryContent() {
+ return false;
+ }
+ }
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.form b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.form
index f85d5ac7fc1c..ba2a13d8feeb 100644
--- a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.form
+++ b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.form
@@ -1,6 +1,6 @@