GDBUnixProcess.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 01 Mar 2015 08:28:30 +0000
changeset 58 531c7f5d6558
parent 25 58e042a191a9
child 78 c24e7d8bc881
permissions -rw-r--r--
Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
     1
"{ Encoding: utf8 }"
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
     2
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ Package: 'jv:libgdbs' }"
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
     5
"{ NameSpace: Smalltalk }"
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
     6
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
GDBProcess subclass:#GDBUnixProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	instanceVariableNames:''
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
     9
	classVariableNames:'GDBExecutable'
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
	poolDictionaries:''
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
	category:'GDB-Private'
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    14
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    15
!GDBUnixProcess class methodsFor:'accessing'!
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    16
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    17
gdbExecutable
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    18
    ^ GDBExecutable
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    19
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    20
    "Created: / 01-03-2015 / 08:07:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    21
!
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    22
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    23
gdbExecutable: aString
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    24
    GDBExecutable := aString
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    25
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    26
    "Created: / 01-03-2015 / 08:07:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    27
! !
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    28
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!GDBUnixProcess methodsFor:'initialization'!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
initialize
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    | inputPipe  input  outputPipe  output  args |
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    inputPipe := NonPositionableExternalStream makePipe.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    input := inputPipe second.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    outputPipe := NonPositionableExternalStream makePipe.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    output := outputPipe first.
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    38
    args := { GDBExecutable ? '/usr/bin/gdb' . '-q' . '-nx' . '--interpreter' . 'mi2' }.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    Processor 
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
        monitor:[
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
            pid := OperatingSystem 
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
                    exec:args first
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
                    withArguments:args
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
                    environment:OperatingSystem getEnvironment
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
                    fileDescriptors:{
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
                            inputPipe first fileDescriptor.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
                            outputPipe second fileDescriptor.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
                            outputPipe second fileDescriptor
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
                        }
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
                    fork:true
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
                    newPgrp:false
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
                    inDirectory:Filename currentDirectory.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
            debuggerInput := input.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
            debuggerOutput := output.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
            pid.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
        ]
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        action:[:stat | self exited:stat. ].
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    inputPipe first close.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    outputPipe second close.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    pid isNil ifTrue:[
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
        input close.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
        output close.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
        self error:'Failed to launch gdb'.
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    ].
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    66
    "Modified: / 01-03-2015 / 08:06:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
! !
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
58
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    69
!GDBUnixProcess class methodsFor:'documentation'!
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    70
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    71
version_HG
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    72
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    73
    ^ '$Changeset: <not expanded> $'
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    74
! !
531c7f5d6558 Allow for setting path to GDB executable via classvar in GDBUnixProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    75