Robert Sesek [Sun, 5 Aug 2007 20:20:34 +0000 (13:20 -0700)]
Casting to remove a warning
* Source/DebuggerConnection.m:
([DebuggerConnection propertyRecieved:]): Casting parent to be an NSXMLElement because childAtIndex returns an NSXMLNode
Robert Sesek [Sun, 5 Aug 2007 19:55:34 +0000 (12:55 -0700)]
Making the buttons change their enabled state depending on where we are in debugging
* Source/DebuggerWindowController.m:
([DebuggerWindowController setStatus:]): Disable all the buttons and reenable "step in" and "run" if we're connected
([DebuggerWindowController setStack:]): Enable the step in/out/over and run buttons appropriately
Robert Sesek [Sun, 5 Aug 2007 08:06:15 +0000 (01:06 -0700)]
The depth fetching of child nodes now works and are properly inserted into the register tree
* Source/DebuggerConnection.h: Changing _depthFetchElement to type id for the mysterious _NSArrayControllerTreeNode type
* Source/DebuggerConnection.m:
([DebuggerConnection propertyReceived:]): Get all the children from the property and then detach them so they can be injected into the tree
* Source/DebuggerWindowController.h: Added a _registerController outlet
* Source/DebuggerWindowController.m:
([DebuggerWindowController addChildren:toNode:]): New method that adds detached children to the specified _NSArrayControllerTreeNod using it's index set
([DebuggerWindowController outlineViewItemDidExpand:]): Change from using an NSXMLElement to the internal TreeNode
* English.lproj/Debugger.nib: Hook up the RegisterController to the outlet
Robert Sesek [Sun, 5 Aug 2007 07:24:05 +0000 (00:24 -0700)]
We now get the property when we go past the currently-fetched depth but we do not have the display updating yet
* Source/DebuggerConnection.h: New ivar _depthFetchElement to record the element that requested more registers
* Source/DebuggerConnection.m:
([DebuggerConnection dataReceived:deliverTo:]): Removed an NSLog()
([DebuggerConnection getProperty:forElement:]): New method that gets a specified property for a specific element
([DebuggerConnection propertyReceived:]): Recived data delivery handler for getProperty:forElement:
* Source/DebuggerWindowController.m:
([DebuggerWindowController outlineViewItemDidExpand:]): Call the getProperty:forElement: method to get deeper properties
* English.lproj/Debugger.nib: Set the delegate of the NSOutlineView to be the first responder
Robert Sesek [Sun, 5 Aug 2007 06:46:07 +0000 (23:46 -0700)]
Moving the depth checker from NSXMLElementAdditions.m to be in DebuggerWindowController
* Source/NSXMLElementAdditions.m:
([NSXMLElement isLeaf]): Moved the checking to see if we need to fetch more
* Source/NSXMLElementAdditions.h: New header file for linking
* Source/DebuggerWindowController.m:
([DebuggerWindowController outlineViewItemDidExpand:]): New method that handles the depth checking
* MacGDBp.xcodeproj: Project changes for NSXMLElementAdditions.h
Robert Sesek [Sun, 5 Aug 2007 05:49:09 +0000 (22:49 -0700)]
Adding support for base64 encoded string values
* Source/base64.c|h: New file from external source
* Source/NSXMLElementAdditions.m:
([NSXMLElement value]): Decode data using the new base64 functions
* MacGDBp.xcodeproj: Adding the base64.c|h files to the project
Robert Sesek [Sun, 5 Aug 2007 03:10:28 +0000 (20:10 -0700)]
In NSXMLElementAdditions adding recognizers to the code for certain special value types
* Source/NSXMLElementAdditions.m:
([NSXMLElement value]): If the item is a leaf, only display an elipsis, and if it's base64 encoded the decode.. er print that it's base64'd
Robert Sesek [Sun, 5 Aug 2007 02:58:27 +0000 (19:58 -0700)]
Removing some NSLog()s and in isLeaf: we now determine if a non-leaf node has it's children
* Source/NSXMLElementAdditions.m:
([NSXMLElement variable]): Remove a NSLog()
([NSXMLElement isLeaf]): If the element is not a leaf, but does not have children, then find the depth we should request more about the property at
Robert Sesek [Sun, 5 Aug 2007 01:22:53 +0000 (18:22 -0700)]
Trying to get the register viewer to work
* Source/NSXMLElementAdditions.m: New category that provides access to attributes that NSTreeController can't access
* MacGDBp.xcodeproj: Added NSXMLElementAdditions.m
* Source/DebuggerConnection.m:
([DebuggerConnection dataReceived:deliverTo:]): Print out the data we're receiving to make debugging easier
([DebuggerConnection updateStackTraceAndRegisters:]): Send the context_get command and receive the data
([DebuggerConnection registerReceived:]): New method to handle the received register packet
* Source/DebuggerWindowController.m|h: Added _register and a setter for it
([DebuggerWindowController setRegister:]): New method
* English.lproj/Debugger.nib: Added a tree controller and tried to hook it up properly
Robert Sesek [Sat, 4 Aug 2007 22:29:39 +0000 (15:29 -0700)]
Fixing the updateSourceViewer function to not depend on -[NSArrayController selection] which is unreliable in returning the right proxy object
* Source/DebuggerWindowController.h: Remove _currentFile as it's not really needed
* Source/DebuggerWindowController.m:
([DebuggerWindowController updateSourceViewer]): Remove the dependency on [NSArrayController selection] and don't bother checking with _currentFile anymore
Robert Sesek [Sat, 4 Aug 2007 21:33:59 +0000 (14:33 -0700)]
Styling the NSTextView source viewer to be a fixed-width font and to have a horizontal scroll bar
* Enblish.lproj/Debugger.nib: Adding an outlet for the NSScrollView and setting some NSTextView options
* Source/DebuggerController.m:
([DebuggerWindowController awakeFromNib]): New method to set up the scrolling system for the source viewer
([DebuggerWindowController updateSourceViewer]): Set the string to "" if there is no selected file, and make the font Monaco
Robert Sesek [Sat, 4 Aug 2007 20:26:02 +0000 (13:26 -0700)]
Starting to implement the source viewer pane
* Source/DebuggerWindowController.h: Adding outlets for StackController, _currentFile, and _sourceViewer
* Source/DebuggerWindowController.m:
([DebuggerWindowController tableViewSelectionDidChange:]): Added delegate notification for when the selection of the tableview changes to update the source viewer
([DebuggerWindowController updateSourceViewer]): New method to refresh the source viewer display
* English.lproj/Debugger.nib: Hooking up the new outlets
Robert Sesek [Sat, 4 Aug 2007 09:14:05 +0000 (02:14 -0700)]
Cleaning up our use of private methods: Moving all private methods into class categories in the .m file, and removing the _ prefix as it is "reserved" for Apple (according to their guidelines).
Robert Sesek [Sat, 4 Aug 2007 08:47:50 +0000 (01:47 -0700)]
Hooking up "Step Over" and "Step Out" buttons
* Source/DebuggerConnection.m|h:
([DebuggerConnection stepOut]): New method
([DebuggerConnection stepOver]): New method
* Source/DebuggerWindowController.m|h:
([DebuggerWindowController stepOut]): New method
([DebuggerWindowController stepOver]): New method
* English.lproj/Debugger.nib: Hooking up the two buttons to the new actions in DebuggerWindowController
Robert Sesek [Sat, 4 Aug 2007 08:37:19 +0000 (01:37 -0700)]
Instead of data received being an NSString, have it be NSData because converting to NSString was actually causing problems and NSXMLDocument can take in NSData just fine
* Source/DebuggerConnection.m: Making all of the delivery functions use NSData not NSString
([DebuggerConnection _handshake:])
([DebuggerConnection _updateStatus:])
([DebuggerConnection _stackReceived:])
* Source/SocketWrapper.m|h: ditto
([SocketWrapper dataReceived:deliverTo:]): Now uses NSData
([SocketWrapper receive:]): Save ourselves some trouble and don't convert the data to NSString
Robert Sesek [Sat, 4 Aug 2007 07:50:45 +0000 (00:50 -0700)]
Instead of directly calling stack_get, get the depth first and then call the maximum depth
* Source/DebuggerConnection.m:
([DebuggerConnection updateStackTraceAndRegisters]): Call stack_depth which in turn calls stack_get
([DebuggerConnection _stackDepthReceived:]): Receives the depth of the stack and then asks for the stack at that depth
Robert Sesek [Sat, 4 Aug 2007 07:38:07 +0000 (00:38 -0700)]
Adding the sent data as the parameter to the dataSent delegate method
* Source/DebuggerConnection.m:
([DebuggerConnection dataSent:]): Print the data sent with the new paramater
* Source/SocketWrapper.m|h: Added a new parameter to dataSent: delegate method which contains the sent data
([SocketWrapper dataSent:])
([SocketWrapper _sendMessageToDelegate:])
([SocketWrapper send:])
Robert Sesek [Sat, 4 Aug 2007 07:08:38 +0000 (00:08 -0700)]
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
Robert Sesek [Fri, 3 Aug 2007 23:59:26 +0000 (16:59 -0700)]
Adding a method to handle getting the stack trace
* Source/DebuggerConnection.m|h:
([DebuggerConnection updateStackTraceAndRegisters]): New method that calls stack_get and eventually context_get
([DebuggerConnection _stackReceived:]): Called when the stack is fully received
Robert Sesek [Fri, 3 Aug 2007 23:49:06 +0000 (16:49 -0700)]
Implementing the "Step In" command
* Source/DebuggerWindowController.m|h:
([DebuggerWindowController stepIn:]): New method to forward user action to the DebuggerConnection
* Source/DebuggerConnection.m|h:
([DebuggerConnection stepIn]): New method to tell the debugger to step in
* English.lproj/Debugger.nib: Hooking up the "step into" button
Robert Sesek [Fri, 3 Aug 2007 23:11:52 +0000 (16:11 -0700)]
Adding functionality to get the IP address of the remote host and then using it in the title
* Source/DebuggerConnection.m|h: Added a _connected ivar to check and see whether or not the connection has been established
([DebuggerConnection remoteHost]): New function that returns the name of the remote host
* Source/DebuggerConnection.m:
([DebuggerConnection initWithPort:]): Do not set the window title anymore
([DebuggerConnection setStatus:]): Set the window title upon status updates
* Source/SocketWrapper.m|h:
([SocketWrapper remoteHost]): New method that gets the remote host's IP address
Robert Sesek [Fri, 3 Aug 2007 22:02:30 +0000 (15:02 -0700)]
Adding support for the "run" command and acutally using the session name
* Source/DebuggerConnection.m|h:
([DebuggerConnection run]): New method that tells the script to continue running
([DebuggerConnection refreshStatus]): New method that sends the status command and then updates the display
([DebuggerConnection handshake:]): Renamed to _handshake
([DebuggerConnection updateStatus:]): Renamed to _updateStatus
([DebuggerConnection _createCommand:]): New method. Creates a new packet to send to the server with the session information tacked on
* Source/DebuggerWindowController.m|h:
([DebuggerWindowController run:]): New method to forward UI command to the DebuggerConnection
Robert Sesek [Fri, 3 Aug 2007 07:06:40 +0000 (00:06 -0700)]
Adding support for error viewing on the Debugger window and statuses.
* English.lproj/Debugger.nib:
- Making the error text be hidden by default.
- Hooking up outlets into DebuggerWindow
* Source/DebuggerWindowController.m|h: Adding _status and _error outlets and setters for them
([DebuggerWindowController setStatus:]): New method
([DebuggerWindowController setError:]): New method
* Source/DebuggerController.m:
([DebuggerController initWithPort:]): Set the inital status to be "Connecting"
([DebuggerController updateStatus:]): New method
([DebuggerController handshake:]): Send a status command to the server and then receive the results using updateStatus:
([DebuggerController errorEncountered:]): Calls [_windowController setError:] using the error message from the NSError
Robert Sesek [Fri, 3 Aug 2007 06:33:38 +0000 (23:33 -0700)]
Adding a selector argument to receive: so that the delegate method can forward the response to that method.
* Source/DebuggerConnection.m:
([DebuggerConnection dataReceived:deliverTo:]): Add a handling for when we have a delivery to make to a specified selector
([DebuggerConnection socketDidAccept]): Tell the initial packet to go to handshake:
([DebuggerConnection handshake:]): New method
* Source/SocketWrapper.h: Update declarations for receive: dataReceived:deliverTo: and added _postNotification:withObject:withDict:
* Source/SocketWrapper.m:
([SocketWrapper _sendMessageToDelegate:]): Added support for NsockDataReceived for the deliverTo: paramater
([SocketWrapper receive:]): Now takes an optional selector to deliver data to when it's finally received
([SocketWrapper _postNotification:withObject:withDict:]): New method
([SocketWrapper _postNotification:withObject:]): Now calls _postNotification:withObject:withDict:
Robert Sesek [Fri, 3 Aug 2007 06:09:03 +0000 (23:09 -0700)]
Implementing the new delegate system throughout SocketWrapper.
* Source/DebuggerConnection.m:
([DebuggerConnection socketDidAccept]): Call receive: to get the handshake packet
([DebuggerConnection errorEncountered:]): New method
* Source/SocketWrapper.m: Adding a new handler for the dataReceived, dataSent, errorEncoutered. Added error messages that can be posted to the observers.
Robert Sesek [Fri, 3 Aug 2007 05:49:50 +0000 (22:49 -0700)]
Finally settled on a delegate/notification system combination that works, and is rather clever if I do say so myself.
* Source/DebuggerConnection.m:
([DebuggerConnection socketDidAccept]): Changing from a notification receiver to a delegate method
* Source/SocketWrapper.h: Making the notification constants not be public
* Source/SocketWrapper.m:
([SocketWrapper initWithPort:]): Register the instance of SocketWrapper as a global notification observer
([SocketWrapper setDelegate:]): Removed all occurrences of notification observing
([SocketWrapper _sendMessageToDelegate:]): New function. Receives all notifications and passes up the ones that the object sent (ableit from another thread) to the delegate
([SocketWrapper connect]): Change the type of notification we post
([SocketWrapper _postNotification:withObject:]): Change the key for where we store the delegate in userInfo
Robert Sesek [Fri, 3 Aug 2007 05:30:49 +0000 (22:30 -0700)]
Threads can't communicate with each other and call methods on each other's objects, so we do have to use notifications.
* Source/SocketWrapper.h: Defining some of the notification constants
* Source/SocketWrapper.m:
([SocketWrapper _connect:]): Use the new notification system
([SocketWrapper _postNotification:withObject:]): Helper method for posting notifications
([SocketWrapper setDelegate:]): Register the delegate for these new notifications
* Source/DebuggerConnection.m:
([DebuggerConnection socketDidAccept:]): Made notification compatible
Robert Sesek [Fri, 3 Aug 2007 04:57:16 +0000 (21:57 -0700)]
Starting to thread-ify SocketWrapper class.
* Source/SocketWrapper.h: Defined connect: and _port, and internal method block
* Source/SocketWraper.m:
([SocketWrapper connect]): New method. Dispatches thread to _connect
([SocketWrapper _connect:]): Threaded method that does the actual connecting to the socket
([SocketWrapper initWithPort:]): Removing connection stuff and placing it in an explicit commit method
([SocketWrapper _postNotification:withObject:]): New helper method.
* Source/DebuggerConnection.m:
([DebuggerConnection socketAccepted]): New method
([DebuggerConnection initWithPort:]): Call [socket connect] and don't release it in the method any more
Robert Sesek [Fri, 3 Aug 2007 04:10:11 +0000 (21:10 -0700)]
Cleaning up and removing remnance of the notification system.
* Source/DebuggerConnection.h: Removing dead _data and prefixing socket with an _
* Source/DebuggerConnection.m: Prefixing use of socket with underscore, removing notification registration, documenting delegate methods
* Source/SocketWrapper.m|h: Removing the definitions for the notification types as we no longer use them
Robert Sesek [Fri, 3 Aug 2007 03:59:12 +0000 (20:59 -0700)]
Improving the efficiency of [SocketWrapper receive]
* Source/SocketWrapper.m:
([SocketWrapper receive]): Cutting down the size of packetLength[], use memmove() instead of strcpy() for moving part of buffer[] to packet[], and autorelease the string we send to the delegate. Also, no longer rely on sizeof() in checking for partial packets because we now have i.
Robert Sesek [Fri, 3 Aug 2007 03:49:09 +0000 (20:49 -0700)]
Delegate methods work far better than notifications, though I'm not sure how threads fit into the mix.
* Source/SocketWrapper.h: Updating the SocketWrapperDelegate informal protocol to use actual arguments instead of NSNotification
* Source/SocketWrapper.m:
(many): Change from using [NSNotificatinoCenter postNotification:] to just calling delegate methods
([SocketWrapper receive]): NSData can't take a pointer to an array, so we copy the buffer into another variable packet[] and send that to NSData
Robert Sesek [Fri, 3 Aug 2007 03:32:44 +0000 (20:32 -0700)]
Using NSNotification to pass messages around upon events... this doesn't work too well for some reason, however.
* Source/DebuggerConnection.m: Set ourselves as the delegate and implement some delegate methods
* Source/SocketWrapper.h:
- Define some NSNotification names
- Set up the delegate
- Define SocketWrapperDelegate informal protocol
* Source/SocketWrapper.m:
(many): Post notifications for basically every method
([SocketWrapper setDelegate:]): Added and registers tons of notifications with it
([SocketWrapper receive]): Working on making the way we get to the null byte less hack-ish
Robert Sesek [Thu, 2 Aug 2007 08:45:41 +0000 (01:45 -0700)]
* Source/SocketWrapper.m: Include <unistd.h> to remove some implicit function definition warnigns and implement send:
([SocketWrapper send:]): Implemented method
Robert Sesek [Thu, 2 Aug 2007 06:45:16 +0000 (23:45 -0700)]
* Source/SocketWrapper.m:
([SocketWrapper receive]):
- Properly handle packets that are too large for the buffer
- Actually return an autorelease'd NSString instead of nil
Robert Sesek [Thu, 2 Aug 2007 06:27:02 +0000 (23:27 -0700)]
* MacGDBp.xcodeproj: Change the C mode to be C99
* Source/DebuggerConnection.m:
([DebuggerConnection initWithPort:]): If the result of init'ing a SocketWrapper is nil, throw an "error"
* Source/SocketWrapper:
([SocketWrapper receive]): New method. Used to fetch a string from a socket
([SocketWrapper send:]): New method. Used to write to a socket
Robert Sesek [Thu, 2 Aug 2007 04:51:09 +0000 (21:51 -0700)]
Removing all information about specifying a host because GDBp doesn't actually support anything but PHP->localhost.
* English.lproj/Connect.nib: Removing and unhooking the host text field
* Source/ConnectWindowController.h: Removing _host outlet
* Source/ConnectWindowController.m:
([ConnectWindowController connect:]): Remove the "Host" parameter from the DebuggerConnection init method
* Source/DebuggerConnection.h: Removing the _host ivar and removing the "host" parameter from the init method as well as the host getter method
* Source/DebuggerConnection.m:
([DebuggerConnection initWithHost:port:session:]): Renamed to [DebuggerConnection initWithPort:session:]
([DebuggerConnection dealloc]): Removed _host ivar and so it no longer needs to be release'd
([DebuggerConnection host]): Removed
* Source/DebuggerWindowController.m:
([DebuggerWindowController initWithConnection:]): No longer set the host in the window title
Robert Sesek [Thu, 2 Aug 2007 04:43:47 +0000 (21:43 -0700)]
Changing from using NSStream which didn't actually work correctly to using a custom-rolled socket implementation
* Source/SocketWrapper.m/h: Adding to wrap around BSD sockets
* Source/DebuggerConnection.h: Removing _input and _output in favor of just socket
* Source/DebuggerConnection.m:
([DebuggerConnection initWithHost:port:session:]): Change from using NSStream and its variants to SocketWrapper
([DebuggerConnection stream:handleEvent:]): Removed
Robert Sesek [Wed, 1 Aug 2007 20:20:47 +0000 (13:20 -0700)]
* Source/DebuggerConnection.h: Added _input and _output instance variables
* Source/DebuggerConnection.m:
([DebuggerConnection initWithHost: port: session:]): Set up the NSStream's and register ourselves with NSApplicationWillTerminateNotification
([DebuggerConnection applicationWillTerminate:]): New method to release the object on close
([DebuggerConnection dealloc]): Close and release the streams upon deallocation
Robert Sesek [Wed, 1 Aug 2007 19:52:33 +0000 (12:52 -0700)]
* Source/DebuggerConnection: Adding getters for _host, _port, and _session
([DebuggerConnection host]): New method
([DebuggerConnection port]): ditto
([DebuggerConnection session]): ditto
* Source/DebuggerWindowController.m:
([DebuggerWindowController initWithConnection:]): Set the window title when we load
Robert Sesek [Wed, 1 Aug 2007 19:31:30 +0000 (12:31 -0700)]
* Source/AppDelegate.m:
([AppDelegate applicationDidFinishLaunching:]): Use [AppDelegate showConnectionWindow:] to open the window instead of callling the exact same code
Robert Sesek [Wed, 1 Aug 2007 19:00:14 +0000 (12:00 -0700)]
* Source/AppDelegate:
([AppDelegate showConnectionWindow:]): Opens the connect window so another connection can be established
* English.lproj/MainMenu.nib:
- Replacing some more "New Application" junk that we no longer want
- Removing the "File" menu in place of a "Connection" menu with an "Open" command that opens the connection window
Robert Sesek [Wed, 1 Aug 2007 18:31:51 +0000 (11:31 -0700)]
* Source/ConnectWindowController.h: Adding outlets and actions for our interface
* Source/ConnectWindowController.m:
([ConnectWindowController connect:]): New function to create a new DebuggerConnection
* Source/DebuggerConnection.m/h: Added
* Source/DebuggerWindowController.m/h: Added
* English.lproj/Connect.nib: Hooking up new outlets and actions from ConnectWindowController
Robert Sesek [Wed, 1 Aug 2007 17:54:33 +0000 (10:54 -0700)]
* English.lproj/Connect.nib: Setting the File's Owner to be ConnectWindowController and the window outlet to be the window
* Source/AppDelegate.m:
([AppDelegate applicationDidFinishLaunching:]): New method to show the connect window after launch
* Source/ConnectWindowController.m/h: Adding the NSWindowController subclass for the connection window
Robert Sesek [Wed, 1 Aug 2007 16:36:43 +0000 (09:36 -0700)]
- Adding a .gitignore to hide the nib backup files
- Moving the window tha was in MainMenu.nib to be in Debugger.nib
- Added AppDelegate.[mh] and set it as the [NSApplication delegate:] in MainMenu.nib