故障排查
找不到符号 can not find symbol:xxx 定位分析
Q:编译应用程序后运行报错 can not find symbol:xxx 是什么问题? 如下示例,运行程序后报错:can not find symbol:_ZN11checkThread3runEv 分析 can not find symbol:xxx 的原因大致分为三种情况: 1、参考文章:找不到符号 can not find symbol:xxx 分析之一(误操作输入错误函数名称) 2、参考文章:找不到符号 can not find symbol:xxx 分析之二(库路径未添加或库未上传) ...
非对齐访问导致程序崩溃的规避方法
Q:运行 app,运行中崩溃的原因及规避方法 经过查验是发现崩溃在了访问非对齐内存上 解决方式:选择 release 模式编译,以及添加一个局部变量传入库函数中,最后再将局部变量赋值给非对齐的内存 文章部分截图 app运行崩溃原因,在 linux 上运行现象,以及解决办法见附件 更多扩展知识见: 参考文章:SylixOS 开发禁(限)用有哪些注意事项
(Qt)多进程报错:could not bind to file /tmp/qtembedded-0/QtEmbedded-0
Q:同时运行多个界面(Qt)进程报错:could not bind to file /tmp/qtembedded-0/QtEmbedded-0 第一个进程是可以运行的,继续运行第二个进程的时候报错,操作示例如下: [root@sylixos:/apps/test]# ./app1 -qws & [root@sylixos:/apps/tset]# ./app2 -qws QWSServerSocket::init: Address already in use ...
开发中常见故障类型
Q:开发中常见故障类型 在开发过程中经常出现的故障类型主要包括如下几种: 1、栈溢出 2、空指针访问 3、内存泄漏 4、数组越界 5、系统资源泄漏 6、死锁 7、优先级反转 8、位扩展和除零等错误 9、Bus Error 10、Not Found Symbol 11、使用for循环延时被优化 以上故障原因经常出现在开发或排故过程中,其解决方法可参考如下方案: 更多扩展知识见: 可以使用 Crash Trap 调试,使用方式详见《RealEvo-IDE 使用手册》第5章 ...
应用程序崩溃,没有输出任何信息,如何定位?
Q:应用程序崩溃,但没有输出任何信息,如何定位呢? 1,考虑是否栈溢出或者函数调用栈被破坏。 2,如何验证是否是栈溢出导致的呢? 在 SylixOS 上可以通过Shell 命令 调大调用栈。 //比如通过如下命令,将栈调大一倍,默认栈大小是65535shstack 120000 也有可能是栈变量等被改写,这就需要结合代码进行分析。 在嵌入式系统中,函数中最好不要定义太大的局部变量,这很容易导致栈溢出,并浪费很多时间来定位无明显提示信息的程序 Crash。 更多扩展知识见: ...
SylixOS 性能优化:动态内存分配器替换
1、SylixOS支持多种内存分配算法,即内存分配器(Memory Allocators,以下简称为分配器) dlmalloc : 第一个被广泛使用的通用动态内存分配器,Linux 早期使用,SylixOS 应用程序默认选用。 ptmalloc2 :Linux glibc默认内存分配算法,由dlmalloc发展而来,发布于2006年。 tcmalloc (Thread-Caching Malloc): Google 贡献的分配器。 TLSF (two-level segregated-fit) ...
Qt编译符号问题:typeinfo
Q:Qt 程序编译时未找到 typeinfo 相关符号问题 产生原因:在编译 Base 时,默认使用了编译参数 "-fno-rtti" 与编译 Qt 程序时使用的编译参数不一致。 修正方法:在 Qt 程序中添加 "-fno-rtti" 编译参数,保持 Base 与 Qt 编译参数一致。
No rule to make target '/libsylixos/SylixOS/mktemp/header.mk'
Q:使用 RealEvo-IDE 编译 BSP 工程出现如下异常现象,需如何解决; 图上,出现该问题的原因可能是 在上次编译过程中,运行 RealEvo-IDE 的电脑异常关闭、掉电等情况,致编译过程中 mktemp、header.mk 等文件不完整或篡改,导致工程不完整所致。 可通过删除原来工程,重新创建新的 Base 工程编译后,在进行 BSP、Driver 编译即可解决。
Qt运行报错:could not bind to file /tmp/qtembedded-0/QtEmbedded-0
Q:Qt 运行报错 :could not bind to file /tmp/qtembedded-0/QtEmbedded-0 该如何解决? 进程正在运行... QWSServerSocket::init: Address already in use OWSServerSocket::could not bind to file /tmp/qtembedded-0/QtEmbedded-0 QWSServerPrivate::initserver: server socket not ...
_doSignal()报错问题排查
Q:_doSignal() error: no node can allocate from free sigqueue. 这个错误发生一般是由于向某一线程发送消息时申请新的消息 buffer,存储消息并进行消息排队,而排队的消息并未被线程及时处理导致消息 buffer 不够才报错
can not find symbol:xxx(C++)
Q:CPP 程序调用 C 函数编译无问题,运行找不到符号? c++ 中支持函数重载,所以 c 和 c++ 中对同一个函数经过编译后生成的函数名不同,这就会导致一个问题。如果在 c++ 中调用一个使用 c 语言编写模块中的某个函数,c++ 是按照 c++ 的名称修饰方式来查找并链接这个函数,就会发生链接错误。 c函数:void func(),被编译成函数:func c++函数: void func(){},被编译成函数:_Z4funcv 解决方法: 方法一: 可以在c++test.cpp文件中添加 ...
alignment < page size
问: SylixOS 使用动态加载功能时报错alignment < page size? 答: SylixOS MMU页表使用了巨型页的配置,由于可执行应用程序在进行编译生成 elf 时还是默认使用标准的页面对齐方式, 所以在加载器在应用程序动态加载运行时出现报错 alignment < page size 解决办法:在编译应用程序时 指定参数-z max-page-szie=xxxx
运行警告 "WARNING: ctx.vmem create error!" ?
Q: SylixOS 程序运行时警告 "WARNING: ctx.vmem create error!" ? A: SylixOS 动态加载器在加载应用程序后会尝试申请虚拟地址空间,如果申请的空间过大,会导致申请失败, 出现 "WARNING: ctx.vmem create error!" 可以调整环境变量SO_MEM_PAGES定义的大小,从而缩小申请的空间大小,避免出现警告
SylixOS 的 errno 是全局的么?
Q:遇到一个问题。read 函数返回 -1,紧接着打印 errno 是11。但是经过if条件分支后,打印的 errno 变成了 1503。此中间没有进行任何系统调用。如下图所示,问题是 errno 值变了,导致判断为 TCP 连接异常,于是直接把连接关闭了,搞不清 errno 值怎么会变成 1503? socket 接口 recv 函数分为阻塞与非阻塞,返回值定义是 >0 表示读到的字节数,=0 表示连接关闭,<0 表示出错,errno 根据不同情况设置不同值。没有数据了一般设置 EAGAIN ...
开启内存越界检测功能
Q:如何“开启内存越界检测功能”? BSP传入的内核启动参数: 在 /libsylixos/SylixOS/kernel/include/k_globalvar.h 文件中有定义: 在 /libsylixos/SylixOS/kernel/interface/KernelParam.c 文件中的 API_KernelStartParam 函数有根据 BSP 启动参数设置 _K_bHeapCrossBorderEn 全局变量,进而控制是否开启内存越界检测功能: ...
运行 hello world APP 程序会直接崩溃?
Q:启动系统后运行hello world APP程序都会直接崩溃的原因 Sylixos加载APP的时候,不仅会进行程序编译的架构比对(如X86,CSKY),还依赖虚拟进程创建库(libvpmpdm.so),如 APP 和系统的编译的Base 是一致的,那么基本就是这个库没有正确部署导致。
FileZilla 上传程序后运行崩溃?
问:FileZilla Client 传输 APP,SylixOS 端运行此 APP 直接崩溃? 使用 FileZilla Client 传输 APP 到 SylixOS,之后执行 APP,系统崩溃,使用 RealEvo-IDE 传输同样的 APP 不会崩溃? 通过配置 FileZilla Client 传输文件选择使用二进制传输即可解决此问题。 FileZilla Client配置
程序崩溃时该如何调试
Q:程序崩溃时该如何调试 首先确定编译应用程序所选择的编译工具架构,和实际硬件架构是否一致。 可以使用 Crash Trap 调试, SylixOS 自 v1.9.9 内核版本后开始支持 crashtrap 命令,此命令可在程序崩溃时将进程切换到 STOP 模式,方便用户进入 Attach 调试。 更多扩展知识见: 使用方式详见《RealEvo-IDE 使用手册》第5章 RealEvo-IDE调试,5.8 Crash Trap调试 或者《SylixOS 开发禁(限)用说明》 ...
打印指定线程的调用栈
Q:线程运行不正常,发现阻塞了,需要打印其调用连。 SylixOS 支持通过命令可以获取指定线程的调用链。 通过 shell 交互输入:kill -n 47 线程 id
DSP 问题:No entries available
问:依赖于 Standard Base 创建的应用程序,修改依赖 DSP Base 后无法识别到 DSP Base 工程,现象如下图所示: 答:创建 Base选项时,选择创建 DSP 类型的 Base工程, DSP 的 Base 与 Standard Base 有差异。
Qt for Embedded Linux data directory has incorrect permissions
Q:SylixOS 下运行 QT 程序出现提示 tmp 下目录无权限导致运行失败。 设备在更换镜像及文件系统后,启动正常,调试串口提示 QT 程序启动运行错误,提示信息如下: Qt for Embedded Linux data directory has incorrect permissions: /tmp/qtembedded-1 Qt for Embedded Linux data directory has incorrect permissions: ...
can not find symbol:xxx
问:can not find symbol:xxx 在不使用第三方库时使用 Posix 接口进行线程创建,即调用 posix_create 函数时,程序在系统下运行时显示如 图1 错误,提醒无法找到以上函数的符号。 图 1.报错信息 在初始化函数 API_ThreadInit 中的 _TCBBuild 构建 TCP 属性块函数中有对钩子函数的使用。图2 图 2.报错函数位置 通过源码追踪,发现 Hook 函数并没有进行函数底层实现,且没有编译到 Base 工程的 symbol.ld ...
error:Permisson denied
Q:在使用 IDE 调试功能时,编译输出错误信息提示:Permisson denied 问题解决 在使用 IDE 调试功能时,编译输出: rm: cannot unlink 'Debug/***': Permission denied make:*** [Debug/***] Error 1 make: Target 'all' not remade because of errors. 如图:此时,相关工程是无法正常编译的。 解决办法是:在状态栏的 “debug” ...
tmp 目录无权限运行失败分析
Q:SylixOS 下运行 QT 程序出现提示 tmp 下目录无权限导致运行失败。 设备在更换镜像及文件系统后,启动正常,但是调试串口提示QT程序启动运行错误,提示信息如下: Qt for Embedded Linux data directory has incorrect permissions: /tmp/qtembedded-1 Qt for Embedded Linux data directory has incorrect permissions: ...
error:No more processes or operation would block
Q:SylixOS 运行程序运行出现 error:No more processes or operation would block 出现上述错误主要是因为应用程序中使用了太多了event。SylixOS中所有的锁包括互斥锁、信号灯都是event。可在/proc/kernel/objects中查看: 从上图可以看出event已经达到了最大值3000,因此报错。 ...
error: skipping incompatible xxxxx when searching for -lxxx
Q:qt 编译失败,报错信息为 “error: skipping incompatible D:/ACOINFO/workspace_base2.1.6/Base_x64/libcextern/Release\libcextern.a when searching for -lcextern”,等如下图所示 该报错打印是由于 qt 程序编译时使用的工具链与 Base 工程类型不兼容导致的,此时需检查 qt 选项 kit 配置中编译链和依赖的 Base ...
error:expected unqualified-id before string constant extern "C" { ”
Q:Qt 中编译时出现 “expected unqualified-id before string constant extern "C" { ” 错误的原因? 例如编译报错图如下: 其中图上错误指向开源串口库头文件 termios.h ,该文件中在 “ extern "C" { ” 处编译报错,该错误 原因为改文件中可能存在 “;”、“}”、“)” 等括号未匹配或者缺少分号等造成的文件中格式出现问题, 或者为该文件被人为修改替换导致的格式问题。 解决方法: ...
如果系统出现了异常,如何处理?
Q:如果系统出现了异常,如何处理? 使用以下几个 shell 命令快速定位是否为系统问题: “ps” 查看 kernel 线程是否正常; “tp” 查看有无死锁; “ints” 查看中断; “top” 查看 cpu 的使用情况; “ss” 查看当前堆栈情况(达到临界值时会报警,溢出时会造成系统崩溃) 若程序运行时设备直接重启 检查 /etc/startup.sh 脚本中是否设置了 “shstack 120000” 语句,检查 shell 任务线程栈空间大小 查看系统/应用程序状态,有如下几种: ...
IDE 中在可执行文件点击右键没有“ELF File Analysis”菜单如何解决?
问:IDE 中在可执行文件点击右键没有 “ELF File Analysis” 菜单如何解决? 答:RealEVO-IDE 从 4.0.0 版本开始集成了 “ELF File Analysis” 的辅助分析工具,工程编译后在 Debug 目录或 Release 目录下生成可执行文件,在该文件上点击右键,使用 “ELF File Analysis” 功能可以分析出该 elf 文件所用到的所有符号,在编译时找不到的符号会均以红色标出。 有再使用中可能会出现可执行文件点击右键没有 “ELF File ...
can not find symbol: _ZN8QWebView6setUrlERK4QUrl
Q:SylixOS 使用 Qt4.8.7 webkit 出现:[ld]Library /apps/xxx/xxx can not find symbol: _ZN8QWebView6setUrlERK4QUrl 错误? QT += core gui QT += webkit QT += webkitwidgets 使用 webkit 中的 webview 功能需要追加 QT += core gui webkit webkitwidgets 更多扩展知识见: 参考文章:找不到符号 can not ...
警告 warning: implicit declaration of function ‘xxx’ [-Wimplicit-function-declaration]
Q :警告 warning: implicit declaration of function ‘xxx’ [-Wimplicit-function-declaration] 解决方法。 调用动态链接库的函数提示警告 "warning: implicit declaration of function ‘xxx’ [-Wimplicit-function-declaration]",我不想要这个警告,用什么方法去除。 在函数所在的 .c 文件中没有定义,就会产生这种警告。 ...
C++ 工程编译时报错:“error:exception handling disabled, use -fexceptions to enable”
问:C++ 工程编译时报错:“error:exception handling disabled, use -fexceptions to enable”,如下图所示 修改部分工程设置后重新编译即可解决,配置修改如下图所示
switch 语句中缓存刷新问题如何解决?
1、switch 语句中缓存刷新问题? 1.适用范围 在使用多个输出函数连续进行多次输出时,有可能发现输出错误。因为下一个数据再上一个数据还没输出完毕,还在输出缓冲区中时,下一个 printf 就把另一个数据加入输出缓冲区,结果冲掉了原来的数据,出现输出错误。 在 print(); 后加上 fflush(stdout); 强制马上输出,避免错误。 2.原理概述 2.1问题描述 当一个任务往消息队列中发送一帧数据后,在另一个线程中读取数据并进入 Switch ...
系统遇到哪些异常时,会导致系统重启
Q:系统遇到哪些异常时-会导致系统重启 以 MPSOC 平台为例,在异常中断处理流程中,如果检测到如下错误,那么会系统重启: 1、发现中断点处于内核态,那么会执行重启; 2、如果由系统任务触发中断处理流程,那么会执行重启; 3、如果当前是关键错误,或当前处于中断嵌套状态中时,那么会执行重启;(ESR_EL1 寄存器的 EXC_SERROR_INT 位指示当前是否处于关键错误) 4、当前异常处理流程处于中断嵌套状态时,会执行重启 5、当出现 invalid 异常时,会执行重启;(该 invalid ...
QT 异常:QNativeSocketEngine::initialize unable to inline out-of-band data
Q:TCPClient 通信,普通 QT 正常,翼辉 QT 异常:QNativeSocketEngine::initialize unable to inline out-of-band data 翼辉系统的协议层暂不支持 OOB
找不到符号 can not find symbol:xxx 分析之三(库函数未实现)
找不到符号 can not find symbol:xxx 分析之三(库函数未实现) Q:在应用程序中调用了一个第三方的库,编译后没有任何 warning 调用第三方库的函数示例代码如 程序清单 1.1所示。 程序清单 1.1 示例代码 #include <stdio.h> void clientShare(void); int main (int argc, char **argv) { clientShare(); printf("Hello SylixOS!\n"); return ...
找不到符号 can not find symbol:xxx 分析之二(库路径未添加或库未上传)
找不到符号 can not find symbol:xxx 分析之二(库路径未添加或库未上传) Q:使用 RealEvo-IDE(以下简称IDE)开发程序时,在应用程序中调用了一个第三方的库,编译后没有任何 warning 调用第三方库的函数示例代码如 程序清单 1.1所示。 程序清单 1.1 示例代码 #include <stdio.h> void clientShare(void); int main (int argc, char **argv) { clientShare(); ...
找不到符号 can not find symbol:xxx 分析之一(误操作输入错误函数名称)
找不到符号 can not find symbol:xxx 分析之一(误操作输入错误函数名称) Q:使用RealEvo-IDE(以下简称IDE)开发程序时,误操作输入错误的函数名称时,编译器不会报错,输入错误的函数名示例代码如程序清单 1.1所示。 程序清单 1.1 示例代码 #include <stdio.h> int main (int argc, char **argv) { print("Hello World!\n"); return (0); } 控制台输出编译结果如 图 ...
Qt5 运行程序出现 can not find symbol : semop 问题
Q:Qt5 运行程序出现 can not find symbol : semop 问题怎么解决? 如果出现以下问题,可能是因为没有加载 xinput.ko 驱动。 首先查看 xinput.ko、xsiipc.ko 这两个模块有没有加载,这两个模块在部署 Qt 库的时候会同 startup.sh 等脚本一同部署至目标机,并会写入到 startup.sh 脚本自动加载(自动加载需要重启系统); 1、查看系统是否部署过 Base 2、通过 lsmod 查看是否加载了上述模块 ...
T3 高精度时钟出现负数问题解决方案
问:T3 高精度时钟出现负数问题解决方案 1、问题描述 问题现象主要表现为连续获取两次高精度时钟,时间差为负数。即后一次获取的时间小于前一次。现象出现随机性较高,属于偶发事件。连续多次获取可复现此问题。后一次出现时间约比前一次少 1ms 左右,即一个 tick 值。 答: 基本解决思路就是使用锁使得获取时刻无法出现在更新tick操作和清中断操作中间。但由于更新 tick 操作和获取操作都在 base ...
Next page