@opensumi/ide-debug 2.21.8-rc-1670567192.0 → 2.21.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/lib/browser/debug-session.d.ts.map +1 -1
  2. package/lib/browser/debug-session.js +1 -5
  3. package/lib/browser/debug-session.js.map +1 -1
  4. package/lib/browser/index.d.ts.map +1 -1
  5. package/lib/browser/index.js +9 -2
  6. package/lib/browser/index.js.map +1 -1
  7. package/lib/browser/preferences/launch-folder-preference-provider.d.ts +2 -2
  8. package/lib/browser/preferences/launch-folder-preference-provider.d.ts.map +1 -1
  9. package/lib/browser/preferences/launch-folder-preference-provider.js +2 -2
  10. package/lib/browser/preferences/launch-folder-preference-provider.js.map +1 -1
  11. package/lib/browser/view/configuration/debug-configuration.module.less +5 -5
  12. package/lib/browser/view/configuration/debug-configuration.view.d.ts.map +1 -1
  13. package/lib/browser/view/configuration/debug-configuration.view.js +1 -1
  14. package/lib/browser/view/configuration/debug-configuration.view.js.map +1 -1
  15. package/lib/browser/view/configuration/debug-toolbar.view.js +2 -2
  16. package/lib/browser/view/configuration/debug-toolbar.view.js.map +1 -1
  17. package/lib/browser/view/console/debug-console.module.less +1 -2
  18. package/lib/browser/view/console/debug-console.view.js +2 -2
  19. package/lib/browser/view/console/debug-console.view.js.map +1 -1
  20. package/lib/browser/view/variables/debug-variables.module.less +1 -2
  21. package/lib/browser/view/variables/debug-variables.view.js +1 -1
  22. package/lib/browser/view/variables/debug-variables.view.js.map +1 -1
  23. package/lib/browser/view/watch/debug-watch.module.less +1 -2
  24. package/lib/browser/view/watch/debug-watch.view.js +1 -1
  25. package/lib/browser/view/watch/debug-watch.view.js.map +1 -1
  26. package/package.json +24 -25
  27. package/src/browser/assets/breakpoint-conditional-disabled.svg +0 -4
  28. package/src/browser/assets/breakpoint-conditional-unverified.svg +0 -4
  29. package/src/browser/assets/breakpoint-conditional.svg +0 -4
  30. package/src/browser/assets/breakpoint-disabled.svg +0 -4
  31. package/src/browser/assets/breakpoint-hint.svg +0 -4
  32. package/src/browser/assets/breakpoint-log-disabled.svg +0 -4
  33. package/src/browser/assets/breakpoint-log-unverified.svg +0 -4
  34. package/src/browser/assets/breakpoint-log.svg +0 -4
  35. package/src/browser/assets/breakpoint-unsupported.svg +0 -4
  36. package/src/browser/assets/breakpoint-unverified.svg +0 -4
  37. package/src/browser/assets/breakpoint.svg +0 -4
  38. package/src/browser/assets/breakpoints-activate-inverse.svg +0 -4
  39. package/src/browser/assets/breakpoints-activate.svg +0 -4
  40. package/src/browser/assets/configure-inverse.svg +0 -4
  41. package/src/browser/assets/configure.svg +0 -4
  42. package/src/browser/assets/continue-inverse.svg +0 -4
  43. package/src/browser/assets/current-and-breakpoint.svg +0 -4
  44. package/src/browser/assets/current-arrow.svg +0 -4
  45. package/src/browser/assets/remove-all-inverse.svg +0 -4
  46. package/src/browser/assets/remove-all.svg +0 -4
  47. package/src/browser/assets/repl-inverse.svg +0 -4
  48. package/src/browser/assets/repl.svg +0 -4
  49. package/src/browser/assets/restart-inverse.svg +0 -4
  50. package/src/browser/assets/stackframe-and-breakpoint.svg +0 -4
  51. package/src/browser/assets/stackframe-arrow.svg +0 -4
  52. package/src/browser/assets/start-inverse.svg +0 -4
  53. package/src/browser/breakpoint/breakpoint-decoration.ts +0 -57
  54. package/src/browser/breakpoint/breakpoint-manager.ts +0 -348
  55. package/src/browser/breakpoint/breakpoint-marker.ts +0 -70
  56. package/src/browser/breakpoint/index.ts +0 -3
  57. package/src/browser/components/debug-action/index.module.less +0 -73
  58. package/src/browser/components/debug-action/index.tsx +0 -40
  59. package/src/browser/components/debug-exception-widget.less +0 -42
  60. package/src/browser/components/floating-click-widget/index.module.less +0 -5
  61. package/src/browser/components/floating-click-widget/index.tsx +0 -21
  62. package/src/browser/components/index.ts +0 -1
  63. package/src/browser/contextkeys/debug-call-stack-item-type-key.ts +0 -4
  64. package/src/browser/contextkeys/debug-contextkey.service.ts +0 -54
  65. package/src/browser/contextkeys/index.ts +0 -1
  66. package/src/browser/debug-ansi-handle.ts +0 -521
  67. package/src/browser/debug-configuration-manager.ts +0 -513
  68. package/src/browser/debug-configuration-model.ts +0 -66
  69. package/src/browser/debug-contribution.ts +0 -904
  70. package/src/browser/debug-exception-widget.tsx +0 -89
  71. package/src/browser/debug-link-detector.ts +0 -234
  72. package/src/browser/debug-memory.ts +0 -220
  73. package/src/browser/debug-preferences.ts +0 -70
  74. package/src/browser/debug-progress.service.ts +0 -122
  75. package/src/browser/debug-schema-updater.ts +0 -67
  76. package/src/browser/debug-service.ts +0 -42
  77. package/src/browser/debug-session-connection.ts +0 -333
  78. package/src/browser/debug-session-contribution.ts +0 -57
  79. package/src/browser/debug-session-manager.ts +0 -622
  80. package/src/browser/debug-session.ts +0 -1182
  81. package/src/browser/debug-style.less +0 -128
  82. package/src/browser/debugUtils.ts +0 -110
  83. package/src/browser/editor/debug-breakpoint-widget.ts +0 -99
  84. package/src/browser/editor/debug-breakpoint-zone-widget.tsx +0 -262
  85. package/src/browser/editor/debug-breakpoint.module.less +0 -31
  86. package/src/browser/editor/debug-editor-contribution.ts +0 -590
  87. package/src/browser/editor/debug-expression-provider.ts +0 -101
  88. package/src/browser/editor/debug-hover-model.ts +0 -38
  89. package/src/browser/editor/debug-hover-source.ts +0 -107
  90. package/src/browser/editor/debug-hover-tree.model.service.ts +0 -332
  91. package/src/browser/editor/debug-hover-widget.tsx +0 -200
  92. package/src/browser/editor/debug-hover.module.less +0 -29
  93. package/src/browser/editor/debug-hover.view.tsx +0 -147
  94. package/src/browser/editor/debug-model-manager.ts +0 -220
  95. package/src/browser/editor/debug-model.ts +0 -853
  96. package/src/browser/editor/debug-run-to-cursor.service.ts +0 -180
  97. package/src/browser/editor/debug-styles.ts +0 -66
  98. package/src/browser/editor/evaluatable-expression.ts +0 -47
  99. package/src/browser/editor/index.ts +0 -6
  100. package/src/browser/index.ts +0 -121
  101. package/src/browser/markers/index.ts +0 -2
  102. package/src/browser/markers/marker-manager.ts +0 -201
  103. package/src/browser/markers/marker.ts +0 -20
  104. package/src/browser/model/debug-source.ts +0 -144
  105. package/src/browser/model/debug-stack-frame.ts +0 -111
  106. package/src/browser/model/debug-thread.ts +0 -186
  107. package/src/browser/model/debug-watch.ts +0 -130
  108. package/src/browser/model/index.ts +0 -4
  109. package/src/browser/preferences/launch-folder-preference-provider.ts +0 -23
  110. package/src/browser/preferences/launch-preferences-contribution.ts +0 -9
  111. package/src/browser/preferences/launch-preferences.ts +0 -16
  112. package/src/browser/tree/debug-console-tree-node.define.tsx +0 -76
  113. package/src/browser/tree/debug-tree-node.define.ts +0 -768
  114. package/src/browser/tree/index.ts +0 -2
  115. package/src/browser/view/breakpoints/debug-breakpoints.module.less +0 -72
  116. package/src/browser/view/breakpoints/debug-breakpoints.service.ts +0 -217
  117. package/src/browser/view/breakpoints/debug-breakpoints.view.tsx +0 -174
  118. package/src/browser/view/configuration/debug-configuration.module.less +0 -110
  119. package/src/browser/view/configuration/debug-configuration.service.ts +0 -170
  120. package/src/browser/view/configuration/debug-configuration.view.tsx +0 -252
  121. package/src/browser/view/configuration/debug-toolbar.service.ts +0 -167
  122. package/src/browser/view/configuration/debug-toolbar.view.tsx +0 -335
  123. package/src/browser/view/console/debug-console-filter.model.ts +0 -49
  124. package/src/browser/view/console/debug-console-filter.service.ts +0 -81
  125. package/src/browser/view/console/debug-console-filter.view.tsx +0 -78
  126. package/src/browser/view/console/debug-console-model.ts +0 -48
  127. package/src/browser/view/console/debug-console-session.ts +0 -164
  128. package/src/browser/view/console/debug-console-toolbar.view.tsx +0 -28
  129. package/src/browser/view/console/debug-console-tree.model.service.ts +0 -550
  130. package/src/browser/view/console/debug-console.contribution.ts +0 -181
  131. package/src/browser/view/console/debug-console.module.less +0 -373
  132. package/src/browser/view/console/debug-console.service.ts +0 -433
  133. package/src/browser/view/console/debug-console.view.tsx +0 -500
  134. package/src/browser/view/debug-view-model.ts +0 -182
  135. package/src/browser/view/frames/debug-call-stack-frame.view.tsx +0 -224
  136. package/src/browser/view/frames/debug-call-stack-session.view.tsx +0 -244
  137. package/src/browser/view/frames/debug-call-stack-thread.view.tsx +0 -93
  138. package/src/browser/view/frames/debug-call-stack.contribution.ts +0 -88
  139. package/src/browser/view/frames/debug-call-stack.module.less +0 -193
  140. package/src/browser/view/frames/debug-call-stack.operation.tsx +0 -97
  141. package/src/browser/view/frames/debug-call-stack.service.ts +0 -105
  142. package/src/browser/view/frames/debug-call-stack.view.tsx +0 -43
  143. package/src/browser/view/variables/debug-variables-model.ts +0 -38
  144. package/src/browser/view/variables/debug-variables-tree.model.service.ts +0 -467
  145. package/src/browser/view/variables/debug-variables.contribution.ts +0 -244
  146. package/src/browser/view/variables/debug-variables.module.less +0 -149
  147. package/src/browser/view/variables/debug-variables.view.tsx +0 -303
  148. package/src/browser/view/watch/debug-watch-model.ts +0 -38
  149. package/src/browser/view/watch/debug-watch-tree.model.service.ts +0 -567
  150. package/src/browser/view/watch/debug-watch.contribution.ts +0 -167
  151. package/src/browser/view/watch/debug-watch.module.less +0 -189
  152. package/src/browser/view/watch/debug-watch.view.tsx +0 -337
  153. package/src/common/constants.ts +0 -81
  154. package/src/common/debug-breakpoint.ts +0 -43
  155. package/src/common/debug-configuration.ts +0 -68
  156. package/src/common/debug-editor.ts +0 -4
  157. package/src/common/debug-hover.ts +0 -31
  158. package/src/common/debug-model.ts +0 -247
  159. package/src/common/debug-progress.ts +0 -8
  160. package/src/common/debug-schema-updater.ts +0 -1
  161. package/src/common/debug-service.ts +0 -176
  162. package/src/common/debug-session-options.ts +0 -19
  163. package/src/common/debug-session.ts +0 -200
  164. package/src/common/evaluatable-expression.ts +0 -43
  165. package/src/common/index.ts +0 -14
  166. package/src/common/inline-values.ts +0 -77
  167. package/src/common/terminal.ts +0 -163
  168. package/src/common/types.ts +0 -86
  169. package/src/index.ts +0 -1
