sqlcxt()导致分段错误

时间:2009-12-04 06:59:20

标签: c oracle unix coredump oracle-pro-c

让我们说明sqlcxt()可能导致分段错误的情况,我在使用ProC进行数据库连接到Oracle数据库时,在unix上工作。

我的程序崩溃,核心文件显示崩溃是由sqlcxt()函数

引起的
A loadobject was found with an unexpected checksum value.
See `help core mismatch' for details, and run `proc -map'
to see what checksum values were expected and found.

...

dbx: warning: Some symbolic information might be incorrect.

...

t@null (l@1) program terminated by signal SEGV

 (no mapping at the fault address)0xffffffffffffffff:     
<bad address 0xffffffffffffffff>
Current function is dbMatchConsortium
  442               **sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);**

3 个答案:

答案 0 :(得分:0)

您遇到的问题很可能是C代码中的某种指针错误/内存分配错误。这些东西永远不容易找到。你可能会做的一些事情 试试:

  1. 看看你是否可以注释掉(或#ifdef)你的程序部分以及问题是否消失。如果是这样,那么你可以关闭坏部分
  2. 在调试器中运行程序。
  3. 与其他人进行代码审查 - 这通常会导致发现多个问题(通常在我的代码中有效)。
  4. 我希望这会有所帮助。请添加更多详细信息,我将回答这个问题,看看我是否可以帮助您。

答案 1 :(得分:0)

这可能是您程序中的分配错误。当我得到这种行为时,这总是我的错。我在Solaris / SPARC和Oracle 10g上开发。一旦它是一个双重自由(即我释放了相同的指针两次),第二次我在程序的Oracle部分有一个核心是当我释放一个不是分配的内存块的指针。 如果您使用的是Solaris,则可以尝试使用libumem分配库(有关详细信息),以查看行为是否发生变化。

答案 2 :(得分:0)

对我有用的解决方案:删除由 ProC 和 make(recompile) 创建的 c 文件

Pro c 文件 (*.pc) 在 c 文件中“编译”/预处理,有时在“编译”它们时可能会出现一些错误(在我的情况下,它没有剩余空间),即使构建成功执行它们时,我会在 sqlcxt libclntsh.so 中得到一个 SIGSEGV 信号。

如果不是这种情况,pstack & gdb 可以帮助您进行调试。