GDBUnixProcess.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 24 Jun 2014 00:55:57 +0100
changeset 25 58e042a191a9
parent 24 98ff50f8a25d
child 58 531c7f5d6558
permissions -rw-r--r--
More work on GDB session recorder.

"{ Package: 'jv:libgdbs' }"

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

!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' '-q' '-nx' '--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: / 23-06-2014 / 23:37:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !