何时在Visual Studio 2010中启用"浏览到查找源"?(见下文)

另外,我想启用它,以便我可以从http://referencesource.microsoft.com/浏览已经下载的源代码文件.
这很有用,因为Microsoft并不总是使用最新的补丁同时发布PDB /源代码.因此,如果我想进入DateTime,我真的不关心不涉及DateTime的最新补丁.我只想浏览我从http://referencesource.microsoft.com/下载的代码.
经过一些调查后,我发现dia2dump是一个查看PDB文件内容的有用工具.(它在C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\)
看起来当我看不到类似DateTime的源代码时,使用.NET Framework步进,mscorlib.pdb实际上会下载一个文件.
但如果你用dia2dump查看它,它不包含源文件映射.换句话说没用,因为即使你可以像我最初的想法一样浏览源代码,它也行不通,因为没有源文件映射,没有函数的起始地址,还有很多东西丢失:(
我认为这里的解决方案是使用.NET Reflector Pro来保存虚拟机,使用源代码然后禁用更新的框架版本.
我喜欢使用以下方法检查Python脚本中的错误:
$ python3 -m pdb my_script.py
Run Code Online (Sandbox Code Playgroud)
这让我进入了一个pdb提示符,从那里我可以c继续执行,当它遇到错误时,我可以检查变量然后q退出脚本执行以返回到我的shell.
我尝试使用iPython调试器模块,因为它更加丰富多彩:
$ python3 -m ipdb my_script.py
Run Code Online (Sandbox Code Playgroud)
但是,一旦检查完错误,我就无法退出调试器.使用qquit命令只是在重新执行脚本和事后模式之间保持切换:
$ python3 -m ipdb my_script.py
ipdb> c
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> Inspect some variables at this point
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger …Run Code Online (Sandbox Code Playgroud) 你将什么插入到Python源代码中以使其进入pdb(当执行到达那个位置时)?
根据msdn http://msdn.microsoft.com/en-us/library/8cw0bt21.aspx,编译设置"/ debug:pdbonly"和"/ debug:full"将生成.pdb(程序数据库)文件.
但是,有什么区别?
该页面说:"/ debug:pdbonly和/ debug:full之间的一个区别在于/ debug:full编译器会发出一个DebuggableAttribute,它用于告诉JIT编译器调试信息是否可用.因此,您将得到一个如果使用/ debug:full,如果您的代码包含DebuggableAttribute设置为false,则会出现错误."
很好,所以这是代码和编译设置之间可能的冲突,如果代码将DebuggableAttribute设置为false并且编译设置为/ debug:full,则JIT将丢失.
但这是编译设置"/ debug:pdbonly"和"/ debug:full"之间的唯一区别吗?
如果将带有"/ debug:pdbonly"或"/ debug:full"编译的pdb文件传递给最终用户,是否会出现安全问题?
我知道可以从命令行调试Python脚本
python -m pdb my_script.py
Run Code Online (Sandbox Code Playgroud)
if my_script.py是一个打算运行的脚本python my_script.py.
但是,my_module.py应该运行python模块python -m my_module.甚至包含相对导入的脚本也应该运行python -m.我怎么能python -m my_module在pdb控制下运行?以下不起作用:
python -m pdb -m my_module
Run Code Online (Sandbox Code Playgroud) 我正在使用一个异步库 ( asyncpg ),我想调试一些异步调用来查询数据库。
我放置了一个 pdb 断点并想尝试一些查询:
(pdb) await asyncpg.fetch("select * from foo;")
*** SyntaxError: 'await' outside function
Run Code Online (Sandbox Code Playgroud)
能够这样做会很棒,因为它允许我尝试一些 SQL 查询并查看结果,所有这些都来自我的调试器。
是否可以?
最近在将调试器添加到我的python 2.7.10代码时,我得到以下消息:
Traceback (most recent call last):
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/connectors/amqplib_connector.py", line 191, in acking_callback
callback(message.body)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/consumable_message_queue.py", line 32, in deserialized_callback
self._callback_method(msg)
File "/Users/isaachess/Programming/vivint/Platform/BusinessLogic/businesslogic/util/statsd_util.py", line 95, in _time_func
retVal = f(*args, **kwargs)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
BdbQuit
Run Code Online (Sandbox Code Playgroud)
这是在插入行之后:
import pdb; pdb.set_trace()
在代码中.
我无法弄清楚为什么会这样.我已经阅读了Bdb和Bdbquit,但无法弄清楚为什么会在我的代码中发生这种情况.任何人都可以向我提供一些为什么会发生这种情况的提示吗?我真的想让调试器再次运行.
在gdb中,您可以通过Cc中断(暂停)程序并继续.
你能在pdb中这样做吗?
在Python 3中运行此代码后:
import pdb
def foo():
nums = [1, 2, 3]
a = 5
pdb.set_trace()
foo()
Run Code Online (Sandbox Code Playgroud)
以下表达式有效:
(Pdb) print(nums)
[1, 2, 3]
(Pdb) print(a)
5
(Pdb) [x for x in nums]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但是以下表达式失败:
(Pdb) [x*a for x in nums]
*** NameError: global name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)
以上在Python 2.7中运行良好.
这是一个错误还是我遗失了什么?
更新:查看新接受的答案.这确实是一个错误(或有问题的设计),现在通过在pdb中引入新的命令和模式来解决.
使用python 3.5.1
当我使用python调试器模块运行脚本时:
[home]# python -m pdb myscript.py
Run Code Online (Sandbox Code Playgroud)
这将启动调试会话:
> /somepath/to/myscript.py(1)<module>()
-> import os
(Pdb)
Run Code Online (Sandbox Code Playgroud)
如果我想从调试会话中进入交互式终端,我可以发出interact命令:
(Pdb) interact
*interactive*
>>>
Run Code Online (Sandbox Code Playgroud)
现在我可以用个代码交互,就好像我是在一个运行Python交互模式,能够访问任何功能或变量在我输入的时间调试器中运行该脚本的范围interact模式.
当我发出退出交互模式的命令(继续调试)时,它会终止整个调试会话:
>>> exit()
The program exited via sys.exit(). Exit status: None
....long nasty stack trace here....
[home]#
Run Code Online (Sandbox Code Playgroud)
我也试过quit(),它也终止了调试器.
如何在interact不终止整个调试会话的情况下退出模式?这甚至可能吗?
理想情况下,我想在我离开的时候返回调试模式,这样我就可以继续单步调试代码了.
pdb ×10
python ×8
debugging ×7
ipdb ×3
c# ×2
.net ×1
breakpoints ×1
compilation ×1
generator ×1
ipython ×1
python-2.7 ×1
python-3.7 ×1
python-3.x ×1