如何捕捉符号查找错误
问题描述:
如何捕捉我的代码中的符号查找错误,所以目前我的程序崩溃?如何捕捉符号查找错误
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不需要指示错误),因此,测试错误的正确方法是调用dlerror()来清除任何旧的错误条件,然后调用dlsym(),然后再次调用dlerror(),将其返回值保存到变量中,并检查是否保存了 值不是NULL。
10 ..如何检查返回值? – SuperSaiyan
它只是一个简短的代码片段dlopen返回一个有效的句柄,并且这个共享对象中的函数运行良好,直到unreferenced被称为 – helmi
'void main'?在2012年? – Flexo