我正在GDB中进行一些汇编级调试.有没有办法让GDB以与显示当前源代码行相同的方式向我显示当前的汇编指令?每个命令后的默认输出如下所示:
0x0001433f 990 Foo::bar(p);
Run Code Online (Sandbox Code Playgroud)
这给了我当前指令的地址,但是我必须继续参考输出,disassemble以便查看我当前正在执行哪条指令.
只是一个方便的问题.我在Visual Studio和XCode等IDE中使用调试器有点被宠坏了.我发现必须键入import pdb; pdb.set_trace()设置断点有点笨拙(我宁愿不在文件顶部导入pdb,因为我可能会忘记并将其保留).
是否有一种更简单的方法在Python代码中设置断点,与您在IDE中看到的一样简单明了?
这是一个通用的问题,以帮助有程序问题的新程序员,但不知道如何使用调试器来诊断问题的原因.
这个问题涉及两类更具体的问题:
[What is a debugger and how can it help me diagnose problems?](https://stackoverflow.com/q/25385173)
默认情况下,在IPython中调试期间,ipdb在代码中显示当前位置上方的一行和一行.
是否有一种简单的方法可以使区域显示更大?我认为它是可配置的,但一直无法找到它.
你将什么插入到Python源代码中以使其进入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) 在gdb中,您可以通过Cc中断(暂停)程序并继续.
你能在pdb中这样做吗?
我正在使用ipdb调试器在本地调试多线程Web应用程序(Django,Plone).由于我在调试提示符时发生的自动重载,ipdb似乎常常感到困惑.产生的堆栈跟踪出现了
/Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in writeout_cache(self, conn)
605 with self.db_input_cache_lock:
606 try:
--> 607 self._writeout_input_cache(conn)
608 except sqlite3.IntegrityError:
609 self.new_session(conn)
/Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in _writeout_input_cache(self, conn)
589 for line in self.db_input_cache:
590 conn.execute("INSERT INTO history VALUES (?, ?, ?, ?)",
--> 591 (self.session_number,)+line)
592
593 def _writeout_output_cache(self, conn):
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 4546363392 and this is thread id 140735211872640
Run Code Online (Sandbox Code Playgroud)
在此之后,程序无法关闭(挂起线程)或ipdb本身停止工作.
有没有办法用ipdb迁移这个问题,并使其更安全多线程/自动重载?
编辑:稍微澄清了一下这个问题,因为我认为这可能是IPython问题的根本原因.可能存在某种解决方法,使得IPython只是在重新加载时丢弃历史记录或禁用有问题的IPython SQLite以其他方式写入.
我有一个需要调试的SCons脚本。在发生的所有事情中的某个地方,我遇到了问题,我需要找出问题的根源。
我想调试SCons脚本,但是不确定如何设置它。我同时拥有PyCharm和Komodo IDE,但是我不知道如何使它们工作。
我已经试过了:
scons --debug=pdb <args...>
Run Code Online (Sandbox Code Playgroud)
但这使我陷入了SCons的困境;我需要进入我创建的SCons运行的脚本的内部。
有人可以告诉我如何设置PyCharm或Komodo来调试SCons脚本吗?如果那不可能,那么我可以使用其他调试选项。
我是python的新手,我仍然很想知道sytnax是如何工作的,你需要如何将你的If和else联系起来以使其正常工作.我怎么知道哪个还有哪个呢?特别是在使用嵌套代码块时.
在下面的代码中,对于else,然后注释Prime!从我的理解,否则与声明一致,(n % div == 0):但是为什么它与FOR声明相关?
我想到的最后一个其他声明,if n == 2:但是其他声明并没有与之对齐,而是在它之后.对于相同的陈述,if n == 2:为什么在它n += 1之前pime_count +=1而不是之后进行对齐.
我理解Else的位置和if是非常重要的,因为如果我决定移动其中任何一个代码停止工作.我似乎无法理解的是,如果allignment看起来并不一致,那么python如何知道哪个与之相关.
#!/usr/bin/env python
#
# Problem Set 1a
#
# A program that computes and prints the 1000th prime number.
# Finds primes using trial division (least efficient method)
#------------------------------------------------------------
prime_count = 0
n = 2
while (prime_count <= 1000):
#if even, check for 2, the only even prime
if (n % 2 == …Run Code Online (Sandbox Code Playgroud) python ×8
debugging ×7
pdb ×5
ipython ×2
assembly ×1
breakpoints ×1
gdb ×1
indentation ×1
ipdb ×1
komodo ×1
pycharm ×1
python-2.7 ×1
scons ×1
sqlite ×1
syntax ×1