Skip to content

Commit eb258d6

Browse files
committed
support 'attach' mode for debug
1 parent c185973 commit eb258d6

File tree

5 files changed

+54
-8
lines changed

5 files changed

+54
-8
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ All notable version changes will be recorded in this file.
66

77
***
88

9+
### [v3.25.3] revision
10+
11+
**Improve**:
12+
- `Debug`: Support 'attach' mode for 'one-click' debugging.
13+
14+
***
15+
916
### [v3.25.2] revision
1017

1118
**Improve**:

package.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"homepage": "https://em-ide.com",
3737
"license": "MIT",
3838
"description": "A mcu development environment for 8051/AVR/STM8/Cortex-M/MIPS/RISC-V",
39-
"version": "3.25.2",
39+
"version": "3.25.3",
4040
"preview": false,
4141
"engines": {
4242
"vscode": "^1.67.0"
@@ -550,6 +550,15 @@
550550
"light": "./res/icon/Run_16x.svg"
551551
}
552552
},
553+
{
554+
"command": "eide.debug.start.attach",
555+
"category": "eide",
556+
"title": "%eide.project.debug.start.attach%",
557+
"icon": {
558+
"dark": "./res/icon/Run_blue_16x.svg",
559+
"light": "./res/icon/Run_blue_16x.svg"
560+
}
561+
},
553562
{
554563
"command": "eide.refresh.external_tools_index",
555564
"category": "eide",
@@ -1344,6 +1353,11 @@
13441353
"when": "viewItem == SOLUTION && view == cl.eide.view.projects",
13451354
"group": "2_build@3"
13461355
},
1356+
{
1357+
"command": "eide.debug.start.attach",
1358+
"when": "viewItem == SOLUTION && view == cl.eide.view.projects",
1359+
"group": "2_build@4"
1360+
},
13471361
{
13481362
"command": "eide.project.uploadToDevice",
13491363
"when": "viewItem == SOLUTION && view == cl.eide.view.projects",

package.nls.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
"eide.project.modify.files.options": "Show Extra Options Of All Source Files",
3333
"eide.project.import.ext.project.src.struct": "Import SourceFile Tree From Other Project",
3434
"eide.project.generate_builder_params": "Generate builder.params",
35-
"eide.project.debug.start": "Start Debugging (Cortex-Debug)",
35+
"eide.project.debug.start": "Start Debugging",
36+
"eide.project.debug.start.attach": "Start Debugging (attach)",
3637

3738
"eide.prj.menus.main.static-check": "Static Check",
3839
"eide.prj.menus.sub.static-check.cppcheck": "Run Cppcheck",

package.nls.zh-CN.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
"eide.project.modify.files.options": "查看所有源文件的附加编译参数",
3333
"eide.project.import.ext.project.src.struct": "从其他 IDE 的项目中导入源文件树",
3434
"eide.project.generate_builder_params": "生成 builder.params",
35-
"eide.project.debug.start": "启动调试(Cortex-Debug)",
35+
"eide.project.debug.start": "启动调试",
36+
"eide.project.debug.start.attach": "启动调试 (附加)",
3637

3738
"eide.prj.menus.main.static-check": "静态检查",
3839
"eide.prj.menus.sub.static-check.cppcheck": "执行 Cppcheck",

src/extension.ts

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ export async function activate(context: vscode.ExtensionContext) {
133133
startDebugging()
134134
.catch(err => GlobalEvent.emit('error', err));
135135
}));
136+
subscriptions.push(vscode.commands.registerCommand('eide.debug.start.attach', () => {
137+
startDebugging(true)
138+
.catch(err => GlobalEvent.emit('error', err));
139+
}));
136140

137141
// internal command
138142
// TODO
@@ -1911,7 +1915,7 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
19111915
provideDebugConfigurations(folder: vscode.WorkspaceFolder | undefined,
19121916
token?: vscode.CancellationToken): vscode.ProviderResult<vscode.DebugConfiguration[]> {
19131917

1914-
const result: vscode.DebugConfiguration[] = [];
1918+
let result: vscode.DebugConfiguration[] = [];
19151919

19161920
if (!folder)
19171921
return result;
@@ -2034,6 +2038,16 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
20342038
return dbgCfg;
20352039
};
20362040

