@opensumi/ide-debug 2.21.11-rc-1671793101.0 → 2.21.11

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