pdb는 The Python Debugger로 Python 프로그램을 위한 대화형 소스 코드 디버거입니다.
소스 라인 레벨에서 breakpoint 을 설정하여 디버깅할 수 있습니다.
Lib를 import 합니다.
import pdb
Breakpoint 설정할 코드 라인에 다음 명령어를 입력합니다.
pdb.set_trace()
Pdb를 실행합니다.
$ python3 -m pdb 파일-이름.py
Ex
stack@ubuntu:~/devstack$ python3 -m pdb /usr/local/lib/python3.6/dist-packages/openstackclient/compute/v2/server.py
> /usr/local/lib/python3.6/dist-packages/openstackclient/compute/v2/server.py(16)<module>()
-> """Compute v2 Server action implementations"""
(Pdb) list
11 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 # License for the specific language governing permissions and limitations
13 # under the License.
14 #
15
16 -> """Compute v2 Server action implementations"""
17
18 import argparse
19 import getpass
20 import io
21 import logging
** 저는 openstack server list
명령어 입력 후 Class ListServer
에서의 Code Flow를 보기 위해 해당 Class 안에 breakpoint를 설정하였고,
openstack server list
를 실행하였습니다. 이렇게 되면 첫번째
breakpoint인 pdb.set_trace()
라인에 멈춥니다.
(다음) breakpoint로 이동합니다.
(Pdb) continue
continue
는 다음 breakpoint로 이동합니다. 단축어로 c
를
입력해도 됩니다.
Ex
(Pdb) continue
> /usr/local/lib/python3.6/dist-packages/openstackclient/compute/v2/server.py(1142)ListServer()
-> _description = _("List servers")
(Pdb) list
1137 raise SystemExit
1138
1139
1140 class ListServer(command.Lister):
1141 pdb.set_trace()
1142 -> _description = _("List servers")
1143
1144 def get_parser(self, prog_name):
1145 parser = super(ListServer, self).get_parser(prog_name)
1146 parser.add_argument(
1147 '--reservation-id',
server.py의 16 Line에서 breakpoint 다음 Line인 1142 Line으로 이동했습니다.