# PyNative 调试体验

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend

软件环境: MindSpore 版本: 2.1

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.5

操作系统平台: linux

**2. PyNative简介**

pynative是通过ms.set\_context\(mode=ms.PYNATIVE\_MODE\)设置的。

图模式分为动态图和静态图两种，静态图使用JIT编译优化执行，使用静态语法，在语法上有较多限制， 相对于静态图来说动态图更加灵活，它通过解释执行，具有动态语法亲和性。

动态图逐语句执行Python指令，因此每条Python指令执行完，都能够得到执行结果。

**3. 断点调试**

加入pdb.set\_trace\(\)脚本，就会停住，等待输入pdb指令

```
import numpy as np
import mindspore as ms
import mindspore.ops as ops
import mindspore.nn as nn
import pdb

ms.set_context(device_target="Ascend", mode=ms.PYNATIVE_MODE)

class PrintDemo(nn.Cell):
    def __init__(self):
        super(PrintDemo, self).__init__()
        self.add1 = ops.Add()
        self.add2 = ops.Add()

    def construct(self, x, y):
        out = self.add1(x, y)
        pdb.set_trace()
        out = self.add2(out, x)
        return x

x = ms.Tensor(np.ones([2, 1]).astype(np.int32))
y = ms.Tensor(np.ones([2, 2]).astype(np.int32))
net = PrintDemo()
output = net(x, y)
```

![](figures/zh-cn_image_0000002136169377.png)

打印变量y的取值 p y

![](figures/zh-cn_image_0000002136129753.png)

查看程序调用栈 bt

```
(Pdb) bt
  /home/test/test.py(24)<module>()
-> output = net(x, y)
  /root/miniconda3/envs/torch_1.12_op3.7/lib/python3.7/site-packages/mindspore/nn/cell.py(660)__call__()
-> output = self._run_construct(args, kwargs)
  /root/miniconda3/envs/torch_1.12_op3.7/lib/python3.7/site-packages/mindspore/nn/cell.py(444)_run_construct()
-> output = self.construct(*cast_inputs, **kwargs)
> /home/test/test.py(18)construct()
-> out = self.add2(out, x)
(Pdb)
```

查看脚本上下文 l 1, 30 查看1-30行

![](figures/zh-cn_image_0000002136130013.png)

执行代码，直到下一个断点 c

![](figures/zh-cn_image_0000002136130029.png)

断点调试是网络调试必不可少的调试方法。

