Adi*_*ood 1 segmentation-fault node.js
问候,为了节省您的时间这个错误已在v0.4.5中得到修复 我在今天安装node.js时遇到了一个相当奇怪的问题,并通过邮件存档进行了筛选,但却无法解决它!所以我把问题发布到了nodejs 这里
只是我snapshot='snapshot=on'从Node中的wscript 更改为snapshot=''.我这样做是因为在这之前我在make期间遇到了以下错误:
scons: *** [obj/release/snapshot.cc] Error -11
现在我要遵循的步骤.
*以root身份登录
---开始配置
adil-X:/usr/local/nodejs/node-v0.4.2 # ./configure --prefix=/usr/local/nodejs
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : yes
Checking for library util : yes
Checking for library rt : yes
--- libeio ---
Checking for library pthread : yes
Checking for function pthread_create : yes
Checking for function pthread_atfork : yes
Checking for futimes(2) : yes
Checking for readahead(2) : yes
Checking for fdatasync(2) : yes
Checking for pread(2) and pwrite(2) : yes
Checking for sendfile(2) : yes
Checking for sync_file_range(2) : yes
--- libev ---
Checking for header sys/inotify.h : yes
Checking for function inotify_init : yes
Checking for header sys/epoll.h : yes
Checking for function epoll_ctl : yes
Checking for header port.h : not found
Checking for header poll.h : yes
Checking for function poll : yes
Checking for header sys/event.h : not found
Checking for header sys/queue.h : yes
Checking for function kqueue : not found
Checking for header sys/select.h : yes
Checking for function select : yes
Checking for header sys/eventfd.h : yes
Checking for function eventfd : yes
Checking for SYS_clock_gettime : yes
Checking for library rt : yes
Checking for function clock_gettime : yes
Checking for function nanosleep : yes
Checking for function ceil : yes
Checking for fdatasync(2) with c++ : yes
'configure' finished successfully (2.239s)
Run Code Online (Sandbox Code Playgroud)
----配置结束
----开始制作(编译好!!)
[为简洁省略输出]
Waf: Leaving directory /usr/local/nodejs/node-v0.4.2/build'
'build' finished successfully (21.853s)
-----结束了
-----开始进行测试
/usr/bin/python "/usr/local/nodejs/node-v0.4.2/tools/scons/scons.py" -
j 2 -C "/usr/local/nodejs/node-v0.4.2/build/default/" -Y "/usr/local/
nodejs/node-v0.4.2/deps/v8" visibility=default mode=release arch=ia32
toolchain=gcc library=static
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `library' is up to date.
scons: done building targets.
DEST_OS: linux
DEST_CPU: ia32
Parallel Jobs: 2
Product type: program
python tools/test.py --mode=release simple message
[00:00|% 0|+ 0|- 0]: release test-pipe-
head === release test-
pipe-head ===
Path: simple/test-pipe-head
Command: build/default/node /usr/local/nodejs/node-v0.4.2/test/simple/
test-pipe-head.js
--- CRASHED ---
Run Code Online (Sandbox Code Playgroud)
......所有后续测试都以类似的方式失败.
-----结束测试
----- make install的开始(我没有在前几次尝试中执行make test.it后来我才用它)
adil-X:/usr/local/nodejs/node-v0.4.2 # make install
Waf: Entering directory `/usr/local/nodejs/node-v0.4.2/build'
DEST_OS: linux
DEST_CPU: ia32
Parallel Jobs: 2
Product type: program
* installing build/default/config.h as /usr/local/nodejs/include/node/
config.h
* installing build/default/tools/nodejs.pc as /usr/local/nodejs/lib/
pkgconfig/nodejs.pc
* installing build/default/node as /usr/local/nodejs/bin/node
* installing build/default/src/node_config.h as /usr/local/nodejs/
include/node/node_config.h
Waf: Leaving directory `/usr/local/nodejs/node-v0.4.2/build'
'install' finished successfully (0.122s)
Run Code Online (Sandbox Code Playgroud)
-----安装结束
我更新了PATH变量以包含nodejs bin.
现在,nodejs在启动时崩溃并出现以下错误
adil-X:/usr/local/nodejs/node-v0.4.2 # node example.js
node.js:0
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
不过,我可以看到node.js版本
adil-X:~ # node -v
v0.4.2
Run Code Online (Sandbox Code Playgroud)
OS/Arch信息:
adil-X:~ # cat /etc/*release
LSB_VERSION="core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-
ia32:core-3.2-ia32:core-4.0-ia32"
openSUSE 11.3 (i586)
adil-X:~ # cat /proc/cpuinfo
vendor_id :GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Duo CPU T6500 @ 2.10GHz
stepping : 10
cpu MHz : 1200.000
cache size : 2048 KB
Run Code Online (Sandbox Code Playgroud)
在从源代码构建的过程中没有错误,我无法弄清楚问题.我错过了一些明显的东西吗 谢谢.
我可以建议一些机制来尝试追踪这个问题.
首先,使用strace(1)和ltrace(1)上nodejs:
strace -o /tmp/node.strace -fF nodejs script.js
ltrace -o /tmp/node.ltrace -f nodejs script.js
Run Code Online (Sandbox Code Playgroud)
然后查看/tmp/node.*文件以发现它在崩溃之前所做的事情.编辑:strace(1)报告程序发出的系统调用 ; 当程序通过系统调用与外部世界交互时,它通常是查找错误的最快机制.ltrace(1)报告动态库调用,这通常是关于程序内部工作的更多信息.两者都很有用.
其次,运行dmesg > /tmp/dmesg并查看dmesgsegfault信息的输出,它看起来像这样:
[332430.652393] npviewer.bin[13508]: segfault at 418 ip 00000000f6086d16 sp 00000000ffd8b018 error 6 in libflashplayer.so[f5e19000+b5f000]
Run Code Online (Sandbox Code Playgroud)
这是一个Adobe Flash崩溃; 将地址与readelf -s程序上的输出进行比较,您可能能够猜出segfault发生的功能有多远,这在阅读源代码时可能会有所帮助.(通过地址猜测你进入一个函数有多远,这是一个很长的镜头,但我发现知道我是否应该看看函数的开头或结尾是否有用.)
第三,你可以运行程序valgrind(1):
valgrind nodejs script.js
Run Code Online (Sandbox Code Playgroud)
Valgrind是一个令人印象深刻的工具,可能需要相当多的学习才能真正了解.我使用它的那个小小的,我印象深刻,但我不能像其他更简单的工具那样提供像样的指导.
第四,你可以在nodejs以下运行gdb:
gdb --args nodejs script.js
Run Code Online (Sandbox Code Playgroud)
当它死亡时,运行bt以获得回溯.gdb也是一个令人印象深刻的程序,你可能会找到使用它的确切行,但它也需要相当多的学习才能真正了解.我很幸运,回溯通常足以找到错误.
幸运的话,你将指向失败的确切函数,ltrace(1)并将给你该函数的参数.这有望足以追踪具体的错误.
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |