ASP的err和error对象小结

本文详细介绍了ASP中ERR对象的使用方法及其与ERROR对象的区别。ERR对象无需实例化即可使用,通过Description方法返回错误描述。ERROR对象常用于数据库连接错误处理,可通过Count属性统计错误数量。

ERR对象

err对象使用的时候不需要创建实例,就是说你要用的时候随便拿来使用,就像session一样,不需要像ADODB对象使用的时候Set conn=Server.CreateObject("ADODB.Connection")来创建实例,它返回一个错误代码,但是Err!=Err.Number,可以用Clear方法清除,以利于下次使用.它主要的是个Description方法,返回的是简要错误说明,这里一个很经典的例子:
程序代码








错误 Number:

错误信息:

出错文件:

出错行:





运行一看,呓,Err.Line 为空,为啥?因为asp的vb编写的里面line方法不被支持.值得注意的是要使用err对象的时候,必须加上On Error Resume Next,原来越过asperror对象的异常抛出.

ERROR对象
在链接数据库的时候可以使用error对象: Count属性:用来统计Errors集合的数目,Item方法:用来指定特定的一个错误,语法为Error.Item(number),其中number为一数字。由于Item为默认的方法,所以Error(number)的写法与前面的写法是等价的。下面是一段程序。用来列举Error对象:
程序代码

没啥差别和err对象,看到比较结果了么?寒死了,直接用err对象简单.

