首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在核心文件中看到Erlang库中的符号

无法在核心文件中看到Erlang库中的符号
EN

Stack Overflow用户
提问于 2021-07-20 17:36:00
回答 1查看 84关注 0票数 0

我正在x86上Ubuntu上的第三方C库上开发一个Erlang包装器,所以我正在创建一个NIF。有时,我的代码(我认为)崩溃,导致一个核心文件。不幸的是,堆栈跟踪并没有真正的帮助:

代码语言:javascript
代码运行次数:0
运行
复制
(gdb) bt
#0  0x00007fc22229968a in ?? ()
#1  0x0000000060e816d8 in ?? ()
#2  0x0000000007cd48b0 in ?? ()
#3  0x00007fc228031410 in ?? ()
#4  0x00007fc228040b80 in ?? ()
#5  0x00007fc228040c50 in ?? ()
#6  0x00007fc22223de0b in ?? ()
#7  0x0000000000000000 in ?? ()

即使我用调试信息构建了我的NIF .so文件:

代码语言:javascript
代码运行次数:0
运行
复制
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=b70dd1f2450f5c0e9980c8396aaad2e1cd29024c, with debug_info, not stripped

beam还提供了调试信息:

代码语言:javascript
代码运行次数:0
运行
复制
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e0a5dba6507b8c2b333faebc89fbc6ea2f7263b9, for GNU/Linux 3.2.0, with debug_info, not stripped

但是,info sharedlibrary既没有显示NIF,也没有显示第三方库:

代码语言:javascript
代码运行次数:0
运行
复制
(gdb) info sharedlibrary 
From                To                  Syms Read   Shared Object Library
0x00007fc28942ed50  0x00007fc289432004  Yes         /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
0x00007fc289429220  0x00007fc28942a179  Yes         /lib/x86_64-linux-gnu/libdl.so.2
0x00007fc2892e83c0  0x00007fc28938ef18  Yes         /lib/x86_64-linux-gnu/libm.so.6
0x00007fc2892b76a0  0x00007fc2892c517c  Yes         /lib/x86_64-linux-gnu/libtinfo.so.6
0x00007fc28928dae0  0x00007fc28929d4d5  Yes         /lib/x86_64-linux-gnu/libpthread.so.0
0x00007fc2890b9630  0x00007fc28922e20d  Yes         /lib/x86_64-linux-gnu/libc.so.6
0x00007fc289657100  0x00007fc289679674  Yes (*)     /lib64/ld-linux-x86-64.so.2
0x00007fc24459c040  0x00007fc2445ab8ad  Yes         /home/nar/otp/23.3.4.2/lib/crypto-4.9.0.2/priv/lib/crypto.so
0x00007fc2239e3000  0x00007fc223b7c800  Yes (*)     /lib/x86_64-linux-gnu/libcrypto.so.1.1
0x00007fc2896500e0  0x00007fc28965028c  Yes         /home/nar/otp/23.3.4.2/lib/crypto-4.9.0.2/priv/lib/crypto_callback.so
0x00007fc289649380  0x00007fc28964bc1c  Yes         /home/nar/otp/23.3.4.2/lib/asn1-5.0.15/priv/lib/asn1rt_nif.so
0x00007fc289638720  0x00007fc28963bd70  Yes         /lib/x86_64-linux-gnu/librt.so.1

我找到了的答案,提到“Erlang不加载带有公开了全局符号的NIF库”。难道这就是我看不到符号的原因吗?有没有办法让gdb从我的.so文件中查找符号?

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 12:12:23

我构建了启用调试的Erlang (我使用克尔构建并将KERL_BUILD_DEBUG_VM设置为true),然后使用-debug选项启动erlang。这样,一些断言似乎在代码中被启用了,它们崩溃了,这导致了我代码中的错误。从那以后我就没撞车了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68459158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档