1

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

我的程序崩溃了,核心文件显示崩溃是由于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);**
4

3 回答 3

1

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

  1. 看看您是否可以注释掉(或#ifdef)程序的某些部分,以及问题是否消失。如果是这样,那么您可以关闭坏部分
  2. 在调试器中运行您的程序。
  3. 与其他人一起进行代码审查 - 这通常会导致发现多个问题(通常在我的代码中有效)。

我希望这个对你有用。请添加更多详细信息,我会检查这个问题,看看我是否可以帮助你。

于 2009-12-04T13:32:29.533 回答
0

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

于 2009-12-04T15:09:49.837 回答
0

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

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

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

于 2021-08-03T13:11:55.437 回答