---
title: 使用方法
description: "1. 环境变量配置"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_30_0033.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_30_0033.html
indexId: 4695296dc82edee8226c7ec5414877382cbc15d15325266d3bae3820c564e7de74
---
# 使用方法

1. 环境变量配置
浮点异常检测的打印信息和检测项通过环境变量配置

  - 打印信息通过NAN_REPORT_CONFIG环境变量配置：
    error/warning：error配置遇到异常直接exit；warning配置遇到异常仅告警，并继续往下执行；

    detail/brief：detail配置打印详细的堆栈信息，解析文件名和行号；brief配置仅打印堆栈中内存地址，不做解析。

    配置举例：export NAN_REPORT_CONFIG=error+detail。

  - 检测项通过NAN_EXCEPT_CONFIG环境变量配置：
    默认配置打开除FE_INEXACT外所有异常（0x0000000F），用户可以根据上述每个异常对应的bitmap配置。

    配置举例：export NAN_EXCEPT_CONFIG=0x00000003，仅检测FE_INVALID和FE_DIVBYZERO异常。


2. 编译选项

  - Fortran应用：编译增加选项-fp-detect-exceptions -g；
  - C/C++应用：编译增加选项-finstrument-functions -lfpe -g；
  - 支持仅对用户指定的函数进行检测，排查某个位置前是否出现NAN，编译选项-lfpe -g，同时在需检测的位置调用fpe_nan_check()。
```
//main.cpp
#include <iostream>
void foo()
{
    float x = 1;
    float y = 0;
    float z = x/y;
    std::cout << "divide_by_zero: 1/0 =" << z << std::endl;
}
int main()
{
    foo();
    return 0;
}
```

编译命令及结果：
```
$ export NAN_REPORT_CONFIG=error+detail
$ clang++ -finstrument-functions -lfpe main.cpp -o a.out -g
$ ./a.out
divide_by_zero: 1/0 =inf
Warning: ieee_divide_by_zero is signaling
##################backtrace###################
./a.out(+0xbd0) [0xaaaab69fbbd0] foo() ../main.cpp:8
./a.out(+0xc34) [0xaaaab69fbc34] main ../main.cpp:11
##############################################
```

3. 补充说明
  打印的堆栈源码行号可能出现向下偏移一行，原因是底层库函数backtrace解析时返回的是下一条汇编指令地址，该指令可能来自当前源码行，也可能来自下一行，根据打印结果需确认下是否存在偏移的情况。
