2013-09-24 25 views
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') 

感謝。

回答

0

使用s(tep)命令。它將進入功能(與next不同,如果可能的話嚴格進入下一行)。

+0

我不想看到一切功能。只是功能。而且它也不通過外部模塊。 – AirTycoon

+0

什麼?你的提示清楚地表明你想要踏入......如何不做你想做的事?你試過了嗎?它出什麼問題了? – nneonneo

+0

我還是個新手,但是在按p鍵時,它停止在每一行,包括每個任務或條件聲明。所以這不是我想到的,我只是在調用函數時停下來。 – AirTycoon