故障排查
error:cannot find -lvpmpdm
Q:SylixOS 系统编译 App 时报错,error:cannot find -lvpmpdm SylixOS 中所有的程序都是依赖基础的内核库编译的,即依赖 Base 库,-lvpmpdm 是 Base 生成的库,出现此问题的原因是依赖的 Base 没有编译;先编译 Base 可解决。
IDE 中对程序崩溃有没有记录出错现场trace?
问:IDE中对程序崩溃有没有记录出错现场trace? 答:暂无! RealEvo-IDE 支持死锁检测,旗舰版 IDE 设备管理中可进行查看。如线程出现死锁状态,在 Thread Pending 页面中呈现红色状态,并以黄色标记因等待信号量被阻塞的线程。 或者在终端中使用 cdump 指令显示或保存崩溃转储消息。 该命令有3种用法,不加参数用来显示崩溃消息 参数-s:将崩溃转储消息保存到/var/log/cdump 参数-c:显示或保存后清除消息
CC1PLUS.EXE: OUT OF MEMORY ALLOCATING 65536 BYTES
问:CC1PLUS.EXE: OUT OF MEMORY ALLOCATING 65536 BYTES 出现此问题是因为 函数内容太长,编译的时候报内存不足。 错误现象: CC1PLUS.EXE: OUT OF MEMORY ALLOCATING 65536 BYTES 答:参考链接: https://sysprogs.com/w/forums/topic/cc1plus-exe-out-of-memory-allocating-65536-bytes/ 具体操作,执行以下命令: ...
An error occurred.See error log for more details.
问: 如何解决 IDE 在编译点选工程的时候出现 An error occurred.See error log for more details. 的问题。 解决方式: 删除工作目录下的 .metadata 后重新打开 IDE 编译 可以正常使用。 参考文章:IDE 工程出现在属性页面不能修改参数
SylixOS 下 pthread_create 创建线程满问题
内核版本: 1.10.9客户程序应用场景中在执行完一次循环后会再次创建任务,执行数次后报了 "there is no ID to build a thread." 错误,搜索对应的代码 申请不到TCB控制块了。 查看 /proc/kernel/objects 记录的信息发现500个任务控制块已经用完了。 查看__threadDelete() 实现发现POSIX接口创建的线程需要指定相应的属性在任务执行完后才能释放任务控制块 ...
C++编译选项 -fno-rtti 和 -frtti 浅析
问题现象: 客户在移植 C++ 程序的时候遇到了一个符号找不到的问题: 问题描述: 这个类定义在一个静态库中,静态库正常编译,在 Linux 下正常。 查看符号表确实没有这个符号,于是对比了一下编译选项,IDE 下默认是 -fno-exceptions -fno-rtti,打开 -frtti 选项后编译使用正常,对比两次的符号表。 (Makefile 中修改 C++ 编译选项) 打开 -frtti ...
僵死状态进程如何处理
Q: 子进程执行完或kill后,处于僵死状态(zombie),如何将其终结? A: 如果子进程退出后,通过ps命令仍能看到其存在,并且它的状态变成Z,则此子进程处于僵死状态,那如何将其正常终止呢? 在 SylixOS 中可以通过调用 wait 或者 waitpid,这样父进程可以获取子进程的退出状态,子进程也能正常终止。 即在程序中增加如下代码: child_pid = wait (&iStatLoc) 或者 waitpid(child_pid, &iStatLoc, 0);
Debug 调试 app 失败后 apps 链接异常
Q:当 /apps/app(app 为可执行文件),在 Debug 调试 app 时失败,导致 apps 链接异常问题,如下图所示: 该问题在新的 3.9.11 及以上的 IDE 版本中已经解决。
内存泄漏调试命令的使用
Q:内存泄漏调试命令的如何使用? 内存泄漏跟踪器涉及如下三条命令: 1、启动内存泄漏跟踪器 命令语法格式: leakchkstart max_trace_node pid 说明: 该命令用来启动内存泄漏跟踪器,参数是最大跟踪节点数、进程id。 最大跟踪节点数,也就是说如果泄漏记录数超过这个数就不记录了 进程 ID(> 0为指定进程,== 0为内核, < 0 为所有) 返回值: 执行成功返回 0,失败返回非 0 值。 备注: 最大跟踪节点数最小为 1024。 进程 ID ...
编译器优化导致的问题排故
Q:编译器优化导致的问题排查方法 当 release 版本功能异常,而 debug 版本功能正常,很可能是编译器优化导致的问题。 1、首先根据代码功能大致缩小问题范围,然后可以借助 #pragma GCC optimize("O0") 这个宏来逐步注释缩小范围。 当然也可通过反汇编直接根据分析。 2、也可以通过 __attribute__((optimize("O0"))) 来禁止编译器对函数优化,如 static void rdGmacReg() ...
SylixOS 动态库更新 version 不一致的问题
Q:SylixOS 动态库更新 version 不一致的问题 首先 SylixOS 是允许多个进程对共享库文件进行代码段共享的(默认是共享打开的,可以使用 dlconfig share dis 命令进行关闭),代码段共享会出现一个问题:当 A 进程 使用一个 share.so 共享库的时候,B 进程也使用 该 share.so 的共享库,share.so 共享库因为 B 的原因需要修改,修改后,更新share.so文件,然后重启 B 进程,一般来说会出现错误,错误如下: ...