问题描述: 

  在一个客户现场搭建环境时,遇到了一个棘手的问题,C代码编译通过后,无法正常运行,启动会出现“coredump”错误。

  运行环境为新搭建的AIX6.1,数据库为Oracle11.2.0.2.0。

  将平台的C代码部署到用户下之后,makefile编译成功,之后启动程序,发现无法正常运行,启动会出现“coredump”错误。

问题排查:

  根据dbx工具定位的代码位置,检查代码并未发现内存泄漏、越界等bug;到这就卡住了。

  为了确定是否为代码的问题,新创建test.ec程序如下:

 #include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "sqlca.h" int main(int argc, char *argv[])
{ int iRet ;
int ch;
char ll[];
char hh[];
char tt[];
char *p=NULL; memset(ll,0x00,sizeof(ll));
memset(hh,0x00,sizeof(hh));
memset(tt,0x00,sizeof(tt)); while((ch=getopt(argc,argv,"l:h:t:")) != -)
{
switch (ch) {
case 'l':
strcpy(ll,optarg);
printf("ll=[%s]\n",ll);
break;
case 'h':
strcpy(hh,optarg);
printf("hh=[%s]\n",hh);
break;
case 't':
strcpy(tt,optarg);
printf("tt=[%s]\n",tt);
break;
case '?':
break;
}
}
printf("获取入参成功!\n");
p=strstr(tt,"b");
printf("p=[%s]\n",p);
return ;
}

  Makefile如下:

 all: test

 test:test.ec
proc line=yes def_sqlcode=yes code=ansi_c ltype=short parse=partial proc mode=ansi define=__64BIT__ define=_IBM_C define=_LONG_LONG "include=$(ORACLE_HOME)/precomp/public" define=_WITH_ORACLE define=_WITH_ORACLE_PROC_PARSE iname=test.ec
xlc -U_STR_ -q64 -qcpluscmt -g -brtl -qformat -bhalt: -DAIX -DDEBUG -I$(ORACLE_HOME)/precomp/public -D_WITH_ORACLE -o test test.c -L$(ORACLE_HOME)/lib -lclntsh

  编译过程未出错,而在执行的时候,直接报错:

          

  之后根据dbx调试,发现程序在执行getopt函数的时候coredump的:

          

  设置断点调试:    

          

  而在断点调试过程中,发现getopt函数本身并不会导致程序溢出,网上查了一下,有人说是因为包含了多余的头文件导致,故将#include <string.h >代码注释掉,发现可以执行,但是strstr函数执行会coredump,所以问题不在这里。

  

  此时,基本可以断定问题不在代码上,应该是环境的问题,因此又挨个注释Makefile中的链接动态库发现,将oracle动态库libclntsh.so的链接去掉后,可以执行成功:

          

  故初步判断是oracle动态库与当前系统不兼容导致。

  对链接动态库进行测试,发现不链接libclntsh.so时,程序可运行,否则会出现coredump。

  将test程序移植到另外一台服务器A上测试,发现可以正常运行,推测服务器环境有问题。对比2台服务器,差别如下:

    1、操作系统版本偏低(当前服务器为6100-05-01-1016,A服务器上的版本为6100-06-08-1216)。

    2、VAC版本偏低(当前服务器为11.1.0.0,A服务器上的版本为11.1.0.7)。

    3、数据库版本偏低(当前服务器为11.2.0.2.0,A服务器上的版本为11.2.0.3.0)。

问题解决:

首先对xlc编译器升级,打补丁到11.1.0.7版本,发现程序不再coredump。

确定问题为xlc编译器版本过低,与oracle动态库不兼容导致。

