Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
5379a390
Commit
5379a390
authored
Oct 27, 2012
by
Senthil Kumaran
Browse files
Options
Browse Files
Download
Plain Diff
Automated merge with
file:///home/vagrant/3.3
parents
18bbcd26
16acce77
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
38 deletions
+46
-38
Lib/test/test_gdb.py
Lib/test/test_gdb.py
+46
-38
No files found.
Lib/test/test_gdb.py
View file @
5379a390
...
@@ -19,39 +19,57 @@ except OSError:
...
@@ -19,39 +19,57 @@ except OSError:
# This is what "no gdb" looks like. There may, however, be other
# This is what "no gdb" looks like. There may, however, be other
# errors that manifest this way too.
# errors that manifest this way too.
raise
unittest
.
SkipTest
(
"Couldn't find gdb on the path"
)
raise
unittest
.
SkipTest
(
"Couldn't find gdb on the path"
)
gdb_version_number
=
re
.
search
(
b"^GNU gdb [^
\
d]*(
\
d+)
\
.
"
, gdb_version)
gdb_version_number
=
re
.
search
(
b"^GNU gdb [^
\
d]*(
\
d+)
\
.(
\
d)"
,
gdb_version
)
if int(gdb_version_number.group(1)) < 7:
gdb_major_version
=
int
(
gdb_version_number
.
group
(
1
))
gdb_minor_version
=
int
(
gdb_version_number
.
group
(
2
))
if
gdb_major_version
<
7
:
raise
unittest
.
SkipTest
(
"gdb versions before 7.0 didn't support python embedding"
raise
unittest
.
SkipTest
(
"gdb versions before 7.0 didn't support python embedding"
" Saw:
\
n
"
+
gdb_version
.
decode
(
'ascii'
,
'replace'
))
" Saw:
\
n
"
+
gdb_version
.
decode
(
'ascii'
,
'replace'
))
# Location of custom hooks file in a repository checkout.
checkout_hook_path
=
os
.
path
.
join
(
os
.
path
.
dirname
(
sys
.
executable
),
'python-gdb.py'
)
def
run_gdb
(
*
args
,
**
env_vars
):
"""Runs gdb in --batch mode with the additional arguments given by *args.
Returns its (stdout, stderr) decoded from utf-8 using the replace handler.
"""
if
env_vars
:
env
=
os
.
environ
.
copy
()
env
.
update
(
env_vars
)
else
:
env
=
None
base_cmd
=
(
'gdb'
,
'--batch'
)
if
(
gdb_major_version
,
gdb_minor_version
)
>=
(
7
,
4
):
base_cmd
+=
(
'-iex'
,
'add-auto-load-safe-path '
+
checkout_hook_path
)
out
,
err
=
subprocess
.
Popen
(
base_cmd
+
args
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
env
=
env
,
).
communicate
()
return
out
.
decode
(
'utf-8'
,
'replace'
),
err
.
decode
(
'utf-8'
,
'replace'
)
# Verify that "gdb" was built with the embedded python support enabled:
# Verify that "gdb" was built with the embedded python support enabled:
cmd = "--eval-command=python import sys; print sys.version_info"
gdbpy_version
,
_
=
run_gdb
(
"--eval-command=python import sys; print sys.version_info"
)
p = subprocess.Popen(["gdb", "--batch", cmd],
if
not
gdbpy_version
:
stdout=subprocess.PIPE)
gdbpy_version, _ = p.communicate()
if gdbpy_version == b'':
raise
unittest
.
SkipTest
(
"gdb not built with embedded python support"
)
raise
unittest
.
SkipTest
(
"gdb not built with embedded python support"
)
# Verify that "gdb" can load our custom hooks
# Verify that "gdb" can load our custom hooks
. In theory this should never
p = subprocess.Popen(["gdb", "--batch", cmd,
# fail, but we don't handle the case of the hooks file not existing if the
"--args", sys.executable],
# tests are run from an installed Python (we'll produce failures in that case).
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
cmd
=
[
'--args'
,
sys
.
executable
]
_
_, gdbpy_errors = p.communicate(
)
_
,
gdbpy_errors
=
run_gdb
(
'--args'
,
sys
.
executable
)
if
b
"auto-loading has been declined" in gdbpy_errors:
if
"auto-loading has been declined"
in
gdbpy_errors
:
msg = "gdb security settings prevent use of custom hooks:
%s
"
msg
=
"gdb security settings prevent use of custom hooks: "
raise unittest.SkipTest(msg
% gdbpy_errors
)
raise
unittest
.
SkipTest
(
msg
+
gdbpy_errors
.
rstrip
()
)
def
gdb_has_frame_select
():
def
gdb_has_frame_select
():
# Does this build of gdb have gdb.Frame.select ?
# Does this build of gdb have gdb.Frame.select ?
cmd = "--eval-command=python print(dir(gdb.Frame))"
stdout
,
_
=
run_gdb
(
"--eval-command=python print(dir(gdb.Frame))"
)
p = subprocess.Popen(["gdb", "--batch", cmd],
m
=
re
.
match
(
r'.*\
[(.*)
\].*'
,
stdout
)
stdout=subprocess.PIPE)
stdout, _ = p.communicate()
m = re.match(br'
.
*
\
[(.
*
)
\
].
*
', stdout)
if
not
m
:
if
not
m
:
raise
unittest
.
SkipTest
(
"Unable to parse output from gdb.Frame.select test"
)
raise
unittest
.
SkipTest
(
"Unable to parse output from gdb.Frame.select test"
)
gdb_frame_dir = m.group(1).split(
b
'
,
')
gdb_frame_dir
=
m
.
group
(
1
).
split
(
', '
)
return
b
"'
select
'" in gdb_frame_dir
return
"'select'"
in
gdb_frame_dir
HAS_PYUP_PYDOWN
=
gdb_has_frame_select
()
HAS_PYUP_PYDOWN
=
gdb_has_frame_select
()
...
@@ -61,21 +79,6 @@ class DebuggerTests(unittest.TestCase):
...
@@ -61,21 +79,6 @@ class DebuggerTests(unittest.TestCase):
"""Test that the debugger can debug Python."""
"""Test that the debugger can debug Python."""
def run_gdb(self, *args, **env_vars):
"""Runs gdb with the command line given by *args.
Returns its stdout, stderr
"""
if env_vars:
env = os.environ.copy()
env.update(env_vars)
else:
env = None
out, err = subprocess.Popen(
args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env,
).communicate()
return out.decode('
utf
-
8
', '
replace
'), err.decode('
utf
-
8
', '
replace
')
def
get_stack_trace
(
self
,
source
=
None
,
script
=
None
,
def
get_stack_trace
(
self
,
source
=
None
,
script
=
None
,
breakpoint
=
BREAKPOINT_FN
,
breakpoint
=
BREAKPOINT_FN
,
cmds_after_breakpoint
=
None
,
cmds_after_breakpoint
=
None
,
...
@@ -132,7 +135,7 @@ class DebuggerTests(unittest.TestCase):
...
@@ -132,7 +135,7 @@ class DebuggerTests(unittest.TestCase):
# print ' '.join(args)
# print ' '.join(args)
# Use "args" to invoke gdb, capturing stdout, stderr:
# Use "args" to invoke gdb, capturing stdout, stderr:
out
,
err
=
self
.
run_gdb
(
*
args
,
PYTHONHASHSEED
=
'0'
)
out
,
err
=
run_gdb
(
*
args
,
PYTHONHASHSEED
=
'0'
)
# Ignore some noise on stderr due to the pending breakpoint:
# Ignore some noise on stderr due to the pending breakpoint:
err
=
err
.
replace
(
'Function "%s" not defined.
\
n
'
%
breakpoint
,
''
)
err
=
err
.
replace
(
'Function "%s" not defined.
\
n
'
%
breakpoint
,
''
)
...
@@ -149,6 +152,11 @@ class DebuggerTests(unittest.TestCase):
...
@@ -149,6 +152,11 @@ class DebuggerTests(unittest.TestCase):
'Do you need "set solib-search-path" or '
'Do you need "set solib-search-path" or '
'"set sysroot"?
\
n
'
,
'"set sysroot"?
\
n
'
,
''
)
''
)
err
=
err
.
replace
(
'warning: Could not load shared library symbols for '
'linux-gate.so.1.
\
n
'
'Do you need "set solib-search-path" or '
'"set sysroot"?
\
n
'
,
''
)
# Ensure no unexpected error messages:
# Ensure no unexpected error messages:
self
.
assertEqual
(
err
,
''
)
self
.
assertEqual
(
err
,
''
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment