如何捕捉符号查找错误
how to catch symbol lookup error
如何在代码中发现符号查找错误,从而导致程序崩溃?
void main()
{
try {
dlopen("shared.so", RTLD_LAZY);
/**
now running a function in this shared object and
this function calls a undefined reference
and then it crashes but i want to go in the catch block
*/
} catch(...) {
}
}
dlopen
是C
函数。它不抛出任何exception
。
void *dlopen(const char *filename, int flag);
来自man dlopen
如果dlopen()由于任何原因失败,它将返回NULL。
因此,请检查NULL
的返回值。
因此,为了进行检查,该符号存在,您应该使用
void *dlsym(void *handle, const char *symbol);
如果在指定的库或任何库中找不到符号加载该库时由dlopen()自动加载的,dlsym()返回NULL。(dlsym()执行的搜索在这些库的依赖树中是广度优先的。)由于符号的值实际上可能是NULL(因此从dlsym()返回NULL不需要指示错误),测试错误的正确方法是调用dlerr()清除任何旧的错误条件,然后调用dlsym(),然后再次调用dlerr(),将其返回值保存到变量中,并检查此保存的值不是NULL。
相关文章:
- 查找显示链表时出现的错误
- enable_if继承的成员函数的名称查找错误
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 使用 c++ 查找 lapindromes 时运行时错误"SIGCONT"
- 旧C++代码中的目录查找导致 OS X Catalina 10.15 中的目录错误
- 尝试查找两组点的交集,错误"No viable overloaded '=' "
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 查找素数:错误:控件到达非void函数的末尾
- DEV C++ 第 69 行 [错误] ISO "for" 范围更改了"i"的名称查找 [-允许]
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 如何修复错误:使用向量查找最小值和最大值进行合并排序
- 需要一些帮助来查找我的程序中的逻辑错误
- OpenCV CV 查找单应断言错误计数器 = > 4
- 我的代码似乎在查找最大数字时存在语法错误
- 在编写代码以查找数组中的对数时获取分段错误
- 符号查找错误未定义的符号:curl_mime_init
- 从模板实例化/类型推断中查找错误消息的实际来源
- 质数查找器运行时错误
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 分段错误 - 查找列表的根