-
ORACLELINUX下安装oracle11gxe后连接数据库报ora-12705错误如何解决
2015-10-15 03:17:18报了ora-12705的错误信息 根据网上提供的信息实践了很多方法,修改设置了字符集配置,问题依旧 目前本机的字符集如下图所示:  不... -
linux下splint检测C语言代码质量
2017-09-08 15:59:30在linux下并没有pclint,可以使用splint代替。 splint使用 一.splint介绍 splint是一个静态检查C语言程序安全弱点和编写错误的工具。splint会进行多种常规检查,包括未使 用的变量,类型不一致,使用未定义变量,无法...在linux下并没有pclint,可以使用splint代替。
splint使用
一.splint介绍
splint是一个静态检查C语言程序安全弱点和编写错误的工具。splint会进行多种常规检查,包括未使 用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误。同 时通过在源码中添加注记给出的附加信息,使其可以进行功能更加强大的检查。而注记,则是对文件中的函数、变 量、参数以及类型进行假定的一种的程式化的注释。
二.splint的安装
下载地址:http://www.splint.org/downloads/splint-3.1.2.src.tgz
文件: splint-3.1.2-src.tar.gz
大小: 2272KB
下载: 下载源码包安装:
tar zxvf splint-3.1.2.src.tgz
cd splint-3.1.2
mkdir /usr/local/splint
./configure –prefix=/usr/local/splint
make install
vi ~/.bashrc
添加:
export LARCH_PATH=/usr/local/splint/share/splint/lib
export LCLIMPORTDIR=/usr/local/splint/share/splint/importsource ~/.bashrc
export PATH=/usr/local/splint/bin/splint:$PATH
三.splint的使用
1.空引用错误在引用没有指向任何内存地址的指针时,会导致这种错误.也就是使用了一个没有赋值的指针.
splint支持一种特别的注释.这种注释写在C程序代码中,用于对程序进行特殊说明.
如下面这段程序.使用了/@null@/进行了说明,表示说明*s的值可能会是NULL.//null.c
char firstChar1 (/@null@/ char *s)
{
return *s;
}char firstChar2 (/@null@/ char *s)
{
if (s ==NULL) return ‘\0’;
return *s;
}
//END使用splint扫描这个程序时,会输出:
splint null.c
Splint 3.1.1 — 28 Apr 2005
null.c: (in function firstChar1)
null.c:3:11: Dereference of possibly null pointer s: *s
null.c:1:35: Storage s may become null
Finished checking — 1 code warning found
由于firstChar1和firstChar2都使用了null说明,表示指针s可能是个NULL值.
所以,splint会对s值的使用情况进行检查.因为firstChar2函数中,对s的值进行
了NULL的判断.所以,没有对firstChar2函数的指针s输出警告信息.2.未定义的变量错误
C语言中,要求先定义变量,而后才可使用.所以,当使用一个没有定义的变量时,编译就会出错.
如下例,使用/@in@/说明的变量,表示必须进行定义.使用/@out@/说明的变量,表示在 执行过此函数后,这个变量就进行了定义.// usedef.c
extern void setVal (/@out@/ int *x);
extern int getVal (/@in@/ int *x);
extern int mysteryVal (int *x);
int dumbfunc (/@out@/ int *x, int i)
{
if (i > 3) return *x;
else if (i > 1)
return getVal (x);
else if (i == 0)
return mysteryVal (x);
else
{
setVal (x);
return *x;
}
}
// END使用splint检查usedef.c
$ splint usedef.c
Splint 3.1.1 — 28 Apr 2005usedef.c: (in function dumbfunc)
usedef.c:7:19: Value *x used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)
usedef.c:9:18: Passed storage x not completely defined (*x is undefined):
getVal (x)
Storage derivable from a parameter, return value or global is not defined.
Use /@out@/ to denote passed or returned storage which need not be defined.
(Use -compdef to inhibit warning)
usedef.c:11:22: Passed storage x not completely defined (*x is undefined):
mysteryVal (x)Finished checking — 3 code warnings
//错误原因: 由于程序中没有对x进行定义,所以报未定义错误.但setVal()使用了/@out@/ 说明,所以
在setVal(x);和return x;中,没有报未定义错误.3.类型错误
C语言中的数据类型较多,各个之间有些细微差别.splint也可以对变量类型进行检查.
示例1:
//bool.c
int f (int i, char *s,bool b1, bool b2)
{
if (i = 3) return b1;
if (!i || s) return i;
if (s) return 7;
if (b1 == b2)
return 3;
return 2;
}
//END使用splint进行检查:
$ splint bool.c
Splint 3.1.1 — 28 Apr 2005bool.c: (in function f)
bool.c:4:5: Test expression for if is assignment expression: i = 3
The condition test is an assignment expression. Probably, you mean to use ==
instead of =. If an assignment is intended, add an extra parentheses nesting
(e.g., if ((a = b)) …) to suppress this message. (Use -predassign to
inhibit warning)
// 错误原因: if语句中的条件表达式是一个赋值语句.
bool.c:4:5: Test expression for if not boolean, type int: i = 3
Test expression type is not boolean or int. (Use -predboolint to inhibit
warning)
// 错误原因: if语句中的条件表达式的返回值,不是布尔型,而是整型.
bool.c:4:8: Return value type bool does not match declared type int: b1
Types are incompatible. (Use -type to inhibit warning)
// 错误原因: 返回值是布尔型,而不是整型.
bool.c:5:6: Operand of ! is non-boolean (int): !i
The operand of a boolean operator is not a boolean. Use +ptrnegate to allow !
to be used on pointers. (Use -boolops to inhibit warning)
// 错误原因: “!”操作符的操作数不是布尔型,而是整型i.
bool.c:5:11: Right operand of || is non-boolean (char *): !i || s
// 错误原因: “||”操作符的右操作数不是布尔型,而是字符指针.
bool.c:7:5: Use of == with boolean variables (risks inconsistency because of
multiple true values): b1 == b2
Two bool values are compared directly using a C primitive. This may produce
unexpected results since all non-zero values are considered true, so
different true values may not be equal. The file bool.h (included in
splint/lib) provides bool_equal for safe bool comparisons. (Use -boolcompare
to inhibit warning)
// 错误原因: 使用”==”对两个布尔型进行比较.应该使用”&&”.Finished checking — 6 code warnings
示例2:
//malloc1.c
include -
Linux下chown命令的语法和实例
2016-01-16 16:56:18-c显示更改的部分的信息 -f忽略错误信息 -h修复符号链接语法
Locate[参数][待查找样式]
参数
必要参数:
-c显示更改的部分的信息
-f忽略错误信息
-h修复符号链接
-R处理指定目录以及其子目录下的所有文件
-v显示详细的处理信息
-deference作用于符号链接的指向,而不是链接文件本身
选择参数:
--reference=把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组
--from=只有当前用户和群组跟指定的用户和群组相同时才进行改变
--help显示帮助信息
--version显示版本信息
实例
改变拥有者和群组
[root@localhosttest6]#ll
---xr--r--1rootusers30210811-3008:39linklog.log
---xr--r--1rootusers30210811-3008:39log2012.log
-rw-r--r--1rootusers6111-3008:39log2013.log
-rw-r--r--1rootusers011-3008:39log2014.log
-rw-r--r--1rootusers011-3008:39log2015.log
-rw-r--r--1rootusers011-3008:39log2016.log
-rw-r--r--1rootusers011-3008:39log2017.log
[root@localhosttest6]#chownmail:maillog2012.log
[root@localhosttest6]#ll
---xr--r--1rootusers30210811-3008:39linklog.log
---xr--r--1mailmail30210811-3008:39log2012.log
-rw-r--r--1rootusers6111-3008:39log2013.log
-rw-r--r--1rootusers011-3008:39log2014.log
-rw-r--r--1rootusers011-3008:39log2015.log
-rw-r--r--1rootusers011-3008:39log2016.log
-rw-r--r--1rootusers011-3008:39log2017.log
Linux相关学习网站
http://www.unix-cd.com/ -
linux下使用core文件对程序进行debug
2019-01-13 21:16:50一....随着学习的深入,其实core文件在linux下是一种ELF格式的文件,有关于什么是ELF格式大家可以自行查阅相关的内容。 实际上core文件就是可执行文件执行时的映像,也可以叫做内存的快照。保存...一.简单介绍什么是core文件以及他的作用
在linux编写的C/C++可执行程序往往会出现如下图的错误,一个core dumped。由于刚开始对linux的认识不足,就忽略了这样一个重要的调试信息。
随着学习的深入,其实core文件在linux下是一种ELF格式的文件,有关于什么是ELF格式大家可以自行查阅相关的内容。
实际上core文件就是可执行文件执行时的映像,也可以叫做内存的快照。保存下来可执行程序在执行过程的点点滴滴。除了内存信息之外,还有些关键的程序运行状态也会同时dump下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core文件对于程序员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而core文件可以再现程序出错时的情景。结合gdb的调试命令可以对core文件进行调试。二.如何保存core文件。
在linux下,默认的情况是core dumped并不产生core文件,因为此项功能默认是被关闭。使用ulimit -c
命令可以查看是否启动core文件。执行上述命令后会有如下的三种可能分别代表着不同的意义:
综上,只需要使用ulimit -c unlimited就可打开core文件了,注意需要在root用户下执行此命令,否则权限不足执行失败。而且这样的设置是一次性的,下次重启后就需要重新设置。一劳永逸的办法就是在配置文件写入上述的设置。此步设置好之后,当你的可执行程序再次出现core dumped的情况时,就会在当前目录下出现一个core文件。如下:1.0 不能产生core文件 2.unlimited 产生的core文件没有字节限制 3.一个确定数字 当超过这个字节数时不能产生core文件,小于等于时可以产生core文件
三.设置core文件的生成路径以及core文件的名称格式。
(1)设置进程的pid作为core文件扩展名,这样的好处是当core文有很多时,可以区分是哪一个可执行程序产生的core文件,方便查找。1:添加pid作为扩展名,生成的core文件名称为core.pid 0:不添加pid作为扩展名,生成的core文件名称为core //修改方法 1.修改 /proc/sys/kernel/core_uses_pid 文件内容为: 1 2.在终端执行如下两条命令的任意一条 echo "1" > /proc/sys/kernel/core_uses_pid sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1
(2)修改core文件的文件格式以及保存路径
执行如下两条命令中的一条即可 1.echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 标识生成的core文件名格式是 core-%e-%p-%t,保存路径为/corefile sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t kernel.core_pattern = /corefile/core-%e-%p-%t
以下是参数列表:
%p - insert pid into filename 添加pid(进程id) %u - insert current uid into filename 添加当前uid(用户id) %g - insert current gid into filename 添加当前gid(用户组id) %s - insert signal that caused the coredump into the filename 添加导致产生core的信号 %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间 %h - insert hostname where the coredump happened into filename 添加主机名 %e - insert coredumping executable name into filename 添加导致产生core的命令名
三.使用core文件进行简单debug。
测试程序一:#include <iostream> using namespace std; int main(){ int *p; *p = 20;//使用野指针 }
对于上述这样的一个小程序很容易定位到错误的源头,但是对于一个成百上千行的代码来说定位一个错误就不容易了尤其是在运行之后发生的bug,但是使用core文件却很容易定位。
调试上述文件生成的core文件:
通过core文件可以清楚的定位到错误的根源,可见core文件的强大之处。
测试程序二:test1.cpp #include <iosreram> using namespace std; int main(){ cout<<(10 / 0)<<endl; return 0; }
使用test1生成的core文件定位错误:
-
linux下安装openssh 及注意点
2019-08-15 09:08:05Rpm 安装openssh ...Sshd -T 查看错误信息 关于Key问题 需要cd /etc/ssh 下都要是root:root Chmod 600 key相关文件 去掉确认本机sshd的配置文件(需要root权限) $ vi /etc/ssh/sshd_config ...Rpm 安装openssh
Rpm -ivh 四个包 后面加 --force --nodeps 忽略依赖
Sshd -T 查看错误信息
关于Key问题
需要cd /etc/ssh
下都要是root:root
Chmod 600 key相关文件
去掉确认本机sshd的配置文件(需要root权限)
$ vi /etc/ssh/sshd_config
找到以下内容,并去掉注释符”#“
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys3. 如果修改了配置文件需要重启sshd服务 (需要root权限)
$ vi /sbin/service sshd restart
查看状态:
systemctl status sshd.service
启动服务:
systemctl start sshd.service
重启服务:
systemctl restart sshd.service
开机自启:
systemctl enable sshd.service
-
linux下安装chrome及忽略‘google-chrome.list.1’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件...
2019-10-19 19:46:491.按下 Ctrl + Alt + t 键盘组合键,启动终端 2.在终端中,输入以下命令: ...如果返回“地址解析错误”等信息,可以百度搜索其他提供 Chrome 下载的源,用其地址替换掉命令中的地址。) xzm@ubuntu... -
linux系统下rpm包的安装、删除、效验、查询
2013-03-07 22:09:50安装软件包 rpm -i 包全名 删除 rpm -e name(不是包名) 参数 -ivh 获得一个详细的安装进程 ...--replacepkgs这样 RPM 将忽略该错误信息 -vih --replacepkgs -q name :查询 -qa查询所有已安装的 -
linux服务器搭建之路12-修改文件/文件夹属性和权限
2018-12-03 15:46:02文章目录1. 拥有者信息2. 属性2.1 文件类型2.2 权限2.3 权限修改 通过ls -l 目录/文件可以查看其属性和权限,例如查看当前文件夹下的所有文件属性 ls -al 1. 拥有者信息 ...-f 忽略错误信息 -h... -
Linux chown命令
2020-08-05 16:17:55语法: ... -f : 忽略错误信息 -h :修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的所有文件 --help : 显示辅助说明 --version : 显示版本 实例: 将文件 file1.t.. -
linux权限操作
2017-06-13 10:35:171 chmod a+rwx 文件,给文件赋予权限,包括权限的增加 2 chown命令将修改文件的拥有者。 chown [选项] 【所有者】:【群组】 文件 -R 处理指定目录以及其子目录下... -f 忽略错误信息 -h 修复符号链接 -
Linux软件包管理
2017-02-03 13:56:131.二进制包管理 1)rpm 安装:rpm -ivh 安装包...--replacefiles 忽略文件错误信息 --nodeps 忽略依赖关系 卸载:rpm -e 软件名 升级:rpm -Uvh 软件名 2)yum 自动解决依赖关系 安装:yum install -
linux更改用户权限
2019-12-24 18:37:15chown [-cfhvR] [--help] [--version] user[:group] file... 参数 : user : 新的文件拥有者...-f : 忽略错误信息 -h :修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的所有文件 --help : ... -
linux--chown
2017-06-23 15:56:40命令功能: 改变文件或者文件夹的用户和组 ... -f 忽略错误信息 -h 修复符号链接 -R 处理指定目录以及其子目录下的所有文件 -v 显示详细的处理信息 -deference 作用于符号链接的指向,而不是链接文件本身 实例 -
Linux命令学习:chown
2017-10-09 16:17:00功能 ...-f 忽略错误信息 -h 只对符号链接文件修改 -R 递归处理指定目录下的所有文件及子目录 -v 显示指令执行过程 --help 帮助 --version 显示版本信息 参数 "用户:组": 指定所有者和所属用户组。... -
Linux chown命令:给资源绑定用户权限
2020-04-20 11:52:59语法 chown [-cfhvR] [--help] [--version] user[:group] file... 参数: user : 新的文件拥有者的使用者... -f : 忽略错误信息 -h :修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的... -
linux命令之------Chown命令
2019-07-24 11:01:00Chown命令 1) 作用:将指定文件的拥有者改为指定的用户或组。... 3)-f:忽略错误信息。 4)-h:修复符号链接。 5)-v:显示详细的处理信息。 6)-R:处理指定目录以及其子目录下的所有文件。... -
linux文件权限命令--chown
2014-03-01 18:32:05chown 将指定文件的拥有者改为指定的用户或组,普通用户不能将自己的文件改变成其他的拥有者,操作权限一般为管理员。... -f 忽略错误信息 -h 修复符号链接 -R 处理指定目录以及其子目录下的所有文件 ... -
linux c编程:make Makefile工具的使用
2014-04-09 13:48:27最近在linux平台上写C代码,学习了make工具,在此做个小...-i 忽略命令执行返回的出错信息,继续向下执行,如果没有的话碰到错误就停了 -s 沉默模式, 在执行前不输出相应的命令行信息 -r 禁止build-in规则 -n 非执行 -
linux 如何删除文件夹下面的文件和文件夹,只保留两个文件
2017-02-01 20:28:00# 删除目录下那两个文件之外...# 删除所有空目录(非空目录不会被删除,但是会出错误信息,可以忽略) find dir/ -type d | xargs rmdir -p 使用bash shell删除目录中的特定文件的3种方法_linux s... -
入门学习Linux常用必会60个命令实例详解doc/txt
2011-06-09 00:08:45本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍Linux下的安装和登录命令。 immortality按:请用ctrl+f在本页中查找某一部分的内容或某一命令的用法。 ----------------------------------------------------... -
XP下硬盘安装centos
2012-12-28 22:56:24为了学习linux,先在机器上安装了VMware6.5并安装了redhat9.0,不知道为何原因,安装redhat过程中出现异常,忽略异常后虽然接下来的安装很顺利,但是心里很担心后面使用过程中会出现这样那样的莫名错误,果然在顺利... -
\t\t批处理加密方法总结
2012-09-03 10:54:03批处理加密方法总结 1.编写能在LINUX与WINDOWS同时运行的BAT脚本 2.... 因为BAT有一个特性,他会忽略一些简单的错误,(也就是错误的命令他只会返回一个错误信息,并不 退出BAT脚本,而是会执行下一个命令 -
批处理加密,免杀方法总结 【转】
2010-10-26 14:09:00因为BAT有一个特性,他会忽略一些简单的错误,(也就是错误的命令他只会返回一个错误信息,并不 退出BAT脚本,而是会执行下一个命令,直到全部命令执行完毕,不管对错!) 利用个特性我们就可以在脚本前面写上LINUX的shell脚 -
解决package jdk1.8-2000:1.8.0_171-fcs.x86_64 is already installed问题
2018-10-15 19:57:04网上有帖子说可以使用--replacepkgs命令忽略该错误信息,但楼主试了不太可靠。出现这种问题的原因在于,用户在安装好JDK之后,使用rm -rf命令将JDK的安装目录删除掉了,但实际上并没有删除干净。此时有一个简单的...
-
2021-02-27
-
MySQL 高可用(DRBD + heartbeat)
-
netty-002.rar
-
TCP/IP协议模型
-
2020全国商标注册量TOP 10的代理机构都拥有自己的互联网平台
-
2020年注册会计师全国统一考试大纲-专业阶段.pdf
-
Bootstrap Table 官方文档
-
springmvc拦截器原理
-
Python教程:shelve模块保存变量
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
MySQL之mysqldump的使用
-
物联网基础篇:快速玩转MQTT
-
idea中设置多个类文件同时打开并且不重叠隐藏,分层显示
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
离线人脸对比产品gj
-
FunnyClips.zip
-
项目管理工具与方法
-
安川机器人指令 一览.pdf
-
2021-02-27
-
基于Qt的LibVLC开发教程