行断点

可在算子的运行程序上设置行断点,即在算子代码文件的特定行号上设置断点。

  1. 输入以下命令,在核函数实现文件add_custom.cpp的第85行增加断点,出现回显显示断点添加成功1个断点,如下所示。

    (msdebug) b add_custom.cpp:85
    Breakpoint 1: where = device_debugdata`::add_custom(uint8_t *__restrict, uint8_t *__restrict, uint8_t *__restrict) + 14348 [inlined] KernelAdd::CopyOut(int) + 1700 at add_custom.cpp:85:9, address = 0x000000000000380c
    (msdebug)
    关键信息说明如下表:
    表1 信息说明

    字段

    释义

    device_debugdata

    设备侧.o文件名。

    add_custom()

    断点所在的kernel函数名。

    14348

    本次断点地址相对add_custom函数的地址偏移量,即380c相对add_custom函数所在地址的偏移量是14348。

    KernelAdd::CopyOut(int) + 1700

    代码所在函数,偏移量为1700。

    address = 0x000000000000380c

    断点的地址,即逻辑相对地址。

    • 如果host侧和kernel侧存在同名的算子实现文件,在设置断点时,推荐采用绝对路径进行设置,确保断点打在预期的文件上。
    • 在对host侧源码文件进行打点时,可能会出现找不到实际位置的告警,类似如下提示:
      (msdebug) b /home/xx/op_host/add_custom.cpp:24
      Breakpoint 1: no locations (pending).
      WARNING:  Unable to resolve breakpoint to any actual locations.
      (msdebug)

      在算子运行后,会自动找到实际位置,并自动设置断点。

  2. 输入如下命令,运行算子程序,等待直到命中断点。

    (msdebug) run
    Process 196968 launched: '/home/HwHiAiUser/projects/add_ascendc_sample/add_custom_npu' (aarch64)
    [Launch of Kernel add_custom on Device 1]
    [Switching to focus on Kernel add_custom, CoreId 1, Type aiv]
    Process 196968 stopped
    * thread #1, name = 'add_custom_npu', stop reason = breakpoint 1.1
        frame #0: 0x000000000000380c device_debugdata`::add_custom(uint8_t *__restrict, uint8_t *__restrict, uint8_t *__restrict) [inlined] KernelAdd::CopyOut(this=0x000000000016a9b8, progress=0) at add_custom.cpp:85:9
       82  	        // copy progress_th tile from local tensor to global tensor
       83  	        DataCopy(zGm[progress * TILE_LENGTH], zLocal, TILE_LENGTH);
       84  	        // free output tensor for reuse
    -> 85  	        outQueueZ.FreeTensor(zLocal);
       86  	    }
       87  	
       88   private:
    (msdebug)

    “0x000000000000380c”代表该断点所在的pc地址。