提交 057a7855 authored 作者: abergeron's avatar abergeron 提交者: GitHub

Merge pull request #6194 from aam-at/breakpoint

Support more debuggers for PdbBreakpoint
...@@ -608,3 +608,6 @@ Breakpoint during Theano function execution ...@@ -608,3 +608,6 @@ Breakpoint during Theano function execution
You can set a breakpoint during the execution of a Theano function with You can set a breakpoint during the execution of a Theano function with
:class:`PdbBreakpoint <theano.tests.breakpoint.PdbBreakpoint>`. :class:`PdbBreakpoint <theano.tests.breakpoint.PdbBreakpoint>`.
:class:`PdbBreakpoint <theano.tests.breakpoint.PdbBreakpoint>` automatically
detects available debuggers and uses the first available in the following order:
`pudb`, `ipdb`, or `pdb`.
from __future__ import absolute_import, print_function, division from __future__ import absolute_import, print_function, division
import numpy as np import numpy as np
import pdb import imp
import theano import theano
from theano.gof import Op, Apply from theano.gof import Op, Apply
...@@ -11,7 +11,8 @@ class PdbBreakpoint(Op): ...@@ -11,7 +11,8 @@ class PdbBreakpoint(Op):
""" """
This is an identity-like op with the side effect of enforcing a This is an identity-like op with the side effect of enforcing a
conditional breakpoint, inside a theano function, based on a symbolic conditional breakpoint, inside a theano function, based on a symbolic
scalar condition. scalar condition. It automatically detects available debuggers and uses
the first available in the following order: `pudb`, `ipdb`, or `pdb`.
:type name: String :type name: String
:param name: name of the conditional breakpoint. To be printed when the :param name: name of the conditional breakpoint. To be printed when the
...@@ -116,7 +117,16 @@ class PdbBreakpoint(Op): ...@@ -116,7 +117,16 @@ class PdbBreakpoint(Op):
print("Their contents can be altered and, when execution") print("Their contents can be altered and, when execution")
print("resumes, the updated values will be used.") print("resumes, the updated values will be used.")
print("-------------------------------------------------") print("-------------------------------------------------")
pdb.set_trace()
if imp.find_module('pudb'):
import pudb
pudb.set_trace()
elif imp.find_module('ipdb'):
import ipdb
ipdb.set_trace()
else:
import pdb
pdb.set_trace()
# Take the new values in monitored, cast them back to their # Take the new values in monitored, cast them back to their
# original type and store them in the output_storage # original type and store them in the output_storage
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论