~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/strace.py

  • Committer: Patch Queue Manager
  • Date: 2014-09-22 19:14:34 UTC
  • mfrom: (6598.1.2 bzr)
  • Revision ID: pqm@pqm.ubuntu.com-20140922191434-6bbnpnxi5jab4vim
(richard-wilbur) Allows launchpad APIs to use proxies by default(Paul Gear).
 (Paul Gear)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
"""Support for running strace against the current process."""
19
19
 
20
 
import errno
 
20
from __future__ import absolute_import
 
21
 
21
22
import os
22
23
import signal
23
24
import subprocess
26
27
from bzrlib import errors
27
28
 
28
29
 
29
 
# this is currently test-focused, so importing bzrlib.tests is ok. We might
30
 
# want to move feature to its own module though.
31
 
from bzrlib.tests import Feature
32
 
 
33
 
 
34
30
def strace(function, *args, **kwargs):
35
31
    """Invoke strace on function.
36
32
 
54
50
    # start strace
55
51
    strace_cmd = ['strace', '-r', '-tt', '-p', str(pid), '-o', log_file.name]
56
52
    if follow_children:
57
 
        strace_args.append('-f')
 
53
        strace_cmd.append('-f')
58
54
    # need to catch both stdout and stderr to work around
59
55
    # bug 627208
60
56
    proc = subprocess.Popen(strace_cmd,
98
94
        self.err_messages = err_messages
99
95
 
100
96
 
101
 
class _StraceFeature(Feature):
102
 
 
103
 
    def _probe(self):
104
 
        try:
105
 
            proc = subprocess.Popen(['strace'],
106
 
                stderr=subprocess.PIPE,
107
 
                stdout=subprocess.PIPE)
108
 
            proc.communicate()
109
 
            return True
110
 
        except OSError, e:
111
 
            if e.errno == errno.ENOENT:
112
 
                # strace is not installed
113
 
                return False
114
 
            else:
115
 
                raise
116
 
 
117
 
    def feature_name(self):
118
 
        return 'strace'
119
 
 
120
 
StraceFeature = _StraceFeature()