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で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:gdbを使用してcでデバッグする方法です。[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')

ありがとう。

4

1 に答える 1

1

コマンドを使用しs(tep)ます。next関数にステップ インします (可能であれば厳密に次の行に進むとは異なります)。

于 2013-09-24T05:02:56.030 に答える