summaryrefslogtreecommitdiff
path: root/hurd/debugging/translator/capturing_stdout_and_stderr.mdwn
blob: 47fbbc481bba4b67fd861b08ab9a04dcd376e212 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[[!meta copyright="Copyright © 2008, 2009, 2010, 2012 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

Sometimes it may already be helpful to capture a translator's `stdout` and
`stderr`, for example in this situation where [[translator/pfinet]] was
silently dying all the time, without any console output:

    $ sudo settrans -fgap ↩
      /servers/socket/2 ↩
      /bin/sh -c 'exec >> /root/pfinet.log 2>&1 && date && ↩
        /hurd/pfinet -i eth0 -a [...]'
    $ [...]
    $ cat /root/pfinet.log
    [date]
    NET4: Linux TCP/IP 1.0 for NET4.0
    IP Protocols: ICMP, UDP, TCP
    TCP: Hash tables configured (ehash 65536 bhash 65536)
    pfinet: ../../hurd.work/pfinet/ethernet.c:196: ethernet_xmit: Unexpected error: (os/device) invalid IO size.

(Trying to run [[GDB]] in this case was of no help -- due to a bug in GDB
(supposedly) it wouldn't catch the fault.)

Be made aware that both `stdout` and `stderr` will be block bufferend and no
longer line buffered when doing such a redirection, so you'll have to arrange
for appropriate `fflush`es on these, or force them to be line buffered again
using the appropriate glibc magic (`setvbuf`).  Otherwise you'll see text in
the output files only if either glibc herself decides to flush (after some KiB
of text) the after translator exits.

There is also a [[related open issue|open_issues/translator_stdout_stderr]].