GDBUnixProcess.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 20 Jun 2014 22:14:51 +0100
changeset 23 a7eb888c81b5
child 24 98ff50f8a25d
permissions -rw-r--r--
Introduced GDBProcess - a class encapsulating gdb OS process.

"{ Package: 'jv:libgdbs' }"

GDBProcess subclass:#GDBUnixProcess
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'GDB-Private'
!

!GDBUnixProcess class methodsFor:'instance creation'!

new
    "return an initialized instance"

    ^ self basicNew initialize.
! !

!GDBUnixProcess methodsFor:'initialization'!

initialize
    | inputPipe  input  outputPipe  output  args |

    inputPipe := NonPositionableExternalStream makePipe.
    input := inputPipe second.
    outputPipe := NonPositionableExternalStream makePipe.
    output := outputPipe first.
    args := #( '/usr/bin/gdb' '--interpreter' 'mi2' ).
    Processor 
        monitor:[
            pid := OperatingSystem 
                    exec:args first
                    withArguments:args
                    environment:OperatingSystem getEnvironment
                    fileDescriptors:{
                            inputPipe first fileDescriptor.
                            outputPipe second fileDescriptor.
                            outputPipe second fileDescriptor
                        }
                    fork:true
                    newPgrp:false
                    inDirectory:Filename currentDirectory.
            debuggerInput := input.
            debuggerOutput := output.
            pid.
        ]
        action:[:stat | self exited:stat. ].
    inputPipe first close.
    outputPipe second close.
    pid isNil ifTrue:[
        input close.
        output close.
        self error:'Failed to launch gdb'.
    ].

    "Modified: / 20-06-2014 / 21:35:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !