From 8968e1f0a6922d9602d29cdc1337a8f37608cd4c Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Sat, 4 Aug 2007 00:08:38 -0700 Subject: [PATCH] Implementing a buggy stack trace viewer. * Source/DebuggerConnection.m: ([DebuggerConnection _stackReceived:]): New method, that is probably leaky, that gets all the attributes for a stack trace and dictionary-izes and array-izes them * Source/DebuggerWindowController.m|h: Added a _stack ivar and then an appropriate setter ([DebuggerWindowController setStack:]): New method * English.lproj/Debugger.nib: Adding a binding to _stack to display the stacktrace --- English.lproj/Debugger.nib/keyedobjects.nib | Bin 11965 -> 13530 bytes Source/DebuggerConnection.m | 16 +++++++++++++++- Source/DebuggerWindowController.h | 3 +++ Source/DebuggerWindowController.m | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/English.lproj/Debugger.nib/keyedobjects.nib b/English.lproj/Debugger.nib/keyedobjects.nib index ae4517560d598964227a94c7e1ce3e4ad16e61d6..9857d6a1ba852b695f147bd8e844fb6b2d38526b 100644 GIT binary patch delta 7070 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 F{|_N+pCbSO diff --git a/Source/DebuggerConnection.m b/Source/DebuggerConnection.m index f96164a..6f2db2e 100644 --- a/Source/DebuggerConnection.m +++ b/Source/DebuggerConnection.m @@ -202,7 +202,21 @@ */ - (void)_stackReceived: (NSString *)packet { - NSLog(@"stacktrace = %@", packet); + NSXMLDocument *doc = [[NSXMLDocument alloc] initWithXMLString: packet options: NSXMLDocumentTidyXML error: nil]; + NSArray *children = [[doc rootElement] children]; + NSMutableArray *stack = [NSMutableArray array]; + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + for (int i = 0; i < [children count]; i++) + { + NSArray *attrs = [[children objectAtIndex: i] attributes]; + for (int j = 0; j < [attrs count]; j++) + { + [dict setValue: [[attrs objectAtIndex: j] stringValue] forKey: [[attrs objectAtIndex: j] name]]; + } + [stack addObject: dict]; + dict = [NSMutableDictionary dictionary]; + } + [_windowController setStack: stack]; } /** diff --git a/Source/DebuggerWindowController.h b/Source/DebuggerWindowController.h index f982cb4..dfc08c0 100644 --- a/Source/DebuggerWindowController.h +++ b/Source/DebuggerWindowController.h @@ -22,6 +22,8 @@ { DebuggerConnection *_connection; + NSArray *_stack; + IBOutlet NSTextField *_status; IBOutlet NSTextField *_error; } @@ -30,6 +32,7 @@ - (void)setStatus: (NSString *)status; - (void)setError: (NSString *)error; +- (void)setStack: (NSArray *)node; - (IBAction)run: (id)sender; - (IBAction)stepIn: (id)sender; diff --git a/Source/DebuggerWindowController.m b/Source/DebuggerWindowController.m index 7972066..7034b64 100644 --- a/Source/DebuggerWindowController.m +++ b/Source/DebuggerWindowController.m @@ -61,6 +61,20 @@ [_error setHidden: NO]; } +/** + * Sets the root node element of the stacktrace + */ +- (void)setStack: (NSArray *)stack +{ + if (_stack != nil) + { + [_stack release]; + } + + _stack = stack; + [_stack retain]; +} + /** * Forwards the message to run script execution to the connection */ -- 2.22.5