标签: pdb

为什么我在 pdb 内无法访问 self.<method>

考虑这样的代码片段:

class ABC:
    def method1(self, word):
             ...

    def method2(self):
        str_list = ['this', 'is', 'a', 'list', 'of', 'strings']
        pdb.set_trace()
        str_list = [self.method1(word) for word in str_list] ...(1)

obj = ABC()
obj.method2()
Run Code Online (Sandbox Code Playgroud)

在断点处,当我将命令复制粘贴(1)到 pdb 调试器 shell 中时,它无法执行该命令,而是给出了错误:

*** NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我理解这种行为 - 它与列表理解和类对象的范围有关吗?


PS C:\fooProjects> & C:/Python38/python.exe c:/fooProjects/tmp.py
> c:\fooprojects\tmp.py(38)method2()
-> str_list = [self.method1(word) for word in str_list]
(Pdb) [self.method1(word) for word in str_list]
*** NameError: name 'self' is not defined
(Pdb)
Run Code Online (Sandbox Code Playgroud)

python scope pdb

2
推荐指数
1
解决办法
1022
查看次数

使用pdb,如何运行程序并暂停到达错误的位置?

使用python解释器和/或pdb,我们可以运行程序并在出现错误时暂停,以便我可以在崩溃时检查程序调用堆栈的所有帧吗?

当我直接在python解释器中运行程序时,当出现错误时,它会告诉它发生的代码行,但它似乎返回到最顶层的帧,我无法检查错误实际发生的帧.例如

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 194, in <module>
    addlevel(root_toc, 0)
  File "test.py", line 191, in addlevel
    addlevel(child, root_level+1)
  File "test.py", line 188, in addlevel
    root.value.append(root_level)
AttributeError: 'str' object has no attribute 'append'
>>> root_level
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'root_level' is not defined
Run Code Online (Sandbox Code Playgroud)

错误发生在最低帧,我无法检查该root_level帧的值.是因为它在错误发生后返回到最顶层的框架?如何检查最低帧?

谢谢.

python pdb

1
推荐指数
1
解决办法
464
查看次数

如何在emacs 24.x shell中启用pdbtrack python调试?

使用emacs 23.x,pdbtrack集成(给你指向当前代码行的箭头)与常规代码一起使用M-x shell RET.例如,在使用Makefile运行自动化测试时进入调试器是很有用的.

在emacs 24.x中,这不再有效. 我注意到如果我运行python脚本M-x python-shell-send-file然后pdbtrack集成工作.但是当通过标准的emacs shell(M-x shell RET)运行python时它不起作用.

python emacs pdb

1
推荐指数
1
解决办法
648
查看次数

转储文件 + PDB 文件 - 是否可以在一台 PC 上创建转储,然后在另一台 PC 上进行调查?

一个特定的问题只能在客户方重现。尽管我们进行了所有尝试,但我们无法在本地复制它。

但我知道 Windows 2008 R2 中的 TaskMgr 可以为进程创建转储文件。所以,我的问题是否可以在客户站点上为我们软件的某个进程创建转储,然后在本地调查该转储文件?

我们已经对我们的软件进行了新的构建(我们为所有二进制文件保存了一个构建沙箱和 *.PDB 文件)。然后我们在现场安装了它,现在我们正在等待客户报告问题再次发生时,因此我们将为挂起过程创建一个转储文件,然后尝试对其进行调查。

我的问题有两部分:

  1. 这样的方法会奏效吗?
  2. 如果是 - 如何做到这一点?

目前我怀疑这是否可行。因为我试图在我的本地 Win 2008 R2 VM 上创建一个验证测试。我使用.PDB 文件Sleep(30000)构建所有文件,然后我以一种模式运行我们的软件,当它在中间暂停很长时间时,我在 TaskMgr 中单击“创建转储文件”,恰好在它暂停时(它的简单调用)。然后我尝试在 WinDbg 中加载该转储文件并检查我能在那里找到什么。让我对这种方式感到悲观的第一件事是错误的堆栈跟踪。特别是 - 我在 WinDbg 中看不到完整的堆栈跟踪。它只显示 wow64 .dll 和 ntdll.dll 模块的堆栈跟踪,我看不到我们代码的堆栈跟踪。特别是我只看到这个:

wow64cpu!TurboDispatchJumpAddressEnd+0x6c0
wow64cpu!TurboDispatchJumpAddressEnd+0x56b
wow64!Wow64SystemServiceEx+0x1ce
wow64!Wow64LdrpInitialize+0x42a
ntdll!RtlUniform+0x6e6
ntdll!RtlCreateTagHeap+0xa7
ntdll!LdrInitializeThunk+0xe
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用调试器附加进程时,我看到一个完整的调用堆栈,如下所示:

