让我们说明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);**
答案 0 :(得分:0)
您遇到的问题很可能是C代码中的某种指针错误/内存分配错误。这些东西永远不容易找到。你可能会做的一些事情 试试:
我希望这会有所帮助。请添加更多详细信息,我将回答这个问题,看看我是否可以帮助您。
答案 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 可以帮助您进行调试。