From 56d789e2321bb2e1437dc29b4136cf2a476a103b Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Sun, 1 Aug 2021 17:01:58 -0400 Subject: [PATCH] Add capability to debugger to focus on file and line which has been stopped on --- Framework/PCEditorManager.m | 14 ++++++++++++ Framework/PCProjectManager.m | 9 +++++++- Headers/ProjectCenter/PCEditorManager.h | 1 + Headers/ProjectCenter/PCProjectManager.h | 1 + Modules/Debuggers/ProjectCenter/GDBWrapper.m | 24 ++++++++++++++++++++ Modules/Debuggers/ProjectCenter/PCDebugger.h | 1 + Modules/Debuggers/ProjectCenter/PCDebugger.m | 15 ++++++++++++ 7 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Framework/PCEditorManager.m b/Framework/PCEditorManager.m index 5108b8e..2c61808 100644 --- a/Framework/PCEditorManager.m +++ b/Framework/PCEditorManager.m @@ -554,5 +554,19 @@ NSString *PCEditorDidResignActiveNotification = [editor scrollToLineNumber: [line integerValue]]; } +- (void)gotoFile: (NSString *)fileName atLine: (NSUInteger)line +{ + id editor = [self openEditorForFile: fileName + editable: YES + windowed: NO]; + + PCProject *project = [_projectManager rootActiveProject]; + [[project projectBrowser] setPath: fileName]; + [_projectManager openFileAtPath: fileName]; + + // [self orderFrontEditorForFile:fileName]; + [editor scrollToLineNumber: line]; +} + @end diff --git a/Framework/PCProjectManager.m b/Framework/PCProjectManager.m index 0b0a3d8..0bc4358 100644 --- a/Framework/PCProjectManager.m +++ b/Framework/PCProjectManager.m @@ -1124,6 +1124,7 @@ NSString *PCActiveProjectDidChangeNotification = @"PCActiveProjectDidChange"; // ============================================================================ - (void)openFileAtPath:(NSString *)filePath + windowed:(BOOL)windowed { editorManager = [self editorManager]; @@ -1131,11 +1132,17 @@ NSString *PCActiveProjectDidChangeNotification = @"PCActiveProjectDidChange"; { [editorManager openEditorForFile:filePath editable:YES - windowed:YES]; + windowed:windowed]; [editorManager orderFrontEditorForFile:filePath]; } } +- (void)openFileAtPath:(NSString *)filePath +{ + [self openFileAtPath: filePath windowed: YES]; +} + + - (void)openFile { NSArray *files = nil; diff --git a/Headers/ProjectCenter/PCEditorManager.h b/Headers/ProjectCenter/PCEditorManager.h index 142aebb..e2b6edc 100644 --- a/Headers/ProjectCenter/PCEditorManager.h +++ b/Headers/ProjectCenter/PCEditorManager.h @@ -69,6 +69,7 @@ - (NSArray *)allEditors; - (void)closeActiveEditor:(id)sender; - (void)closeEditorForFile:(NSString *)file; +- (void)gotoFile: (NSString *)fileName atLine: (NSUInteger)line; - (NSArray *)modifiedFiles; - (BOOL)hasModifiedFiles; diff --git a/Headers/ProjectCenter/PCProjectManager.h b/Headers/ProjectCenter/PCProjectManager.h index 4109b5f..34fdd5a 100644 --- a/Headers/ProjectCenter/PCProjectManager.h +++ b/Headers/ProjectCenter/PCProjectManager.h @@ -164,6 +164,7 @@ extern NSString *PCActiveProjectDidChangeNotification; // Also called by PCAppController - (void)openFileAtPath:(NSString *)filePath; +- (void)openFileAtPath:(NSString *)filePath windowed: (BOOL)windowed; - (void)openFile; - (void)newFile; - (BOOL)saveFile; diff --git a/Modules/Debuggers/ProjectCenter/GDBWrapper.m b/Modules/Debuggers/ProjectCenter/GDBWrapper.m index 33a89ee..86a1245 100644 --- a/Modules/Debuggers/ProjectCenter/GDBWrapper.m +++ b/Modules/Debuggers/ProjectCenter/GDBWrapper.m @@ -379,6 +379,29 @@ [debugger setLastLineNumberParsed: NSNotFound]; } } + + if ([dictionaryName isEqualToString: @"thread-selected"]) + { + NSDictionary *d = [dict objectForKey: @"frame"]; + NSString *fileName; + NSString *lineNum; + + fileName = [d objectForKey:@"fullname"]; + lineNum = [d objectForKey:@"line"]; + + NSLog(@"parsed from GDB thread-selected: %@:%@", fileName, lineNum); + if (fileName != nil && lineNum != nil) + { + [debugger setLastFileNameParsed: fileName]; + [debugger setLastLineNumberParsed: [lineNum intValue]]; + [debugger updateEditor]; + } + else + { + [debugger setLastFileNameParsed: nil]; + [debugger setLastLineNumberParsed: NSNotFound]; + } + } } else { @@ -423,6 +446,7 @@ { [debugger setLastFileNameParsed: fileName]; [debugger setLastLineNumberParsed: [lineNum intValue]]; + [debugger updateEditor]; } else { diff --git a/Modules/Debuggers/ProjectCenter/PCDebugger.h b/Modules/Debuggers/ProjectCenter/PCDebugger.h index f37e309..4e75d9a 100644 --- a/Modules/Debuggers/ProjectCenter/PCDebugger.h +++ b/Modules/Debuggers/ProjectCenter/PCDebugger.h @@ -66,5 +66,6 @@ extern NSString *PCDBDebuggerStartedNotification; - (void) setLastFileNameParsed: (NSString *)fname; - (NSUInteger)lastLineNumberParsed; - (void)setLastLineNumberParsed: (NSUInteger)num; +- (void)updateEditor; @end diff --git a/Modules/Debuggers/ProjectCenter/PCDebugger.m b/Modules/Debuggers/ProjectCenter/PCDebugger.m index 341bd07..5d5774e 100644 --- a/Modules/Debuggers/ProjectCenter/PCDebugger.m +++ b/Modules/Debuggers/ProjectCenter/PCDebugger.m @@ -33,6 +33,10 @@ #import "PCDebugger.h" #import "PCDebuggerView.h" +#import +#import +#import "PCAppController.h" + #import "Modules/Preferences/EditorFSC/PCEditorFSCPrefs.h" #import "PCDebuggerWrapperProtocol.h" #import "GDBWrapper.h" @@ -306,6 +310,17 @@ NSString *PCDBDebuggerStartedNotification = @"PCDBDebuggerStartedNotification"; lastLineNumberParsed = num; } +- (void) updateEditor +{ + NSLog(@"****************** UPDATE EDITOR HIT ***********************"); + PCAppController *controller = (PCAppController *)[NSApp delegate]; + PCProjectManager *pm = [controller projectManager]; + PCEditorManager *em = [pm editorManager]; + [em gotoFile: lastFileNameParsed + atLine: lastLineNumberParsed]; + NSLog(@"****************** UPDATE EDITOR HIT ***********************"); +} + // kill process - (void) interrupt {