ntdll.dll! 7754fd910
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7754fd9l0
KernelBase.dll! 76ae3bd50
KernelBase.dll! 76ae44a 5Q
ScrVm.DLL!Profiler::DoSleep(intmilliseconds=30000) Line 205
ScrVm.DLL!Script::VmToolKit::iMethod_Sleep(unsigned …
Run Code Online (Sandbox Code Playgroud)

windbg dump crash-dumps pdb

1
推荐指数
1
解决办法
696
查看次数

你如何在Visual Studio中生成一个随机输出名称的PDB文件?

我希望能够在运行时动态加载和卸载DLL项目.为此,我必须确保每次在Visual Studio中重建项目时,生成的.pbd文件都有一个伪随机生成的名称(随机文件路径有效字符串).pbd.

这是因为调试器强制我在重建之前中止调试.

我首先尝试创建一个运行.bat文件的自定义预构建工具,该文件创建了一个系统环境变量,如下所示:

set TIMESTAMP=%DATE:/=-%@%TIME::=-%
set TIMESTAMP=%TIMESTAMP: =%
setx buildrandomvar %TIMESTAMP%
Run Code Online (Sandbox Code Playgroud)

这很好,我检查了注册表.但无论我做了什么,我都无法将"buildrandomvar"作为.pdb文件名的一部分.结果只是一个空的".pbd".

我的程序数据库文件名设置为:$(OutDir)$(TargetName)$(buildrandomvar).pdb

我真的很感激这个问题的任何帮助,因为我无法让这个工作.

c++ dll pdb visual-studio-2013

1
推荐指数
1
解决办法
636
查看次数

为什么我得到AttributeError:'module'对象没有属性'set_trace'

import pdb 
print("program started") 
c=100 
d=200 
pdb.set_trace() 
def fun(a,b): 
    print a,b 
    return a+b 
fun(c,d) 
for i in [1,2,3,4,5]: 
    print 10/i 
    print ("other statements in program") 
print ("program ended")
Run Code Online (Sandbox Code Playgroud)

python pdb

1
推荐指数
2
解决办法
2428
查看次数

是否可以使用新的 csproj 项目文件覆盖或清除 dll 构建中的调试路径?

当使用dumpbin来查看我的媒体库的详细信息:
dumpbin /headers Test.dll

我看到 {{FullFolder to Test.pdb}} 是 pdb 的完整文件夹。

调试目录

    Time Type        Size      RVA  Pointer
-------- ------- -------- -------- --------
95BA9373 cv            A1 000199D4    17BD4    Format: RSDS, {4AF64893-BAF4-4FF3-9343-E8D5A55E94FF}, 1, {{FullFolder to Test.pdb}}
00000000 repro          0 00000000        0
Run Code Online (Sandbox Code Playgroud)

有没有办法在 csproj 文件中排除这个?

我的 .csproj 看起来像:

<DebugType>full</DebugType>
<IncludeSource>True</IncludeSource>
<IncludeSymbols>True</IncludeSymbols>
<PdbPath>none</PdbPath>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Run Code Online (Sandbox Code Playgroud)

似乎该PdbPath元素不再以新的(vs2017 多框架) .csproj 格式工作?

path csproj dumpbin pdb

1
推荐指数
1
解决办法
556
查看次数

错误尝试通过ipdb获取实例的字符串表示形式

我有这门课:

class Point(PointAbstract):
    """
    Class used to expand shapely.geometry.Point functionality
    """

    def __unicode__(self):
        return '%s, %s' % (self.x, self.y)

    def __repr__(self):
        return '%s, %s' % (self.x, self.y)

    def __str__(self):
        return '%s, %s' % (self.x, self.y)
Run Code Online (Sandbox Code Playgroud)

当我尝试通过ipdb评估实例时,我得到:

> /home/...
    151         p = Point(float(each[4]), float(each[3]))
--> 152         for i, _each in enumerate(headers):
    153             if not _each in headers_to_ignore:

ipdb> p
*** SyntaxError: SyntaxError('unexpected EOF while parsing', ('<string>', 0, 0, ''))
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

123.0, 321.0
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

python pdb

0
推荐指数
1
解决办法
222
查看次数

使用带鼻子的iPython?

我有一个相当基本的问题.我正在nosetests为我的python应用程序的测试套件运行命令.我想放入一个交互式调试器.当测试运行时,它会撞到我的IPython.embed()线并冻结,没有提示.Ctrl + C将其杀死并恢复测试.

如何在运行nosetests时进入某种交互式提示符?

谢谢你的帮助.

python nose ipython pdb

0
推荐指数
1
解决办法
886
查看次数

标签 统计

pdb ×9

python ×6

c++ ×1

crash-dumps ×1

csproj ×1

dll ×1

dump ×1

dumpbin ×1

emacs ×1

ipython ×1

nose ×1

path ×1

scope ×1

visual-studio-2013 ×1

windbg ×1