问题:程序编译通过,但是执行时报错:coredump的更多相关文章

  1. PyQt程序执行时报错:AttributeError: 'winTest' object has no attribute 'setCentralWidget'的解决方法

    用QtDesigner设计了一个UI界面,保存在文件Ui_wintest.ui中,界面中使用了MainWindow窗口,窗口名字也叫MainWindow,用PyUIC将其转换成了 Ui_wintest ...

  2. 高版本 MySQL 导出的脚本到低版本 MySQL 中执行时报错

    导入 MySQL 脚本时报错:[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'低版本还不支持 utfmb4 这个字符集 解决方法:将 sql 脚 ...

  3. Android项目执行时报错NoclassDefFoundError

    导Android项目时碰到个头疼的NoclassDefFoundError. 项目导入之后是没有报错的.可是执行就报这个错误 java.lang.NoClassDefFoundError: andro ...

  4. C语言执行时报错“表达式必须是可修改的左值,无法从“const char [3]”转换为“char [120]” ”,原因:字符串不能直接赋值

    解决该问题的方法:使用strcpy函数进行字符串拷贝   原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string ...

  5. pyinstaller打出的EXE包执行时报错“failed to excute ”信息

    我的程序是selenium自动化脚本,打包时执行的是 Python pyinstaller -F --onefile -w  XXX.py 这样打出的包执行后提示“failed to excute s ...

  6. mac Robotframework执行时报错Robot Framework installation not found.

    虽然已经装了,但一直报错 ,版本是3.1.1 最新版 ➜  ~ pip install robotframework DEPRECATION: Python 2.7 will reach the en ...

  7. jmeter通过ant执行时报错 jmeter.log not found

    原因:权限执行不够,改为root用户即可 :sudo  su 日志报错如下: test: [jmeter] Executing test plan: /home/ec2-user/jmeterProg ...

  8. sql server 作业导出放到另外一台机器执行时报错的解决方法

    SQL Server2008脚本创建作业失败,提示: 引用内容消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行不能将值 NULL 插入列 'owner_sid',表 'm ...

  9. nuget push 程序包到nuget服务器时报错 406 (Not Acceptable)

    1.在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\ ...

随机推荐

  1. unity编辑器扩展_01(在工具栏中创建一个按钮)

    代码: [MenuItem("Tools/Test",false,1)]    static void Test()    {        Debug.Log("tes ...

  2. (数据科学学习手札67)使用Git管理Github仓库

    一.简介 Git是目前使用最广泛的分布式版本控制系统,通过Git可以方便高效地管理掌握工作过程中项目内容文件的更新变化情况,通过Git我们可以以命令行的形式完成对Github上开源仓库的clone,以 ...

  3. window下 局域网内使用mysql,mysql 开启远程访问权限

    一.window 10 开启3306端口 1.按win键选择设置 2.搜索防火墙 3.选择高级设置 3.右键入站规则->新建规则 4.按照提示,规则类型选择端口,应用于tcp,特定本地端口输入3 ...

  4. Python连载35-死锁问题以及解决方式

    一.死锁问题 例子 import threading import time ​ lock_1 = threading.Lock() lock_2 = threading.Lock() ​ def f ...

  5. Jedis操作Redis--Set类型

    /** * Set(集合) * SADD,SCARD,SDIFF,SDIFFSTORE,SINTER,SINTERSTORE,SISMEMBER,SMEMBERS,SMOVE,SPOP,SRANDME ...

  6. Codeforces 948D Perfect Security

    Perfect Security 题意:给你一个A[i]数组, 再给你一个B[i]数组, 现在用选取 B[i] 数组中的一个 去和 A[i] 数组里的一个元素去进行异或操作, B[i]数组的元素只能用 ...

  7. 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板

    链接:https://www.nowcoder.com/acm/contest/141/J来源:牛客网 Eddy has graduated from college. Currently, he i ...

  8. Educational Codeforces Round 69 (Rated for Div. 2)

                                                                                                  A. DIY ...

  9. HDU 1010 temp of the bone 解题报告 (DFS)

    转载大佬的blog,很详细,学到了很多东西 奇偶剪枝:根据题目,dog必须在第t秒到达门口.也就是需要走t-1步.设dog开始的位置为(sx,sy),目标位置为(ex,ey).如果abs(ex-x)+ ...

  10. CSS3 03. 3D变换、坐标系、透视perspective、transformZ、transform-style添加3D效果、backface-visibility元素背面可见、动画animation、@keyfarmes、多列布局

    1.左手坐标系 伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指.食指和中指分别代表X.Y.Z轴的正方向.如下图 CSS中的3D坐标系 CSS ...