a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 102|回复: 0

[红旗认证] 红旗认证辅导:SCOUNIX到Linux操作系统的程序移植问题

[复制链接]
发表于 2012-8-4 12:16:06 | 显示全部楼层 |阅读模式
要求把一个原先运行在SCO UNIX操作系统的柜面系统移植到Red Hat Linux AS平台上。此刻仿佛有一个趋向,金融行业的的原先运行在SCO下的系统都筹备迁移到LINUX下。   下面简要清算一下,迁移过程中的一些心得体味。& s5 s4 Z, ~" A8 u
一、SCO 的cc 与LINUX 的gcc的一些分歧
8 D1 A) a- U; ~% f9 r% U' ~  总的来说,linux的gcc编译器相对sco下的cc要严酷良多。经由过程此次移植发现SCO的cc对轨范的要求其实不怎么严谨。举个例子,好比strcpy()函数应该是2个函数,如不美观你给他3个参数,编译也能经由过程。还有,如不美观一个函数的参数应该是传值,你给它传一个地址,cc也不会报错。0 h1 R7 L9 Q0 k* o) P6 ?' e+ a9 ~
  SCO的cc与linux的gcc在有关空指针的措置上的分歧是最较着的。好比,strcpy(),strncpy(),strcmp(),strncmp(),fclose()。在SCO上,如不美观参数有一个是空指针,轨范不会core,但在LINUX下,这些函数只要有一个是空指针,轨范运行过程中就会core。在移植过程中,我们发现只要轨范运行过程中呈现core,十有八九是因为空指针的问题。  R% K4 r" F, ^6 j- u4 X  C
  是以,移植的第一步,我么就对上述常见的字符串操作函数,做了一层封装,然后用封装过的函数来全局替代原本的函数。
$ U, d* x" }- l/ R二、gdb的使用 6 N" d1 P* ~6 i7 x6 F: G, r6 P
  因为以前没在liunx下写过轨范,对gdb调试工具也没有使用过。此次移植还学会了gdb的一些根基调试轨范。
) K" E5 D7 f0 e0 W  gdb 可执行轨范& A; ~8 Z: H/ e  M
  b 设置断点7 O# U  F. c: j9 Z1 _
  r 运行轨范
9 d, x1 e' T& o9 a) i  c 端点后从头运行轨范' d- X- {! f" @6 ]9 |, n
  n 执行下一条语句7 n. W% d, T8 m% t! ~
  s 进入到函数体内调试(相对于n)/ V1 y* L' K& Q# b5 `4 u7 |" Q- x1 T
  attach PID 调试正在运行的轨范( z3 x# R! [* w* T$ g5 G# d
三、关于core文件
& _8 h# W* A! `/ v+ Q  在SCO下,一般轨范core时,城市在可执行目录下生成一个core文件,我们可以使用dbx 来查观点式的什么处所呈现了core。
2 h& ]; Y- U+ J$ ~3 Q. h  移植到LINUX下,一路头,轨范core时,怎么都没有生成core文件。后来,才发现,需要酬报设定core文件所许可的最大值。如不美观没有设定,默认是0,也就不会生成core文件。) K% q  g% f9 W- k8 H
  设定体例如下:
* U4 y& I# u' u  执行 ulimit -c 102400,可以把这个呼吁放在用户的登录shell琅缦沔,这样不用每次登录时从头设置了。8 p7 i- n( Q1 f' t; r
  使用“gdb 可执行轨范名 core文件名”可以查看大致在什么处所轨范呈现core。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 06:08 , Processed in 0.192378 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表