SCO UNIX 到 RED HAT LINUX的程序移植

SCO UNIX RED HAT LINUX 的程序移植
 
最近一个项目要求把一个原先运行在 SCO UNIX 操作系统的柜面系统移植到 Red Hat Linux AS 3 平台上。现在好像有一个趋势,金融行业的的原先运行在 SCO 下的系统都准备迁移到 LINUX 下。
   下面简要整理一下,迁移过程中的一些心得体会。
 
一、 SCO cc LINUX gcc 的一些差别
总的来说, linux gcc 编译器相对 sco 下的 cc 要严格许多。通过这次移植发现 SCO cc 对程序的要求实在不怎么严谨。举个例子,比如 strcpy() 函数应该是 2 个函数,如果你给他 3 个参数,编译也能通过。还有,如果一个函数的参数应该是传值,你给它传一个地址, cc 也不会报错。
 SCO cc linux gcc 在有关空指针的处理上的差别是最明显的。比如, strcpy(),strncpy(),strcmp(),strncmp(),fclose() 。在 SCO 上,如果参数有一个是空指针,程序不会 core ,但在 LINUX 下,这些函数只要有一个是空指针,程序运行过程中就会 core 。在移植过程中,我们发现只要程序运行过程中出现 core ,十有八九是因为空指针的问题。
因此,移植的第一步,我么就对上述常见的字符串操作函数,做了一层封装,然后用封装过的函数来全局替换原来的函数。
 
二、 gdb 的使用
由于以前没在 liunx 下写过程序,对 gdb 调试工具也没有使用过。这次移植还学会了 gdb 的一些基本调试步骤。
gdb  可执行程序
设置断点
运行程序
端点后重新运行程序
执行下一条语句
进入到函数体内调试(相对于 n
attach PID 调试正在运行的程序
 
三、关于 core 文件
SCO 下,一般程序 core 时,都会在可执行目录下生成一个 core 文件,我们可以使用 dbx 来查看程序的什么地方出现了 core
移植到 LINUX 下,一开始,程序 core 时,怎么都没有生成 core 文件。后来,才发现,需要人为设定 core 文件所允许的最大值。如果没有设定,默认是 0 ,也就不会生成 core 文件。
设定方法如下:
执行 ulimit -c 102400 ,可以把这个命令放在用户的登录 shell 里面,这样不用每次登录时重新设置了。
 
使用 gdb 可执行程序名 core 文件名”可以查看大致在什么地方程序出现 core
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值