mirror of
https://github.com/gnustep/apps-projectcenter.git
synced 2025-03-17 08:01:24 +00:00
Initial support for external debugging based on Stefan Urbanek's code.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@17463 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
41c72d7a22
commit
78ecb14e67
7 changed files with 143 additions and 4 deletions
|
@ -1,4 +1,10 @@
|
|||
|
||||
2003-08-09 Philippe C.D. Robert <probert@siggraph.org>
|
||||
|
||||
* Support for an external debugger: PCLib/PCDefines.h,
|
||||
PCAppController.m, PCPrefController.m, PCPrefController+UInterface.m,
|
||||
PCPrefController.h, PCLib/PCProjectDebugger.m
|
||||
|
||||
2003-08-03 Philippe C.D. Robert <probert@siggraph.org>
|
||||
|
||||
* Fixed typo: PCLib/PCProject+ComponentHandling.m, PCMenuController.m
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
[defaults setObject:@"/usr/bin/gcc" forKey:Compiler];
|
||||
|
||||
[defaults setObject:@"YES" forKey:ExternalEditor];
|
||||
[defaults setObject:@"YES" forKey:ExternalDebugger];
|
||||
|
||||
[defaults setObject:[NSString stringWithFormat:@"%@/ProjectCenterBuildDir",NSTemporaryDirectory()] forKey:RootBuildDirectory];
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#define SuccessSound @"SuccessSound"
|
||||
#define FailureSound @"FailureSound"
|
||||
#define ExternalEditor @"ExternalEditor"
|
||||
#define ExternalDebugger @"ExternalDebugger"
|
||||
#define TabBehaviour @"TabBehaviour"
|
||||
#define SeparateBuilder @"SeparateBuilder"
|
||||
#define SeparateLauncher @"SeparateLauncher"
|
||||
|
|
|
@ -42,6 +42,15 @@ enum {
|
|||
DEBUG_DEBUG_TARGET = 2
|
||||
};
|
||||
|
||||
@protocol Terminal
|
||||
|
||||
- (BOOL)terminalRunProgram:(NSString *)path
|
||||
withArguments:(NSArray *)args
|
||||
inDirectory:(NSString *)directory
|
||||
properties:(NSDictionary *)properties;
|
||||
|
||||
@end
|
||||
|
||||
@implementation PCProjectDebugger
|
||||
|
||||
- (id)initWithProject:(PCProject *)aProject
|
||||
|
@ -129,9 +138,96 @@ enum {
|
|||
|
||||
- (void)debug:(id)sender
|
||||
{
|
||||
NSRunAlertPanel(@"Attention!",
|
||||
@"Integrated debugging is not yet available...",
|
||||
@"OK",nil,nil);
|
||||
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
|
||||
objectForKey:ExternalDebugger] isEqualToString: @"YES"])
|
||||
{
|
||||
NSString *dp = [currentProject projectName];
|
||||
NSString *fp = nil;
|
||||
NSString *pn = nil;
|
||||
NSString *gdbPath;
|
||||
NSArray *args;
|
||||
NSTask *task;
|
||||
NSDistantObject <Terminal>*terminal;
|
||||
|
||||
/* Get the Terminal application */
|
||||
terminal = (NSDistantObject<Terminal> *)[NSConnection rootProxyForConnectionWithRegisteredName:@"Terminal" host:nil];
|
||||
|
||||
/* Prepare tasks */
|
||||
switch( debugTarget )
|
||||
{
|
||||
case DEBUG_DEFAULT_TARGET:
|
||||
pn = [dp stringByAppendingPathExtension:@"app"];
|
||||
break;
|
||||
case DEBUG_DEBUG_TARGET:
|
||||
pn = [dp stringByAppendingPathExtension:@"debug"];
|
||||
break;
|
||||
default:
|
||||
[NSException raise:@"PCInternalDevException"
|
||||
format:@"Unknown build target!"];
|
||||
break;
|
||||
}
|
||||
|
||||
if( terminal == nil )
|
||||
{
|
||||
NSRunAlertPanel(@"Attention!", @"Terminal.app is not running! Please\nlaunch it before debugging %@", @"Abort",nil,nil,pn);
|
||||
[debugButton setState:NSOffState];
|
||||
return;
|
||||
}
|
||||
|
||||
fp = [[NSFileManager defaultManager] currentDirectoryPath];
|
||||
dp = [fp stringByAppendingPathComponent:dp];
|
||||
fp = [dp stringByAppendingPathComponent:pn];
|
||||
|
||||
task = [[NSTask alloc] init];
|
||||
[task setLaunchPath:fp];
|
||||
fp = [task validatedLaunchPath];
|
||||
RELEASE(task);
|
||||
|
||||
if( fp == nil )
|
||||
{
|
||||
NSRunAlertPanel(@"Attention!", @"No executable found in %@!", @"Abort",nil,nil,dp);
|
||||
[debugButton setState:NSOffState];
|
||||
return;
|
||||
}
|
||||
|
||||
task = [[NSTask alloc] init];
|
||||
|
||||
dp = [[NSUserDefaults standardUserDefaults] objectForKey:PDebugger];
|
||||
if(dp == nil)
|
||||
{
|
||||
dp = [NSString stringWithString:@"/usr/bin/gdb"];
|
||||
}
|
||||
|
||||
if([[NSFileManager defaultManager] isExecutableFileAtPath:dp] == NO)
|
||||
{
|
||||
NSRunAlertPanel(@"Attention!", @"Invalid debugger specified: %@!", @"Abort",nil,nil,dp);
|
||||
RELEASE(task);
|
||||
[debugButton setState:NSOffState];
|
||||
return;
|
||||
}
|
||||
|
||||
[task setLaunchPath:dp];
|
||||
gdbPath = [task validatedLaunchPath];
|
||||
RELEASE(task);
|
||||
|
||||
args = [NSArray arrayWithObjects:
|
||||
gdbPath,
|
||||
@"--args",
|
||||
AUTORELEASE(fp),
|
||||
nil];
|
||||
|
||||
[terminal terminalRunProgram: AUTORELEASE(gdbPath)
|
||||
withArguments: args
|
||||
inDirectory: nil
|
||||
properties: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
NSRunAlertPanel(@"Attention!",
|
||||
@"Integrated debugging is not yet available...",
|
||||
@"OK",nil,nil);
|
||||
}
|
||||
[debugButton setState:NSOffState];
|
||||
}
|
||||
|
||||
- (void)run:(id)sender
|
||||
|
|
|
@ -410,7 +410,7 @@
|
|||
RELEASE(separateEditor);
|
||||
|
||||
// Some buttons
|
||||
v = [[NSBox alloc] initWithFrame: NSMakeRect(5,121,254,77)];
|
||||
v = [[NSBox alloc] initWithFrame: NSMakeRect(5,100,254,98)];
|
||||
[v setTitle: @"Misc"];
|
||||
[prefInterfaceView addSubview: v];
|
||||
RELEASE(v);
|
||||
|
@ -438,6 +438,18 @@
|
|||
[v addSubview: useExternalEditor];
|
||||
[useExternalEditor sizeToFit];
|
||||
RELEASE(useExternalEditor);
|
||||
|
||||
useExternalDebugger=[[NSButton alloc] initWithFrame:NSMakeRect(48,49,204,21)];
|
||||
[useExternalDebugger setTitle: @"Use external Debugger"];
|
||||
[useExternalDebugger setButtonType: NSSwitchButton];
|
||||
[useExternalDebugger setBordered: NO];
|
||||
[useExternalDebugger setRefusesFirstResponder: YES];
|
||||
[useExternalDebugger setTarget: self];
|
||||
[useExternalDebugger setAction: @selector(setUseExternalDebugger:)];
|
||||
[useExternalDebugger setContinuous: NO];
|
||||
[v addSubview: useExternalDebugger];
|
||||
[useExternalDebugger sizeToFit];
|
||||
RELEASE(useExternalDebugger);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
id saveOnQuit;
|
||||
|
||||
id useExternalEditor;
|
||||
id useExternalDebugger;
|
||||
id promptWhenQuit;
|
||||
id promptOnClean;
|
||||
|
||||
|
@ -83,6 +84,7 @@
|
|||
- (void)setSaveOnQuit:(id)sender;
|
||||
|
||||
- (void)setUseExternalEditor:(id)sender;
|
||||
- (void)setUseExternalDebugger:(id)sender;
|
||||
|
||||
- (void)setEditor:(id)sender;
|
||||
- (void)setCompiler:(id)sender;
|
||||
|
|
|
@ -163,6 +163,9 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification";
|
|||
[useExternalEditor setState:
|
||||
([[preferencesDict objectForKey: ExternalEditor]
|
||||
isEqualToString:@"YES"]) ? NSOnState : NSOffState];
|
||||
[useExternalDebugger setState:
|
||||
([[preferencesDict objectForKey: ExternalDebugger]
|
||||
isEqualToString:@"YES"]) ? NSOnState : NSOffState];
|
||||
|
||||
|
||||
if (![prefWindow isVisible])
|
||||
|
@ -328,6 +331,24 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification";
|
|||
forKey:ExternalEditor];
|
||||
}
|
||||
|
||||
- (void)setUseExternalDebugger:(id)sender
|
||||
{
|
||||
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
switch ([[sender selectedCell] state]) {
|
||||
case 0:
|
||||
[def setObject:@"NO" forKey:ExternalDebugger];
|
||||
break;
|
||||
case 1:
|
||||
[def setObject:@"YES" forKey:ExternalDebugger];
|
||||
break;
|
||||
}
|
||||
[def synchronize];
|
||||
|
||||
[preferencesDict setObject:[def objectForKey:ExternalDebugger]
|
||||
forKey:ExternalDebugger];
|
||||
}
|
||||
|
||||
- (void)setEditor:(id)sender
|
||||
{
|
||||
NSString *path = [editorField stringValue];
|
||||
|
|
Loading…
Reference in a new issue