@@ -1,224 +0,0 @@
1
- import cls from 'classnames';
2
- import { observer } from 'mobx-react-lite';
3
- import React from 'react';
4
-
5
- import { RecycleList } from '@opensumi/ide-components';
6
- import {
7
- ViewState,
8
- isUndefined,
9
- useInjectable,
10
- localize,
11
- DisposableCollection,
12
- getIcon,
13
- } from '@opensumi/ide-core-browser';
14
-
15
- import { IDebugSessionManager } from '../../../common';
16
- import { DebugSession } from '../../debug-session';
17
- import { DebugSessionManager } from '../../debug-session-manager';
18
- import { DebugStackFrame } from '../../model';
19
- import { DebugThread } from '../../model/debug-thread';
20
-
21
- import styles from './debug-call-stack.module.less';
22
- import { DebugCallStackService } from './debug-call-stack.service';
23
-
24
-
25
- export interface DebugStackSessionViewProps {
26
- frames: DebugStackFrame[];
27
- session: DebugSession;
28
- thread: DebugThread;
29
- viewState: ViewState;
30
- indent?: number;
31
- }
32
-
33
- export const DebugStackFramesView = observer((props: DebugStackSessionViewProps) => {
34
- const { viewState, frames: rawFrames, thread, indent = 0, session } = props;
35
- const [selected, setSelected] = React.useState<number | undefined>();
36
- const [isLoading, setIsLoading] = React.useState<boolean>(false);
37
- const [frames, setFrames] = React.useState<DebugStackFrame[]>([]);
38
- const [framesErrorMessage, setFramesErrorMessage] = React.useState<string>('');
39
- const [canLoadMore, setCanLoadMore] = React.useState<boolean>(false);
40
- const manager = useInjectable<DebugSessionManager>(IDebugSessionManager);
41
- const debugCallStackService = useInjectable<DebugCallStackService>(DebugCallStackService);
42
-
43
- const loadMore = async () => {
44
- if (!thread) {
45
- return;
46
- }
47
- const remainingFramesCount =
48
- typeof thread.stoppedDetails?.totalFrames === 'number'
49
- ? thread.stoppedDetails?.totalFrames - thread.frameCount
50
- : undefined;
51
- const frames = await thread.fetchFrames(remainingFramesCount);
52
- setFrames(frames);
53
- };
54
-
55
- const frameOpenSource = (frame: DebugStackFrame) => {
56
- if (frame && frame.source) {
57
- frame.source.open({}, frame);
58
- }
59
- };
60
-
61
- React.useEffect(() => {
62
- setFrames([...rawFrames]);
63
-
64
- const disposable = new DisposableCollection();
65
-
66
- disposable.push(
67
- manager.onDidChangeActiveDebugSession(({ previous }) => {
68
- if (previous && previous !== thread.session) {
69
- setSelected(undefined);
70
- }
71
- }),
72
- );
73
-
74
- if (session) {
75
- disposable.push(
76
- session.onDidChangeCallStack(() => {
77
- setFrames([...thread.frames]);
78
- }),
79
- );
80
- }
81
-
82
- return () => {
83
- disposable.dispose();
84
- };
85
- }, []);
86
-
87
- React.useEffect(() => {
88
- if (thread) {
89
- const hasSourceFrame = thread.frames.find((e: DebugStackFrame) => !!e.source);
90
- if (hasSourceFrame) {
91
- setSelected(hasSourceFrame.raw.id);
92
- frameOpenSource(hasSourceFrame);
93
- }
94
- }
95
- }, [thread.frameCount]);
96
-
97
- React.useEffect(() => {
98
- if (thread) {
99
- if (thread.stoppedDetails) {
100
- const { framesErrorMessage, totalFrames } = thread.stoppedDetails;
101
- setFramesErrorMessage(framesErrorMessage || '');
102
- if (totalFrames && totalFrames > thread.frameCount) {
103
- setCanLoadMore(true);
104
- } else {
105
- setCanLoadMore(false);
106
- }
107
- } else {
108
- setCanLoadMore(false);
109
- }
110
- } else {
111
- setCanLoadMore(false);
112
- }
113
- }, [frames]);
114
-
115
- const template = ({ data }) => {
116
- const frame: DebugStackFrame = data;
117
- const isLabel = frame.raw.presentationHint === 'label';
118
- const isSubtle = frame.raw.presentationHint === 'subtle';
119
- const clickHandler = () => {
120
- if (isLabel || isSubtle) {
121
- return;
122
- }
123
- manager.updateCurrentSession(frame.session);
124
-
125
- frame.session.currentThread = frame.thread;
126
- setSelected(frame.raw.id);
127
- frameOpenSource(frame);
128
- };
129
-
130
- const restartFrame = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
131
- event.preventDefault();
132
- event.stopPropagation();
133
-
134
- if (frame.canRestart) {
135
- frame.restart();
136
- }
137
- };
138
-
139
- return (
140
- <div
141
- style={{ paddingLeft: `${indent}px` }}
142
- className={cls(
143
- styles.debug_stack_frames_item,
144
- selected === frame.raw.id && styles.selected,
145
- !(frame.raw && frame.raw.source && frame.raw.source.name) && styles.debug_stack_frames_item_hidden,
146
- )}
147
- onClick={clickHandler}
148
- onContextMenu={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) =>
149
- debugCallStackService.handleContextMenu(event, data)
150
- }
151
- >
152
- <span className={cls(styles.debug_stack_frames_item_label, isLabel && styles.label, isSubtle && styles.subtle)}>
153
- {frame.raw && frame.raw.name}
154
- </span>
155
- <span className={styles.debug_stack_frames_item_description}>
156
- {(frame.raw && frame.raw.source && frame.raw.source.name) || localize('debug.stack.frame.noSource')}
157
- </span>
158
- <>
159
- <a
160
- title=''
161
- onClick={(event) => restartFrame(event)}
162
- className={cls(styles.debug_restart_frame_icon, getIcon('debug-restart-frame'))}
163
- ></a>
164
- <div className={cls(!isUndefined(frame.raw.line) && styles.debug_stack_frames_item_badge)}>
165
- {frame.raw && frame.raw.line}
166
- {!isUndefined(frame.raw.line) && ':'}
167
- {frame.raw && frame.raw.column}
168
- </div>
169
- </>
170
- </div>
171
- );
172
- };
173
-
174
- const renderLoadMoreStackFrames = () => {
175
- const clickHandler = async () => {
176
- setIsLoading(true);
177
- await loadMore();
178
- setIsLoading(false);
179
- };
180
- return (
181
- <div className={styles.debug_stack_frames_item} onClick={clickHandler}>
182
- <span className={styles.debug_stack_frames_load_more}>{localize('debug.stack.loadMore')}</span>
183
- </div>
184
- );
185
- };
186
-
187
- const renderLoading = () => (
188
- <div className={styles.debug_stack_frames_item}>
189
- <span className={styles.debug_stack_frames_load_more}>{localize('debug.stack.loading')}</span>
190
- </div>
191
- );
192
-
193
- const renderFramesErrorMessage = (message: string) => (
194
- <div className={styles.debug_stack_frames_item}>
195
- <span className={styles.debug_stack_frames_error_message} title={message}>
196
- {message}
197
- </span>
198
- </div>
199
- );
200
-
201
- if (framesErrorMessage) {
202
- return <div className={styles.debug_stack_frames}>{renderFramesErrorMessage(framesErrorMessage)}</div>;
203
- }
204
-
205
- const footer = () => {
206
- if (isLoading) {
207
- return renderLoading();
208
- } else if (canLoadMore) {
209
- return renderLoadMoreStackFrames();
210
- }
211
- return null;
212
- };
213
-
214
- return (
215
- <RecycleList
216
- data={frames}
217
- template={template}
218
- itemHeight={22}
219
- width={viewState.width}
220
- height={isLoading || canLoadMore ? (frames.length + 1) * 22 : frames.length * 22}
221
- footer={isLoading || canLoadMore ? footer : undefined}
222
- />
223
- );
224
- });
@@ -1,244 +0,0 @@
1
- import cls from 'classnames';
2
- import React, { useCallback, useState, useEffect } from 'react';
3
-
4
- import { ViewState, getIcon, useInjectable, DisposableCollection } from '@opensumi/ide-core-browser';
5
-
6
- import { DebugState, IDebugSessionManager } from '../../../common';
7
- import { DebugSession } from '../../debug-session';
8
- import { DebugSessionManager } from '../../debug-session-manager';
9
- import { DebugThread } from '../../model/debug-thread';
10
-
11
- import { DebugStackThreadView } from './debug-call-stack-thread.view';
12
- import styles from './debug-call-stack.module.less';
13
- import { DebugStackOperationView } from './debug-call-stack.operation';
14
- import { DebugCallStackService } from './debug-call-stack.service';
15
-
16
- export interface DebugStackSessionViewProps {
17
- session: DebugSession;
18
- viewState: ViewState;
19
- indent: number;
20
- }
21
-
22
- export const DebugStackSessionView = (props: DebugStackSessionViewProps) => {
23
- const { session, viewState } = props;
24
- const manager = useInjectable<DebugSessionManager>(IDebugSessionManager);
25
- const debugCallStackService = useInjectable<DebugCallStackService>(DebugCallStackService);
26
- const [threads, setThreads] = useState<DebugThread[]>([]);
27
- const [otherThreads, setOtherThreads] = useState<DebugThread[]>([]);
28
- const [multipleThreadPaused, setMultipleThreadPaused] = useState<DebugThread[]>([]);
29
- const [subSession, setSubSession] = useState<DebugSession[]>([]);
30
- const [unfold, setUnfold] = useState<boolean>(true);
31
- const [hover, setHover] = useState<boolean>(false);
32
- const [loading, setLoading] = useState<boolean>(true);
33
- // 多 session 调试
34
- const mutipleSession = manager.sessions.length > 1;
35
- const supportsThreadIdCorrespond = session.supportsThreadIdCorrespond;
36
-
37
- // 从 manager.sessions 中找出 parentSession id 是当前 session id 的 session
38
- const findSubSessions = () => {
39
- const hasParentSessions = manager.sessions.filter((s) => s.parentSession);
40
- const subSession: DebugSession[] = [];
41
- while (hasParentSessions[0]) {
42
- if (manager.getSession(hasParentSessions[0].parentSession?.id)?.id === session.id) {
43
- subSession.push(hasParentSessions[0]);
44
- }
45
- hasParentSessions.shift();
46
- }
47
-
48
- return subSession;
49
- };
50
-
51
- // 加载更多线程信息
52
- const fetchOtherThreads = async () => {
53
- setLoading(true);
54
- const _threads = await session.fetchThreads();
55
- setLoading(false);
56
- setOtherThreads(_threads);
57
- };
58
-
59
- useEffect(() => {
60
- const createDispose = manager.onDidCreateDebugSession(() => {
61
- const sub = findSubSessions();
62
- setSubSession(sub);
63
- });
64
-
65
- const destroyDispose = manager.onDidDestroyDebugSession(() => {
66
- const sub = findSubSessions();
67
- setSubSession(sub);
68
- });
69
-
70
- return () => {
71
- createDispose.dispose();
72
- destroyDispose.dispose();
73
- setSubSession([]);
74
- };
75
- }, []);
76
-
77
- const updateThreads = useCallback(
78
- (threads: DebugThread[]) => {
79
- setThreads(threads);
80
- },
81
- [threads],
82
- );
83
-
84
- useEffect(() => {
85
- updateThreads(Array.from(session.threads));
86
-
87
- const disposable = new DisposableCollection();
88
-
89
- disposable.push(
90
- session.onDidChange(() => {
91
- updateThreads([...session.threads]);
92
- }),
93
- );
94
-
95
- disposable.push(
96
- session.onDidThread(async ({ body: { reason } }) => {
97
- if (!session.supportsThreadIdCorrespond) {
98
- return;
99
- }
100
-
101
- if (session.state === DebugState.Stopped && reason === 'started') {
102
- await fetchOtherThreads();
103
- }
104
- }),
105
- );
106
-
107
- disposable.push(
108
- session.onDidStop(async () => {
109
- if (!session.supportsThreadIdCorrespond) {
110
- return;
111
- }
112
-
113
- const multipleThreads = Array.from(session.multipleThreadPaused.values());
114
- setMultipleThreadPaused(multipleThreads);
115
-
116
- await fetchOtherThreads();
117
- }),
118
- );
119
-
120
- disposable.push(
121
- session.onDidContinued(async () => {
122
- if (!session.supportsThreadIdCorrespond) {
123
- return;
124
- }
125
-
126
- const multipleThreads = Array.from(session.multipleThreadPaused.values());
127
- setMultipleThreadPaused(multipleThreads);
128
- }),
129
- );
130
-
131
- return () => {
132
- disposable.dispose();
133
- };
134
- }, []);
135
-
136
- // 渲染 "加载更多线程"
137
- const renderLoadMoreThread = () => {
138
- if (session.state !== DebugState.Stopped) {
139
- return null;
140
- }
141
-
142
- if (supportsThreadIdCorrespond && unfold) {
143
- return loading ? (
144
- <div className={styles.debug_stack_item_loading}>
145
- <span>正在加载线程...</span>
146
- </div>
147
- ) : (
148
- otherThreads.map(
149
- (thread) =>
150
- !session.hasInMultipleThreadPaused(thread.raw.id) && (
151
- <DebugStackThreadView
152
- key={thread.id}
153
- indent={mutipleSession ? 16 : 0}
154
- viewState={viewState}
155
- thread={thread}
156
- session={session}
157
- />
158
- ),
159
- )
160
- );
161
- }
162
- };
163
-
164
- const isIncompressible = (stat: DebugSession) => {
165
- if (stat.threads.some((t) => t.frameCount > 0)) {
166
- return false;
167
- }
168
-
169
- const sub = findSubSessions();
170
- if (sub.length !== 1) {
171
- return false;
172
- }
173
-
174
- if (!sub[0].compact) {
175
- return false;
176
- }
177
-
178
- return true;
179
- };
180
-
181
- if (isIncompressible(session)) {
182
- const sub = findSubSessions();
183
- return (
184
- <div className={styles.debug_stack_item}>
185
- {sub.map((s) => (
186
- <DebugStackSessionView key={s.id} viewState={viewState} session={s} indent={1} />
187
- ))}
188
- </div>
189
- );
190
- }
191
-
192
- return (
193
- <div
194
- className={styles.debug_stack_item}
195
- onContextMenu={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) =>
196
- debugCallStackService.handleContextMenu(event, session)
197
- }
198
- >
199
- {mutipleSession && (
200
- <div
201
- className={styles.debug_stack_item_label}
202
- onMouseEnter={() => setHover(true)}
203
- onMouseLeave={() => setHover(false)}
204
- >
205
- {(supportsThreadIdCorrespond || threads.length > 0) && (
206
- <>
207
- <div className={unfold ? getIcon('down') : getIcon('right')} onClick={() => setUnfold(!unfold)}></div>
208
- <div className={cls([getIcon('debug'), styles.debug_session_icon])}></div>
209
- </>
210
- )}
211
- <div className={styles.debug_stack_item_label_title}>{session.label}</div>
212
- {hover && <DebugStackOperationView session={session} />}
213
- </div>
214
- )}
215
- {supportsThreadIdCorrespond && unfold
216
- ? multipleThreadPaused.map((t) => (
217
- <DebugStackThreadView
218
- key={t.id}
219
- indent={mutipleSession ? 16 : 0}
220
- viewState={viewState}
221
- thread={t}
222
- session={session}
223
- />
224
- ))
225
- : null}
226
- {!supportsThreadIdCorrespond &&
227
- (!mutipleSession || unfold) &&
228
- threads.map((thread) => (
229
- <DebugStackThreadView
230
- key={thread.id}
231
- indent={mutipleSession ? 16 : 0}
232
- viewState={viewState}
233
- thread={thread}
234
- session={session}
235
- />
236
- ))}
237
- {subSession.length > 0 &&
238
- subSession.map(
239
- (s) => unfold && <DebugStackSessionView key={s.id} viewState={viewState} session={s} indent={1} />,
240
- )}
241
- {renderLoadMoreThread()}
242
- </div>
243
- );
244
- };
@@ -1,93 +0,0 @@
1
- import React from 'react';
2
-
3
- import { ViewState, getIcon, useInjectable, localize, DisposableCollection } from '@opensumi/ide-core-browser';
4
-
5
- import { IDebugSessionManager } from '../../../common';
6
- import { DebugSession } from '../../debug-session';
7
- import { DebugSessionManager } from '../../debug-session-manager';
8
- import { DebugThread } from '../../model/debug-thread';
9
-
10
- import { DebugStackFramesView } from './debug-call-stack-frame.view';
11
- import styles from './debug-call-stack.module.less';
12
- import { DebugStackOperationView } from './debug-call-stack.operation';
13
- import { DebugCallStackService } from './debug-call-stack.service';
14
-
15
- export interface DebugStackThreadViewProps {
16
- session: DebugSession;
17
- viewState: ViewState;
18
- thread: DebugThread;
19
- indent?: number;
20
- }
21
-
22
- export const DebugStackThreadView = (props: DebugStackThreadViewProps) => {
23
- const { thread, viewState, indent, session } = props;
24
- const manager = useInjectable<DebugSessionManager>(IDebugSessionManager);
25
- const debugCallStackService = useInjectable<DebugCallStackService>(DebugCallStackService);
26
- const [unfold, setUnfold] = React.useState<boolean>(true);
27
-
28
- const mutipleS = manager.sessions.length > 1;
29
- const mutiple = manager.currentSession?.supportsThreadIdCorrespond
30
- ? true
31
- : manager.sessions.length > 1 || (manager.sessions[0] && manager.sessions[0].threadCount > 1);
32
-
33
- React.useEffect(() => {
34
- const disposable = new DisposableCollection();
35
-
36
- disposable.push(
37
- session.onDidChangeCallStack(() => {
38
- if (thread.stopped && manager.currentThread && manager.currentThread.id === thread.id) {
39
- setUnfold(true);
40
- } else {
41
- setUnfold(false);
42
- }
43
- }),
44
- );
45
-
46
- return () => {
47
- disposable.dispose();
48
- };
49
- }, []);
50
-
51
- return (
52
- <div
53
- className={styles.debug_stack_item}
54
- onContextMenu={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) =>
55
- debugCallStackService.handleContextMenu(event, thread)
56
- }
57
- >
58
- {mutiple && (
59
- <div style={{ paddingLeft: `${indent}px` }} className={styles.debug_stack_item_label}>
60
- {thread.frames.length > 0 ? (
61
- <div className={unfold ? getIcon('down') : getIcon('right')} onClick={() => setUnfold(!unfold)}></div>
62
- ) : (
63
- <div style={{ width: 14 }}></div>
64
- )}
65
- <div className={styles.debug_threads_item}>{thread.raw.name}</div>
66
- <>
67
- <div className={styles.debug_threads_operation}>
68
- <DebugStackOperationView thread={thread} />
69
- </div>
70
- <span className={styles.debug_threads_description}>
71
- {thread.stopped && thread.stoppedDetails
72
- ? thread.raw.id === thread.stoppedDetails.threadId
73
- ? `${localize('debug.stack.frame.because')} ${thread.stoppedDetails.reason} ${localize(
74
- 'debug.stack.frame.stopped',
75
- )}`
76
- : localize('debug.stack.frame.stopped')
77
- : localize('debug.stack.frame.running')}
78
- </span>
79
- </>
80
- </div>
81
- )}
82
- {(!mutiple || unfold) && thread.frames.length > 0 && (
83
- <DebugStackFramesView
84
- indent={mutiple ? (mutipleS ? 24 + 14 : 16 + 14) : 8}
85
- viewState={viewState}
86
- thread={thread}
87
- frames={thread.frames}
88
- session={session}
89
- />
90
- )}
91
- </div>
92
- );
93
- };
@@ -1,88 +0,0 @@
1
- import { Autowired } from '@opensumi/di';
2
- import { Domain, CommandContribution, CommandRegistry, localize, IClipboardService } from '@opensumi/ide-core-browser';
3
- import { MenuContribution, IMenuRegistry, MenuId } from '@opensumi/ide-core-browser/lib/menu/next';
4
-
5
- import { DEBUG_COMMANDS } from '../../debug-contribution';
6
-
7
- import {
8
- CONTEXT_CALLSTACK_ITEM_TYPE,
9
- CONTEXT_RESTART_FRAME_SUPPORTED,
10
- CONTEXT_STACK_FRAME_SUPPORTS_RESTART,
11
- } from './../../../common/constants';
12
- import { IDebugSessionManager } from './../../../common/debug-session';
13
- import { CallStackContext } from './../../../common/types';
14
- import { DebugSessionManager } from './../../debug-session-manager';
15
- import { DebugStackFrame } from './../../model/debug-stack-frame';
16
- import { DebugThread } from './../../model/debug-thread';
17
-
18
- function isStackFrameContext(obj: any): obj is CallStackContext {
19
- return (
20
- obj && typeof obj.sessionId === 'string' && typeof obj.threadId === 'string' && typeof obj.frameId === 'string'
21
- );
22
- }
23
-
24
- function getFrame(debugService: DebugSessionManager, context: CallStackContext | unknown): DebugStackFrame | undefined {
25
- if (isStackFrameContext(context)) {
26
- const session = debugService.getSession(context.sessionId);
27
- if (session) {
28
- const thread = [session.currentThread, ...session.threads].find((t: DebugThread) => t.id === context.threadId);
29
- if (thread) {
30
- return thread.frames.find((sf: DebugStackFrame) => sf.id === context.frameId);
31
- }
32
- }
33
- }
34
-
35
- return undefined;
36
- }
37
-
38
- @Domain(MenuContribution, CommandContribution)
39
- export class DebugCallStackContribution implements MenuContribution, CommandContribution {
40
- @Autowired(IDebugSessionManager)
41
- protected readonly debugSessionManager: DebugSessionManager;
42
-
43
- @Autowired(IClipboardService)
44
- private readonly clipboardService: IClipboardService;
45
-
46
- registerCommands(registry: CommandRegistry) {
47
- registry.registerCommand(DEBUG_COMMANDS.RESTART_FRAME, {
48
- execute: async (_: string, context: CallStackContext) => {
49
- const frame = getFrame(this.debugSessionManager, context);
50
- if (frame) {
51
- await frame.restart();
52
- }
53
- },
54
- });
55
- registry.registerCommand(DEBUG_COMMANDS.COPY_STACK_TRACE, {
56
- execute: async (_: string, context: CallStackContext) => {
57
- const frame = getFrame(this.debugSessionManager, context);
58
- if (frame) {
59
- const callStacks = frame.thread.frames.map(
60
- (e: DebugStackFrame) =>
61
- `${e.raw && e.raw.name} (${e.raw && e.raw.source && e.raw.source.path}:${e.raw && e.raw.line})`,
62
- );
63
- this.clipboardService.writeText(callStacks.join('\n'));
64
- }
65
- },
66
- });
67
- }
68
-
69
- registerMenus(registry: IMenuRegistry) {
70
- registry.registerMenuItem(MenuId.DebugCallStackContext, {
71
- command: {
72
- id: DEBUG_COMMANDS.RESTART_FRAME.id,
73
- label: localize('debugger.menu.restartFrame'),
74
- },
75
- when: `${CONTEXT_CALLSTACK_ITEM_TYPE.equalsTo('stackFrame')} && ${CONTEXT_RESTART_FRAME_SUPPORTED.raw}`,
76
- enabledWhen: CONTEXT_STACK_FRAME_SUPPORTS_RESTART.raw,
77
- order: 10,
78
- });
79
- registry.registerMenuItem(MenuId.DebugCallStackContext, {
80
- command: {
81
- id: DEBUG_COMMANDS.COPY_STACK_TRACE.id,
82
- label: localize('debugger.menu.copyCallstack'),
83
- },
84
- when: CONTEXT_CALLSTACK_ITEM_TYPE.equalsTo('stackFrame'),
85
- order: 20,
86
- });
87
- }
88
- }