一般建议在调试的时候用asperror对象(就相当于不处理,出错是网页上显示的默认信息就是),就是把On Error Resume next 这行rem了,就默认用asperror抛出了.在正式运行的时候,除非特殊要求,可以使用err对象做点事情.
<think> 首先,用户的问题是关于OPEN SSL的ERR_error_string函数,他们想了解它的使用方法功能作用。用户提到可能是使用方法、功能作用等。 我需要参考提供的引用,但用户明确指出这些引用仅供参考,并不是用户真正的需求。我应该尽可能多地参考用户上一次的问题我的回答。然而,在这个对话中,用户的问题似乎是新的,没有之前的上下文,所以我会基于当前查询回答。 提供的引用: - 引用[1]:关于使用Frida拦截SSL_read/SSL_write函数的JavaScript代码。 - 引用[2]:关于SSL证书异常的Java错误。 - 引用[3]:关于OpenSSL实现SSL通信的Makefile示例。 这些引用与ERR_error_string函数没有直接关系,但引用[3]提到OpenSSL,这与ERR_error_string相关,因为ERR_error_string是OpenSSL库的一部分。 ERR_error_string函数是OpenSSL中用于处理错误信息的函数。它的功能是返回一个字符串,描述最后一个OpenSSL错误。 关键点: - 功能:ERR_error_string将错误代码转换为可读的字符串消息。 - 使用方法:它通常与ERR_get_error一起使用,后者获取最后一个错误代码。 标准用法: ```c unsigned long err = ERR_get_error(); char *str = ERR_error_string(err, NULL); // 或者使用缓冲区 char buf[256]; ERR_error_string(err, buf); ``` 函数原型: ```c char *ERR_error_string(unsigned long e, char *buf); ``` - `e`:错误代码(通常从ERR_get_error()获取)。 - `buf`:缓冲区来存储错误字符串;如果为NULL,函数返回一个静态缓冲区(不是线程安全的)。 由于用户要求使用中文回答,我会用中文解释。 回答结构: 1. 介绍ERR_error_string的功能。 2. 解释使用方法,包括示例代码。 3. 注意事项,如线程安全性。 4. 添加相关问题。 根据系统级指令: - 所有行内数学表达式使用$...$格式——这里可能没有数学表达式,但如果有变量或代码,我会处理。 - 独立公式使用$$...$$格式——不适用。 - LaTeX语法正确——在代码块中不需要LaTeX,但代码要正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识——用户提供了引用,但只有引用[3]与OpenSSL相关,我可以引用它作为背景。 用户可见层: - 回答结构清晰,逐步解决问题。 - 保证真实可靠。 所以,回答大纲: 1. **功能作用**:简述ERR_error_string是什么,它的目的。 2. **使用方法**:详细步骤代码示例。 3. **注意事项**:如错误处理、线程安全。 4. **相关问题生成**:在末尾添加相关问题。 相关问题: - 用户对ERR_error_string感兴趣,相关问题可以围绕OpenSSL错误处理展开。 例如: 1. ERR_error_string与ERR_error_string_n的区别? 2. 如何在多线程环境中安全使用ERR_error_string? 3. 除了ERR_error_string,OpenSSL还有哪些错误处理函数? 最后,代码示例:我会用C语言示例,因为OpenSSL是C库。 </think>### OPEN SSL ERR_error_string 的使用方法功能介绍 ERR_error_string 是 OpenSSL 库中的一个核心函数,主要用于处理 SSL/TLS 错误信息。它的核心功能是将 OpenSSL 内部错误代码(一个无符号长整型值)转换为可读的字符串描述,帮助开发者诊断调试 SSL 相关错误(如证书验证失败、握手异常等)[^3]。以下我将逐步解释其功能作用使用方法,确保内容真实可靠。 #### 1. **功能作用** - **错误信息转换**:ERR_error_string 将 OpenSSL 错误代码(例如通过 `ERR_get_error()` 获取)转换为人类可读的字符串。例如,错误代码 `336130314` 可能被转换为字符串 `"SSL routines:ssl3_get_record:wrong version number"`,清晰地指示问题原因。 - **调试辅助**:在 SSL 通信中(如 HTTPS 请求),当函数如 `SSL_read` 或 `SSL_write` 失败时,ERR_error_string 能快速输出错误详情,加速问题排查[^1][^3]。 - **线程安全考虑**:默认情况下,ERR_error_string 返回一个静态缓冲区(非线程安全)。在多线程环境中,建议使用缓冲区参数或改用线程安全函数 `ERR_error_string_n`。 #### 2. **使用方法** ERR_error_string 通常与 `ERR_get_error()` 配合使用。以下是标准步骤代码示例: ##### 步骤说明: 1. **获取错误代码**:调用 `ERR_get_error()` 获取最近发生的 OpenSSL 错误代码。 2. **转换错误字符串**:使用 ERR_error_string 将错误代码转换为字符串。 - **参数说明**: - `e`:错误代码(类型 `unsigned long`)。 - `buf`:可选缓冲区指针。如果为 `NULL`,函数返回一个静态字符串;如果提供缓冲区,错误字符串将被复制到该缓冲区。 - **返回值**:指向错误字符串的指针(如果 `buf` 为 `NULL`,则指向静态内存;否则指向 `buf`)。 3. **输出或处理错误**:将字符串记录到日志、控制台或用于错误处理逻辑。 ##### C 语言代码示例 以下是一个完整的示例,展示如何在 OpenSSL 程序中捕获并输出错误: ```c #include <openssl/err.h> #include <stdio.h> int main() { // 模拟一个 OpenSSL 错误(例如 SSL 握手失败) SSL_CTX *ctx = SSL_CTX_new(TLS_client_method()); if (!ctx) { // 获取错误代码 unsigned long err_code = ERR_get_error(); // 使用 ERR_error_string 转换错误 char err_buf[256]; // 缓冲区确保线程安全 const char *err_str = ERR_error_string(err_code, err_buf); // 输出错误信息 printf("OpenSSL 错误发生!\n"); printf("错误代码: %lu\n", err_code); printf("错误描述: %s\n", err_str); return 1; } // 正常清理 SSL_CTX_free(ctx); return 0; } ``` - **关键点**: - **缓冲区使用**:示例中定义了 `err_buf[256]` 作为缓冲区,避免依赖静态内存(提高线程安全性)。 - **错误链处理**:OpenSSL 错误可能形成链式结构(多个错误关联)。使用循环遍历所有错误: ```c unsigned long err; while ((err = ERR_get_error()) != 0) { char buf[256]; printf("错误: %s\n", ERR_error_string(err, buf)); } ``` - **编译依赖**:编译时需链接 OpenSSL 库(例如 `gcc program.c -lssl -lcrypto`)[^3]。 #### 3. **注意事项** - **线程安全**:在单线程中,传递 `buf=NULL` 可简化代码,但静态缓冲区可能被覆盖。多线程环境下**必须**使用自定义缓冲区。 - **错误代码范围**:错误代码通过 `ERR_get_error` 获取,确保在 OpenSSL 函数失败后立即调用(否则错误可能被清除)。 - **替代函数**:对于现代应用,推荐使用 `ERR_error_string_n`(线程安全)或 `ERR_print_errors_fp`(直接打印到文件指针)。 - 常见错误场景:如引用[2]中的证书验证失败(`SSLHandshakeException`),可通过此函数获取底层 OpenSSL 错误细节。 #### 4. **应用场景** - 调试 SSL/TLS 连接问题(如证书无效、协议不匹配)。 - 嵌入到日志系统中,记录 OpenSSL 库的详细错误信息[^1][^2]。 - 结合 Frida 等工具拦截 SSL 函数时,输出错误上下文(如引用[1]中的 `SSL_read` 拦截)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值