0
我正在調試另外導入模塊的python模塊。調試 - 在所有模塊中起作用的功能
[main.py]
import module1
def main():
param = 'A'
module1.func1(param)
if __name__ == '__main__':
main()
[module1.py]
def func1(arg1):
print(arg1)
那麼我希望得到的是
PROMPT> python -m pdb main.py
(pdb) <theCommand>
calling main()
(pdb) <theCommand>
calling module1.func1(param = 'A')
(pdb) <theCommand>
calling print(firstArg = 'A')
A
我記得這個可以做gdb for debuggin c source。 這可以做pdb嗎?
EDIT1:步驟不起作用
-> import module1
(Pdb) s
--Call--
> <frozen importlib._bootstrap>(1559)_find_and_load()
(Pdb)
> <frozen importlib._bootstrap>(1561)_find_and_load()
(Pdb)
> <frozen importlib._bootstrap>(1562)_find_and_load()
(Pdb)
--Call--
> <frozen importlib._bootstrap>(266)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(270)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(271)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(272)_get_module_lock()
(Pdb)
KeyError: 'module1'
> <frozen importlib._bootstrap>(272)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(273)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(274)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(275)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(276)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(279)_get_module_lock()
(Pdb)
--Call--
> <frozen importlib._bootstrap>(181)__init__()
(Pdb)
> <frozen importlib._bootstrap>(182)__init__()
(Pdb)
> <frozen importlib._bootstrap>(183)__init__()
(Pdb)
> <frozen importlib._bootstrap>(184)__init__()
(Pdb)
> <frozen importlib._bootstrap>(185)__init__()
(Pdb)
> <frozen importlib._bootstrap>(186)__init__()
(Pdb)
> <frozen importlib._bootstrap>(187)__init__()
(Pdb)
--Return--
> <frozen importlib._bootstrap>(187)__init__()->None
(Pdb)
> <frozen importlib._bootstrap>(280)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(282)_get_module_lock()
(Pdb)
> <frozen importlib._bootstrap>(283)_get_module_lock()
(Pdb)
--Return--
> <frozen importlib._bootstrap>(283)_get_module_lock()->_ModuleLock('...39858433548816
(Pdb)
> <frozen importlib._bootstrap>(1564)_find_and_load()
(Pdb)
> <frozen importlib._bootstrap>(1565)_find_and_load()
(Pdb)
--Call--
> <frozen importlib._bootstrap>(201)acquire()
(Pdb)
> <frozen importlib._bootstrap>(207)acquire()
(Pdb)
> <frozen importlib._bootstrap>(208)acquire()
(Pdb)
> <frozen importlib._bootstrap>(209)acquire()
(Pdb)
> <frozen importlib._bootstrap>(210)acquire()
(Pdb)
> <frozen importlib._bootstrap>(211)acquire()
我不知道該怎麼辦。
編輯2:多數民衆贊成我如何調試在C使用GDB。 [main.c中]
#include <stdlib.h>
void func2(char * str)
{
NULL;
}
int func1(int a)
{
int b = 0;
b = b + 1; // useless statement
func2("this is a string");
return a;
}
int main()
{
int a = 0 ;
return func1(a);
}
現在用gdb的a.out
(gdb) break func1
Breakpoint 1 at 0x4004c5: file main.c, line 10.
(gdb) break func2
Breakpoint 2 at 0x4004b8: file main.c, line 6.
(gdb) break main
Breakpoint 3 at 0x4004e7: file main.c, line 19.
(gdb) run
Starting program: ./a.out
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
Breakpoint 3, main() at main.c:19
19 int a = 0 ;
(gdb) c
Continuing.
Breakpoint 1, func1 (a=0) at main.c:10
10 int b = 0;
(gdb)
Continuing.
Breakpoint 2, func2 (str=0x400584 "this is a string") at main.c:6
6 }
(gdb)
Continuing.
[Inferior 1 (process 29249) exited normally]
(gdb)
(PS。我沒有用gdb了一段時間,所以我可能有健全的早期混淆。所有現在好了。)
現在我試着用pdb做同樣的事情。
> ./main.py(3)<module>()
-> import module1
(Pdb) n
> ./main.py(5)<module>()
-> def main():
(Pdb) break module1.
module1.__builtins__ module1.__doc__ module1.__initializing__ module1.__name__ module1.func1
module1.__cached__ module1.__file__ module1.__loader__ module1.__package__ module1.py:
(Pdb) break module1.func1
Breakpoint 1 at ./module1.py:3
(Pdb) c
> ./module1.py(4)func1()
-> print(arg1)
(Pdb) c
A
The program finished and will be restarted
> ./main.py(3)<module>()
-> import module1
(Pdb)
所以不是
> ./module1.py(4)func1()
我希望看到這樣的事情
> ./module1.py(4)func1(arg1 = 'A')
感謝。
我不想看到一切功能。只是功能。而且它也不通過外部模塊。 – AirTycoon
什麼?你的提示清楚地表明你想要踏入......如何不做你想做的事?你試過了嗎?它出什麼問題了? – nneonneo
我還是個新手,但是在按p鍵時,它停止在每一行,包括每個任務或條件聲明。所以這不是我想到的,我只是在調用函數時停下來。 – AirTycoon