mirror of
https://github.com/gnustep/apps-projectcenter.git
synced 2025-03-17 08:01:24 +00:00
improve gdb parser to understand information in {} as a sub-dictionary and look-ahead for it
This commit is contained in:
parent
82c6aa3162
commit
6ab80ec17d
1 changed files with 57 additions and 4 deletions
|
@ -156,6 +156,46 @@
|
|||
[tView setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
/*
|
||||
parse subpart of the MI reply which may look like this:
|
||||
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804872c",func="main",file="main.m",fullname="/home/multix/code/gnustep-svc/DirectoryTest/main.m",line="23",thread-groups=["i1"],times="1",original-location="main.m:23"}
|
||||
*/
|
||||
- (NSDictionary *) parseKeyValueString: (NSString *)stringInput
|
||||
{
|
||||
if (nil != stringInput)
|
||||
{
|
||||
NSMutableDictionary *mdict;
|
||||
NSScanner *stringScanner;
|
||||
NSString *key = NULL;
|
||||
NSString *value = NULL;
|
||||
|
||||
mdict = [[NSMutableDictionary alloc] init];
|
||||
stringScanner = [NSScanner scannerWithString: stringInput];
|
||||
|
||||
while([stringScanner isAtEnd] == NO)
|
||||
{
|
||||
[stringScanner scanUpToString: @"=" intoString: &key];
|
||||
[stringScanner scanString: @"=" intoString: NULL];
|
||||
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
[stringScanner scanUpToString: @"\"" intoString: &value];
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
[stringScanner scanString: @"," intoString: NULL];
|
||||
|
||||
// we fail to parse if the value is in []
|
||||
// NSLog(@"parse KVS: key %@ value %@", key, value);
|
||||
if (key != nil && value != nil)
|
||||
[mdict setObject:value forKey:key];
|
||||
}
|
||||
return [mdict autorelease];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
/*
|
||||
Parses a line coming from the debugger. It could be eiher a stanard outpu or it may come from the machine
|
||||
interface of gdb.
|
||||
*/
|
||||
- (PCDebuggerOutputTypes) parseStringLine: (NSString *)stringInput
|
||||
{
|
||||
NSScanner *stringScanner;
|
||||
|
@ -183,6 +223,8 @@
|
|||
if(prefix != nil)
|
||||
{
|
||||
NSString *dictionaryName = NULL;
|
||||
|
||||
NSLog(@"scanning MI |%@|", stringInput);
|
||||
|
||||
[stringScanner scanUpToString: @"," intoString: &dictionaryName];
|
||||
|
||||
|
@ -194,16 +236,27 @@
|
|||
if(dictionaryName != nil)
|
||||
{
|
||||
NSString *key = NULL;
|
||||
NSString *value = NULL;
|
||||
id value = nil;
|
||||
|
||||
while([stringScanner isAtEnd] == NO)
|
||||
{
|
||||
[stringScanner scanString: @"," intoString: NULL];
|
||||
[stringScanner scanUpToString: @"=" intoString: &key];
|
||||
[stringScanner scanString: @"=" intoString: NULL];
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
[stringScanner scanUpToString: @"\"" intoString: &value];
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
if ([stringInput characterAtIndex:[stringScanner scanLocation]] == '{')
|
||||
{
|
||||
[stringScanner scanString: @"{" intoString: NULL];
|
||||
[stringScanner scanUpToString: @"}" intoString: &value];
|
||||
[stringScanner scanString: @"}" intoString: NULL];
|
||||
value = [self parseKeyValueString: value];
|
||||
}
|
||||
else
|
||||
{
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
[stringScanner scanUpToString: @"\"" intoString: &value];
|
||||
[stringScanner scanString: @"\"" intoString: NULL];
|
||||
}
|
||||
NSLog(@"key %@ value %@", key, value);
|
||||
|
||||
if([key isEqualToString:@"pid"] &&
|
||||
[dictionaryName isEqualToString: @"thread-group-started"])
|
||||
|
|
Loading…
Reference in a new issue