首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从purify的仪表化中排除共享库?

如何从purify的仪表化中排除共享库?
EN

Stack Overflow用户
提问于 2012-11-10 19:06:19
回答 1查看 1.8K关注 0票数 2

对链接到Oracle的libclntsh的C代码进行指令插入会导致在运行生成的程序时崩溃。程序以“非法指令”信号终止。

该bug至少存在于Oracle 11g和Purify的某些版本中。

这是一个known bug and IBM has published a workaround。不幸的是,这种变通方法在我的工作环境中没有帮助。

我正在使用

代码语言:javascript
复制
$ purify -version
Version 7.0.1.0-002.U 120210 Solaris SPARC

在Sun SPARC硬件上的Solaris 10下。我使用Sun CC 11编译C源代码。

就像在变通方法中描述的那样,我尝试将libclntsh从仪表化中排除,如下所示:

代码语言:javascript
复制
$ purify -verbose -cache-dir=purify_cache -always-use-cache-dir \
     -selective -exclude-libs=/oracle/app/rdbms/ora11203/lib/libclntsh.so.11.1 \
     cc -o myprogram ... -lclntsh

这不起作用。Purify只是说它正在检测libclntsh.so.11.1,并且我确实得到了一个相应的_pp3_文件,而不是一个_pp0_文件。

我尝试了exclude模式的变体:

代码语言:javascript
复制
-exclude-libs=libclntsh.so.11.1
-exclude-libs=clntsh.so

百无所成。

能够排除libclntsh也会大大缩短工具化时间。在这台SPARC机器上,仪表化libclntsh.so需要几分钟时间。

看一下解决方法,它只提到了HPUX -但我希望它也适用于Solaris ...不知何故。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-26 03:43:17

对于该版本的Purify ( Solaris SPARC上的7.0.1-ish),以下选项语法有效:

代码语言:javascript
复制
$ purify -cache-dir=purify_cache -always-use-cache-dir \
    -enable-exclude -exclude-libs=libclntsh.so.11.1 cc ...

然后Purify仍然打印一些关于仪表化libclntsh.so.11.1的东西,但是它完成的速度更快,并且创建了一个_p0_文件:

代码语言:javascript
复制
$ find purify_cache -name '*_pp0_*'
purify_cache/.../lib/libclntsh.so.11.1_pure_pp0_pc0_0_0_1009171813_510_64

优势:

如果您只需要对代码的其他部分进行仪表化,

  • exclude会产生更快的仪表化时间,
  • 可以使用Purify和Oracle库

绕过非法的指令崩溃

缺点:

不再检测排除的库中的

  • 内存错误(因为这些库函数的输入数据不正确)。

Purify在提供给-exclude-libs选项的值中使用:作为分隔符,也就是说,您可以为排除指定多个库(例如-exclude-libs=foo.so:bar.so)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13321472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档