如果我有一个stdout重定向的程序,我的pdb会提示所有进入重定向,因为写入库是为了写入stdout.
通常这个问题很微妙,导致我认为程序正在等待输入时挂起.
人们如何解决这个问题?(不幸的是,使用其他调试器如winpdb不是一个选项).
在Python调试器(pdb)中时,我想跳过yield语句,但接下来按下(n)会将我带到yield 的目的地,即生成器的使用者。我想转到在生成器中执行的下一行。有什么办法吗?
我正在使用Python 2.6
我正在用python开发FUSE文件系统.问题是,安装文件系统后,我从我的保险丝脚本标准输入/输出/标准错误的访问权限.我没有看到任何东西,甚至是追溯.我试图像这样启动pdb:
import pdb
pdb.Pdb(None, open('pdb.in', 'r'), open('pdb.out', 'w')).set_trace()
一切正常,但非常不方便.我想将pdb.in和pdb.out作为fifo文件,但不知道如何正确连接它.理想情况下,我想在一个终端中键入命令并查看输出,但即使有两个终端也会很高兴(一个放置命令,另一个看输出).问题:
1)没有stdin/stdout运行pdb更好/其他方式吗?
2)如何将stdin重定向到pdb.in fifo(我输入的所有内容必须转到pdb.in)?我怎样才能将pdb.out重定向到stdout(我有"cat pdb.out"的奇怪错误,但也许我不明白的东西)
如果我将.pdb文件保存在bin目录中,这是一个问题吗?是否有任何负面的性能问题?
mspdbsrv.exe是Microsoft内部用于更新PDB文件的实用程序.编译器通过RPC向mspdbsrv发送符号更新,mspdbsrv依次更新PDB文件.
我试图了解这些更新的样子.不幸的是,微软没有发布IDL所以我不知道RPC函数原型,但是看看这些更新,因为原始数据足够有趣.
在这种情况下,mspdbsrv.exe默认端点是\RPC Control\mspdb_10.00.30319.01_rtl_32_00000000000733A0.但是mspdbsrv有一个命令行参数-endpoint,可以将其端点设置为不同的端点.但是,编译器可能始终连接到默认端点.
我想我可以创建一种"代理服务器"来监听mspdbsrv默认端点,运行带有不同端点的mspdbsrv.exe,并在记录时透明地将RPC传递给mspdbsrv.由于代理公开mspdbsrv端点,编译器将不知道它已连接到代理.
这有意义吗?如何在没有IDL的情况下编写这样的代理RPC服务器?
如果有人知道有关这些PDB更新的一些细节,也许有一条捷径?
我发现了00000000000733A0mspdbsrv端口名称的后缀是什么......(mspdb_10.00.30319.01_rtl_32_00000000000733A0).
这是当前用户的安全访问令牌!以下是如何获取它的片段:
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) != 0)
{
TOKEN_STATISTICS tsStats;
DWORD dwOutSize;
if (GetTokenInformation(hToken, TokenStatistics, &tsStats, sizeof(tsStats), &dwOutSize))
{
printf(TEXT("%08x%08x\n"), (UINT)tsStats.AuthenticationId.HighPart, (UINT)tsStats.AuthenticationId.LowPart);
}
}
Run Code Online (Sandbox Code Playgroud) 我刚从VS 2012升级到VS 2013.解决方案从原来的位置打开了.但是,当我运行它时,我得到以下内容:
http://www.magicsoftsolutions.com/ScreenShot.png
如果我在工具栏上点击继续,它会这样做,似乎没有任何麻烦地运行应用程序.我已经尝试清空符号缓存并重新加载,以及不加载任何符号.我也尝试使用"本地IIS"而不是"IIS express",但这需要管理员权限,即便如此我似乎无法让它实际工作(VS只是挂起,甚至从未打开过IE).
因为当我继续经历这个错误时,事情似乎工作正常,我真的只想知道为什么会发生这种情况以及如何阻止它.我猜测它正试图实际加载"iisexpress.exe"的调试符号,当然我没有.它在VS 2012中从未这样做过,所以我不确定它为什么会在VS 2013中这样做.
谢谢,
安德鲁
我希望能够以编程方式保存或插入pdb命令,这是一个例子:
(Pdb) b doc/filename.py:365
Breakpoint 1 at doc/filename.py:365
(Pdb) commands # command to be applied to all breaks
(com) silent # makes it not print the break message
(com) print "Here is my breakpoint!"
(com) c # continues without stopping on break
Run Code Online (Sandbox Code Playgroud)
所以我在这里创建一个命令,将在我的断点处发生,我将打印文本"这是我的断点!" 然后继续
现在我的问题是,每次我想要那些打印(或者我想要添加的任何类型的命令)时,我必须手动编写所有这些内容.我希望有一种更自动化的方式来添加这些命令,可能将它们保存在某种.pdbrc文件中,或者能够使用pdb.set_trace()命令作为代码添加它们,这样我就可以将其粘贴.
我用旋风ioloop开发应用,当它涉及到http_client.fetch的callback,我要开始PDB import pdb; pdb.set_trace(),但将引发一个例外:
> /home/yiwei.liyw/dsa-engine/src/collect/engine_task.py(52)task_created()
-> print response.body
(Pdb)
2015-10-26 15:30:38,629 ERROR ioloop.py:612 Exception in callback <functools.partial object at 0x7fe0d98e5e68>
Traceback (most recent call last):
File "/home/yiwei.liyw/dsa-engine/venv/lib/python2.7/site-packages/tornado/ioloop.py", line 592, in _run_callback
ret = callback()
File "/home/yiwei.liyw/dsa-engine/venv/lib/python2.7/site-packages/tornado/stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "/home/yiwei.liyw/dsa-engine/src/collect/engine_task.py", line 52, in task_created
print response.body
File "/home/yiwei.liyw/dsa-engine/src/collect/engine_task.py", line 52, in task_created
print response.body
File "/home/tops/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/home/tops/lib/python2.7/bdb.py", line 68, in dispatch_line
if …Run Code Online (Sandbox Code Playgroud) 我想调试一个在代码执行过程中发生的警告.
一个简单的断点不会这样做,因为在第一次警告发生之前,导致警告的行会在没有警告的情况下执行数百万次.
此外,发生这种情况的行是在库代码中(更准确地说,在中pandas/core/common.py),所以我的首选是根本不修改代码.
我只想在发出警告时立即停止程序的执行,并在此时检查堆栈,或者使用pdb或使用ipdb.
有没有办法配置调试器在发出警告时自动进入单步模式?
Ubuntu 16.04
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)
如果我运行python,则在virtualenv内部,将得到Python 3.5.2。
问题是:
(photoarchive) admin@simple_project:~/venv/photoarchive/lib/python3.5/encodings$ pip install django-crequest
Collecting django-crequest
Using cached django-crequest-2016.3.16.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-2qlcw5ux/django-crequest/setup.py", line 9, in <module>
license=open('LICENSE').read(),
File "/home/admin/venv/photoarchive/lib/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 204: ordinal not in range(128)
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-2qlcw5ux/django-crequest/
Run Code Online (Sandbox Code Playgroud)
好吧,点安装会破坏一切。顺便说一下,在没有virtualenv的情况下,该软件包是通过pip安装的。
我被困住了,不知道该如何应对。
我唯一想到的就是在ascii.py中的第26行停止。这似乎可以通过pdb实现。我将对其进行编辑,然后在其中添加pdb.set_trace()。然后保存文件。 …
pdb ×10
python ×6
debugging ×2
ipdb ×2
.net ×1
asp.net ×1
bash ×1
generator ×1
iis-express ×1
ipython ×1
pdb-files ×1
python-2.7 ×1
rpc ×1
tornado ×1
visual-c++ ×1