LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
abort.c 文件参考
#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 chartype_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_func_lock()

static void abort_func_lock ( void  )
static

在文件 abort.c34 行定义.

34 {
37}
static BOOL CALLBACK init_abort_cs(PINIT_ONCE once, PVOID param, PVOID *ctx)
Definition abort.c:26
static CRITICAL_SECTION abort_func_cs
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition abort.c:23
static INIT_ONCE abort_cs_once
Definition abort.c:24
#define n

引用了 abort_cs_once, abort_func_cs, init_abort_cs() , 以及 n.

被这些函数引用 lmmp_abort() , 以及 lmmp_set_abort_fn().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ abort_func_unlock()

static void abort_func_unlock ( void  )
static

在文件 abort.c39 行定义.

引用了 abort_func_cs , 以及 n.

被这些函数引用 lmmp_abort() , 以及 lmmp_set_abort_fn().

+ 这是这个函数的调用关系图:

◆ init_abort_cs()

static BOOL CALLBACK init_abort_cs ( PINIT_ONCE  once,
PVOID  param,
PVOID ctx 
)
static

在文件 abort.c26 行定义.

26 {
27 (void)once;
28 (void)param;
29 (void)ctx;
31 return TRUE;
32}

引用了 abort_func_cs , 以及 n.

被这些函数引用 abort_func_lock().

+ 这是这个函数的调用关系图:

◆ lmmp_abort()

void lmmp_abort ( lmmp_error_t  type,
const char msg,
const char func,
int  line 
)

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)为其他未知错误导致的退出。
警告
LAMMP内部中断都将会调用此函数,如果全局退出函数为NULL,则使用默认的退出函数,会打印出全部错误信息,并调用 abort 函数中断程序。自定义全局退出函数请通过 lmmp_set_abort_fn 函数进行设置。请不要在全局退出函数里做任 何危险的操作,本库的开发者不对其调用产生的影响做任何保证。

在文件 abort.c102 行定义.

102 {
106
107 if (fn != NULL) {
108 fn(type, msg, func, line);
109 } else {
110 fprintf(stderr, "LAMMP abort at [%s]:%d\n", func, line);
111 fprintf(stderr, "Abort type: %s, abort msg: \n%s\n", type_to_str(type), msg);
112 fflush(stderr);
113 }
114 abort();
115}
static const char * type_to_str(lmmp_error_t type)
Definition abort.c:79
static void abort_func_unlock(void)
Definition abort.c:39
static void abort_func_lock(void)
Definition abort.c:34
static lmmp_abort_fn lmmp_abort_func
Definition abort.c:68
void(* lmmp_abort_fn)(lmmp_error_t type, const char *msg, const char *func, int line)
LAMMP 全局退出函数指针类型
Definition lmmp.h:229

引用了 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_set_abort_fn()

lmmp_abort_fn lmmp_set_abort_fn ( lmmp_abort_fn  func)

设置 LAMMP 全局退出函数(所有线程均生效)

参数
func退出函数指针,可以为NULL
警告
请注意,我们将不会对 func 的调用做任何保护,因此请不要在 func 里做任何危险的操作, 本库的开发者不对 func 函数的调用产生的影响做任何保证。
注解
若 func 为 NULL,则代表使用默认的退出机制。lmmp_abort 函数被标记为无返回值,因此 设置的函数也应当无返回值,即使自定义的func函数真的会返回了,那么也将会调用 abort 函数中断程序。
返回
返回之前的退出函数指针,若原指针为NULL,则返回NULL。

在文件 abort.c70 行定义.

70 {
73 lmmp_abort_func = func;
75
76 return old;
77}

引用了 abort_func_lock(), abort_func_unlock(), lmmp_abort_func , 以及 n.

+ 函数调用图:

◆ type_to_str()

static const char * type_to_str ( lmmp_error_t  type)
static

在文件 abort.c79 行定义.

79 {
80 switch (type) {
82 return "ASSERT_FAILURE";
84 return "DEBUG_ASSERT_FAILURE";
86 return "PARAM_ASSERT_FAILURE";
88 return "MEMORY_ALLOC_FAILURE";
90 return "MEMORY_FREE_FAILURE";
92 return "OUT_OF_BOUNDS";
94 return "MEMORY_LEAK";
96 return "UNEXPECTED_ERROR";
97 default:
98 return "UNKNOWN_TYPE";
99 }
100}
@ LAMMP_ERROR_MEMORY_ALLOC_FAILURE
Definition lmmp.h:215
@ LAMMP_ERROR_DEBUG_ASSERT_FAILURE
Definition lmmp.h:213
@ LAMMP_ERROR_UNEXPECTED_ERROR
Definition lmmp.h:219
@ LAMMP_ERROR_MEMORY_LEAK
Definition lmmp.h:218
@ LAMMP_ERROR_ASSERT_FAILURE
Definition lmmp.h:212
@ LAMMP_ERROR_PARAM_ASSERT_FAILURE
Definition lmmp.h:214
@ LAMMP_ERROR_MEMORY_FREE_FAILURE
Definition lmmp.h:216
@ LAMMP_ERROR_OUT_OF_BOUNDS
Definition lmmp.h:217

引用了 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().

+ 这是这个函数的调用关系图:

变量说明

◆ abort_cs_once

INIT_ONCE abort_cs_once = INIT_ONCE_STATIC_INIT
static

在文件 abort.c24 行定义.

被这些函数引用 abort_func_lock().

◆ abort_func_cs

CRITICAL_SECTION abort_func_cs
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.c23 行定义.

被这些函数引用 abort_func_lock(), abort_func_unlock() , 以及 init_abort_cs().

◆ lmmp_abort_func

lmmp_abort_fn lmmp_abort_func = NULL
static

在文件 abort.c68 行定义.

被这些函数引用 lmmp_abort() , 以及 lmmp_set_abort_fn().