最近在s3c2440上移植了qt4.7.4,程序是可以跑了,但在关闭时总是出现"Segmentation fault",此后运行程序的终端就不再响应。怎么办呢???什么原因呢???这么大个工程编译一次就要半个小时,不好调试阿!!头晕
n天之后的今天的昨天,我用strace追踪了下,命令如下:
strace -f -F -o strace.log mainwindow -qws
会在当前目录生成一个strace.log的追踪记录的文件。
n天之后的今天,分析之,发现是在munmap( 0x400e5000, 37588)处奔溃了,搜索地址 0x400e5000
得到如下记录块:
----------------------------------------------------------------------------------------------------------------------->
501 open(" /lib/ts/linear.so", O_RDONLY) = 13
501 read(13, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\210\6\0\0004\0\0\0"..., 512) = 512
501 fstat64(13, {st_mode=S_IFREG|0755, st_size=16142, ...}) = 0
501 mmap2(NULL, 37588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 13, 0) = 0x400e5000
501 mprotect(0x400e7000, 28672, PROT_NONE) = 0
501 mmap2(0x400ee000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 13, 0x1) = 0x400ee000
501 close(13) = 0
501 stat64("/etc/pointercal", {st_mode=S_IFREG|0644, st_size=51, ...}) = 0
-----------------------------------------------------------------------------------------------------------------------<
和触摸屏有关哦,假如把qt鼠标配置环境变量QWS_MOUSE_PROTO中的触摸屏去掉会怎么样???
于是把 QWS_MOUSE_PROTO的值由
export QWS_MOUSE_PROTO="tslib:/dev/input/event0 intelliMouse:/dev/input/mice"
改成
export QWS_MOUSE_PROTO="intelliMouse:/dev/input/mice"
结果是:触摸屏鼠标都能用,关闭程序,不会出现"Segmentation fault",哈哈
太兴奋了!!!几个月的心病终于去除!!!
再进一步,如果 环境变量QWS_MOUSE_PROTO为空会怎样?鼠标还能用麻?
于是改成如下
export QWS_MOUSE_PROTO=
嘿,鼠标、触摸屏一个不少都能用。而且也不奔溃,好家伙。搞定。
嘿嘿,strace还是蛮有用的阿,推荐下。
造成这个问题的关键是我把网上的环境配置直接拿过来用,但是嵌入式系统每个人的都不一样,所以不一定合适,最好的方式就是先构建一个最小系统,在这个基础上增加功能。这样就可以防止一个大系统陷入无从调试的尴尬境地。也更容易找出问题所在。
环境:
交叉编译器: arm-linux-gcc 4.6.2 (自制)
qt编译参数:
./configure \
-embedded arm \
-prefix ${PREFIX} \
-release \
-opensource \
-shared \
-fast \
-no-largefile \
-no-accessibility \
-no-sql-sqlite \
-no-sql-sqlite2 \
-no-qt3support \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon \
-qt-zlib \
-qt-gif \
-no-libtiff \
-qt-libpng \
-no-libmng \
-qt-libjpeg \
-no-openssl \
-optimized-qmake \
-xplatform qws/linux-arm-g++ \
-no-armfpa \
-little-endian \
-host-little-endian \
-qt-freetype \
-depths 32 \
-no-opengl \
-qt-gfx-linuxfb \
-qt-kbd-linuxinput \
-qt-mouse-linuxinput \
-qt-mouse-tslib -I${PREFIX}/include -L${PREFIX}/lib \
-no-glib \
-no-qvfb \
-no-separate-debug-info \
-no-nis \
-no-cups \
-no-iconv \
-no-dbus \
-no-phonon \
-no-phonon-backend \
-no-xmlpatterns \
-no-gfx-multiscreen \
-make libs -make examples -make demos -make qmake \
-no-xcursor -no-xfixes \
-no-mouse-qvfb
阅读(789) | 评论(0) | 转发(1) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
n天之后的今天的昨天,我用strace追踪了下,命令如下:
strace -f -F -o strace.log mainwindow -qws
会在当前目录生成一个strace.log的追踪记录的文件。
n天之后的今天,分析之,发现是在munmap( 0x400e5000, 37588)处奔溃了,搜索地址 0x400e5000
得到如下记录块:
----------------------------------------------------------------------------------------------------------------------->
501 open(" /lib/ts/linear.so", O_RDONLY) = 13
501 read(13, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\210\6\0\0004\0\0\0"..., 512) = 512
501 fstat64(13, {st_mode=S_IFREG|0755, st_size=16142, ...}) = 0
501 mmap2(NULL, 37588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 13, 0) = 0x400e5000
501 mprotect(0x400e7000, 28672, PROT_NONE) = 0
501 mmap2(0x400ee000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 13, 0x1) = 0x400ee000
501 close(13) = 0
501 stat64("/etc/pointercal", {st_mode=S_IFREG|0644, st_size=51, ...}) = 0
-----------------------------------------------------------------------------------------------------------------------<
和触摸屏有关哦,假如把qt鼠标配置环境变量QWS_MOUSE_PROTO中的触摸屏去掉会怎么样???
于是把 QWS_MOUSE_PROTO的值由
export QWS_MOUSE_PROTO="tslib:/dev/input/event0 intelliMouse:/dev/input/mice"
改成
export QWS_MOUSE_PROTO="intelliMouse:/dev/input/mice"
结果是:触摸屏鼠标都能用,关闭程序,不会出现"Segmentation fault",哈哈
![](http://cnc.qzs.qq.com/qzone/em/e109.gif)
![](http://cnc.qzs.qq.com/qzone/em/e128.gif)
再进一步,如果 环境变量QWS_MOUSE_PROTO为空会怎样?鼠标还能用麻?
于是改成如下
export QWS_MOUSE_PROTO=
嘿,鼠标、触摸屏一个不少都能用。而且也不奔溃,好家伙。搞定。
嘿嘿,strace还是蛮有用的阿,推荐下。
造成这个问题的关键是我把网上的环境配置直接拿过来用,但是嵌入式系统每个人的都不一样,所以不一定合适,最好的方式就是先构建一个最小系统,在这个基础上增加功能。这样就可以防止一个大系统陷入无从调试的尴尬境地。也更容易找出问题所在。
环境:
交叉编译器: arm-linux-gcc 4.6.2 (自制)
qt编译参数:
./configure \
-embedded arm \
-prefix ${PREFIX} \
-release \
-opensource \
-shared \
-fast \
-no-largefile \
-no-accessibility \
-no-sql-sqlite \
-no-sql-sqlite2 \
-no-qt3support \
-no-svg \
-no-webkit \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-neon \
-qt-zlib \
-qt-gif \
-no-libtiff \
-qt-libpng \
-no-libmng \
-qt-libjpeg \
-no-openssl \
-optimized-qmake \
-xplatform qws/linux-arm-g++ \
-no-armfpa \
-little-endian \
-host-little-endian \
-qt-freetype \
-depths 32 \
-no-opengl \
-qt-gfx-linuxfb \
-qt-kbd-linuxinput \
-qt-mouse-linuxinput \
-qt-mouse-tslib -I${PREFIX}/include -L${PREFIX}/lib \
-no-glib \
-no-qvfb \
-no-separate-debug-info \
-no-nis \
-no-cups \
-no-iconv \
-no-dbus \
-no-phonon \
-no-phonon-backend \
-no-xmlpatterns \
-no-gfx-multiscreen \
-make libs -make examples -make demos -make qmake \
-no-xcursor -no-xfixes \
-no-mouse-qvfb
相关热门文章
给主人留下些什么吧!~~
评论热议