2041+
const newAttachDebugCfg = (cfgtocopy: any) => {
2042+
const nCfg = JSON.parse(JSON.stringify(cfgtocopy));
2043+
nCfg['name'] += '(attach)';
2044+
nCfg['request'] = 'attach';
2045+
if (nCfg['type'] === 'cortex-debug') {
2046+
nCfg['runToEntryPoint'] = undefined;
2047+
}
2048+
return nCfg;
2049+
};
2050+
20372051
const fmtOpenocdCfgPath = (type: 'interface' | 'target', path: string) => {
20382052
let cfgpath = path.startsWith('${workspaceFolder}/')
20392053
? path.replace('${workspaceFolder}/', '')
@@ -2066,6 +2080,7 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
20662080
dbgCfg['serialNumber'] = m[1];
20672081
}
20682082
result.push(dbgCfg);
2083+
result.push(newAttachDebugCfg(dbgCfg));
20692084
}
20702085

20712086
else if (flashertype == 'OpenOCD') {
@@ -2081,6 +2096,7 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
20812096
dbgCfg['configFiles'] = ocdCfgs;
20822097
dbgCfg['serverpath'] = settingManager.getOpenOCDExePath();
20832098
result.push(dbgCfg);
2099+
result.push(newAttachDebugCfg(dbgCfg));
20842100
}
20852101

20862102
else if (flashertype == 'pyOCD') {
@@ -2104,7 +2120,10 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
21042120
cliArgs.push(flasherCfg.speed);
21052121
}
21062122
dbgCfg['serverArgs'] = cliArgs;
2123+
// pyocd not support livewatch
2124+
dbgCfg['liveWatch']['enabled'] = false;
21072125
result.push(dbgCfg);
2126+
result.push(newAttachDebugCfg(dbgCfg));
21082127
}
21092128

21102129
else if (flashertype == 'STLink') {
@@ -2145,6 +2164,7 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
21452164
dbgCfg['stlinkPath'] = gdbserverPath;
21462165
dbgCfg['stm32cubeprogrammer'] = cubeProgramerPath;
21472166
result.push(dbgCfg);
2167+
result.push(newAttachDebugCfg(dbgCfg));
21482168
}
21492169

21502170
else if (flashertype == 'probe-rs') {
@@ -2181,6 +2201,7 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
21812201
}
21822202
}
21832203
result.push(dbgCfg);
2204+
result.push(newAttachDebugCfg(dbgCfg));
21842205
}
21852206

21862207
// else if (flashertype == 'STVP') {
@@ -2218,13 +2239,13 @@ class ExternalDebugConfigProvider implements vscode.DebugConfigurationProvider {
22182239

22192240
// filter by debugType
22202241
if (this.debuggerType)
2221-
return result.filter(cfg => cfg.type == this.debuggerType);
2242+
result = result.filter(cfg => cfg.type == this.debuggerType);
22222243

22232244
return result;
22242245
}
22252246
}
22262247

2227-
async function startDebugging() {
2248+
async function startDebugging(attach?: boolean) {
22282249

22292250
const prj = projectExplorer.getActiveProject();
22302251
if (!prj) {
@@ -2238,8 +2259,10 @@ async function startDebugging() {
22382259
index: 0
22392260
};
22402261

2241-
const cfgs = await (new ExternalDebugConfigProvider())
2242-
.provideDebugConfigurations(vscWorkspaceFolder);
2262+
const provider = new ExternalDebugConfigProvider();
2263+
let cfgs = await provider.provideDebugConfigurations(vscWorkspaceFolder);
2264+
if (cfgs && attach)
2265+
cfgs = cfgs.filter(cfg => cfg.request === 'attach');
22432266
if (cfgs && cfgs.length > 0) {
22442267
let cfg = cfgs[0];
22452268
if (cfgs.length > 1) {

0 commit comments

Comments
 (0)