|
LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
|
#include "../../../include/lammp/lmmp.h"#include <stdio.h>#include <stdlib.h>#include <windows.h>
abort.c 的引用(Include)关系图:函数 | |
| static void | abort_func_lock (void) |
| static void | abort_func_unlock (void) |
| static BOOL CALLBACK | init_abort_cs (PINIT_ONCE once, PVOID param, PVOID *ctx) |
| void | lmmp_abort (lmmp_error_t type, const char *msg, const char *func, int line) |
| LAMMP 全局退出函数,内部错误或断言失败时调用,若设置了全局退出函数,则会调用该函数,否则会调用默认的退出函数。 | |
| lmmp_abort_fn | lmmp_set_abort_fn (lmmp_abort_fn func) |
| 设置 LAMMP 全局退出函数(所有线程均生效) | |
| static const char * | type_to_str (lmmp_error_t type) |
变量 | |
| static INIT_ONCE | abort_cs_once = INIT_ONCE_STATIC_INIT |
| static CRITICAL_SECTION | abort_func_cs |
| Copyright (C) 2026 HJimmyK(Jericho Knox) | |
| static lmmp_abort_fn | lmmp_abort_func = NULL |
引用了 abort_cs_once, abort_func_cs, init_abort_cs() , 以及 n.
被这些函数引用 lmmp_abort() , 以及 lmmp_set_abort_fn().
函数调用图:
这是这个函数的调用关系图:LAMMP 全局退出函数,内部错误或断言失败时调用,若设置了全局退出函数,则会调用该函数,否则会调用默认的退出函数。
| msg | 退出信息,assert类型的错误信息通常仅包含断言内容,其他类型的错误则因类型不同而不同。 |
| func | 退出处的函数名 |
| line | 退出处的行号 |
| type | 退出类型。有以下几个类型: 1. ASSERT_FAILURE (枚举值为1)为lmmp_assert触发的退出,lmmp_assert触发的普通退出几乎不可能发生,
其通常代表不可能发生的计算错误,可能表明程序执行此处时必须正确的输入错误。比如预期无进位的加法产生了进位。
此类错误不可接受,会导致计算无法继续进行,导致程序崩溃。
2. DEBUG_ASSERT_FAILURE (枚举值为2)为lmmp_debug_assert触发的退出。其通常表明预期之外的错误,
这通常是调用者的UB,如无UB的情况下触发此错误;也可能是LAMMP内部的逻辑错误,开发者期待的输入错误,
在该逻辑处仅简单考虑了某些情况。如有此类错误,可以报告给开发者。此类型只会在定义了
LAMMP_DEBUG_ASSERT_CHECK 宏为 1 的情况下才会触发。
3. PARAM_ASSERT_FAILURE (枚举值为3)为参数检查失败导致的退出。其通常表明调用者传入了无效的参数,
导致函数的行为不符合预期。此类错误不可接受,会导致计算无法继续进行,导致程序崩溃。此类型的错误只有在
定义了 LAMMP_DEBUG_PARAM_ASSERT_CHECK 宏为 1 的情况下才会触发。
4. MEMORY_ALLOC_FAILURE (枚举值为4)为内存分配失败退出。在使用堆分配器时,申请内存失败,导致触发此错误。
此类型错误不受明确的宏调控,Realse模式下,会保留必要的触发场景,部分场景下,在一些检查宏定义时,可能会额外触发此错误。
5. MEMORY_FREE_FAILURE (枚举值为5)为内存释放错误。当释放堆内存时可能触发,原因通常为头部信息被损坏,极有可能
源于传入错误的指针,又或者缓冲区溢出导致此头部损坏。LAMMP_DEBUG_MEMORY_CHECK 宏为 1 时,才可能触发。
6. OUT_OF_BOUNDS (枚举值为6)为数组越界访问导致的退出。通常表明未按规定使用空间。此类型的错误在堆分配器中,当释放
堆内存时,检测到数组尾部魔数不匹配,导致此错误。LAMMP_DEBUG_MEMORY_CHECK 宏为 1 时,才可能触发。
7. MEMORY_LEAK (枚举值为7)为内存泄漏导致的退出。在检查点处,堆内存计数器不为0,或者当前栈帧不在栈底,又或者缓冲池
定不在缓冲池底,都会触发此错误。触发原因可能为,在调用堆分配器重置函数时,显式检查到此时的堆计数器不为0或者栈帧
以及缓冲池不为底部。又或者手动调用 lmmp_leak_tracker 宏来进行检查,检查到了相同的情况。需注意,手动调用此宏时,
请先调用 lmmp_global_deinit 进行全局共享的堆资源的安全释放(因为部分全局共享资源也会被计数)。
8. UNEXPECTED_ERROR (枚举值为8)为其他未知错误导致的退出。
|
引用了 abort_func_lock(), abort_func_unlock(), lmmp_abort_func, n , 以及 type_to_str().
被这些函数引用 check_extra_memory_overflow(), check_memory_block_integrity(), lmmp_alloc_debug(), lmmp_chech_memory(), lmmp_leak_tracker(), lmmp_realloc_debug(), lmmp_stack_init(), lmmp_temp_heap_alloc_() , 以及 lmmp_temp_stack_alloc_().
函数调用图:
这是这个函数的调用关系图:| lmmp_abort_fn lmmp_set_abort_fn | ( | lmmp_abort_fn | func | ) |
设置 LAMMP 全局退出函数(所有线程均生效)
| func | 退出函数指针,可以为NULL |
引用了 abort_func_lock(), abort_func_unlock(), lmmp_abort_func , 以及 n.
函数调用图:
|
static |
引用了 LAMMP_ERROR_ASSERT_FAILURE, LAMMP_ERROR_DEBUG_ASSERT_FAILURE, LAMMP_ERROR_MEMORY_ALLOC_FAILURE, LAMMP_ERROR_MEMORY_FREE_FAILURE, LAMMP_ERROR_MEMORY_LEAK, LAMMP_ERROR_OUT_OF_BOUNDS, LAMMP_ERROR_PARAM_ASSERT_FAILURE, LAMMP_ERROR_UNEXPECTED_ERROR , 以及 n.
被这些函数引用 lmmp_abort().
这是这个函数的调用关系图:
|
static |
被这些函数引用 abort_func_lock().
|
static |
Copyright (C) 2026 HJimmyK(Jericho Knox)
This file is part of LAMMP.
LAMMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY.
See https://www.gnu.org/licenses/.
被这些函数引用 abort_func_lock(), abort_func_unlock() , 以及 init_abort_cs().
|
static |
被这些函数引用 lmmp_abort() , 以及 lmmp_set_abort_fn().