@@ -38,24 +38,31 @@ import { createNewIdfMonitor } from "../espIdf/monitor/command";
3838import { ESP } from "../config" ;
3939import { buildFlashAndMonitor } from "../buildFlashMonitor" ;
4040
41+ async function getOrPickWorkspaceFolder (
42+ folder : WorkspaceFolder | undefined
43+ ) : Promise < WorkspaceFolder > {
44+ if ( ! folder ) {
45+ folder = ESP . GlobalConfiguration . store . getSelectedWorkspaceFolder ( ) ;
46+ if ( ! folder ) {
47+ folder = await window . showWorkspaceFolderPick ( {
48+ placeHolder : "Pick a workspace folder to start a debug session." ,
49+ } ) ;
50+ if ( ! folder ) {
51+ throw new Error ( "No folder was selected to start debug session" ) ;
52+ }
53+ }
54+ }
55+ return folder ;
56+ }
57+
4158export class CDTDebugConfigurationProvider
4259 implements DebugConfigurationProvider {
4360 public async resolveDebugConfigurationWithSubstitutedVariables (
4461 folder : WorkspaceFolder | undefined ,
4562 debugConfiguration : DebugConfiguration ,
4663 token ?: CancellationToken
4764 ) {
48- if ( ! folder ) {
49- folder = ESP . GlobalConfiguration . store . getSelectedWorkspaceFolder ( ) ;
50- if ( ! folder ) {
51- folder = await window . showWorkspaceFolderPick ( {
52- placeHolder : "Pick a workspace folder to start a debug session." ,
53- } ) ;
54- if ( ! folder ) {
55- throw new Error ( "No folder was selected to start debug session" ) ;
56- }
57- }
58- }
65+ folder = await getOrPickWorkspaceFolder ( folder ) ;
5966 const useMonitorWithDebug = readParameter (
6067 "idf.launchMonitorOnDebugSession" ,
6168 folder
@@ -87,17 +94,7 @@ export class CDTDebugConfigurationProvider
8794 token ?: CancellationToken
8895 ) : Promise < DebugConfiguration | undefined > {
8996 try {
90- if ( ! folder ) {
91- folder = ESP . GlobalConfiguration . store . getSelectedWorkspaceFolder ( ) ;
92- if ( ! folder ) {
93- folder = await window . showWorkspaceFolderPick ( {
94- placeHolder : "Pick a workspace folder to start a debug session." ,
95- } ) ;
96- if ( ! folder ) {
97- throw new Error ( "No folder was selected to start debug session" ) ;
98- }
99- }
100- }
97+ folder = await getOrPickWorkspaceFolder ( folder ) ;
10198 if ( ! config . program ) {
10299 const elfFilePath = await getProjectElfFilePath ( folder . uri ) ;
103100 const elfFileExists = await pathExists ( elfFilePath ) ;
@@ -183,10 +180,25 @@ export class CDTDebugConfigurationProvider
183180 esp32c5 : 4 ,
184181 esp32c61 : 4 ,
185182 } ;
183+ const rawIdfTarget = idfTarget ?? "" ;
184+ const watchpointNum =
185+ rawIdfTarget !== "" &&
186+ Object . prototype . hasOwnProperty . call (
187+ idfTargetWatchpointMap ,
188+ rawIdfTarget
189+ )
190+ ? idfTargetWatchpointMap [ rawIdfTarget as IdfTarget ]
191+ : undefined ;
192+ if ( watchpointNum === undefined && rawIdfTarget !== "" ) {
193+ Logger . info (
194+ `Unknown IDF target "${ rawIdfTarget } " for CPU hardware watchpoint mapping; using default 2.` ,
195+ { context : "CDTDebugConfigurationProvider" }
196+ ) ;
197+ }
186198 config . initCommands = config . initCommands . map ( ( cmd : string ) =>
187199 cmd . replace (
188200 "{IDF_TARGET_CPU_WATCHPOINT_NUM}" ,
189- String ( idfTargetWatchpointMap [ idfTarget as IdfTarget ] ?? 2 )
201+ String ( watchpointNum ?? 2 )
190202 )
191203 ) ;
192204 }
0 commit comments