开发者

sqlcxt() causes segmentation fault

开发者 https://www.devze.com 2022-12-13 09:40 出处:网络
Lets state the conditions where sqlcxt() can cause segmentation fault, I am woking on unix, using ProC for database connections to Oracle database.

Lets state the conditions where sqlcxt() can cause segmentation fault, I am woking on unix, using ProC for database connections to Oracle database.

My program crashes and the core file shows that the crash is due to the sqlcxt() function

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);**


There is a decent chance that the problem you are having is some sort of pointer-error / memory allocation error in your C code. These things are never easy to find. Some things that you might try:

  1. See if you can comment out (or #ifdef) out sections of your program and if the problem disappears. If so then you can close in on the bad section
  2. Run your program in a debugger.
  3. Do a code review with somebody else - this will often lead to finding more than one problem (Usually works in my code).

I hope that this helps. Please add more details and I will check back on this question and see if I can help you .


It's probably an allocation error in your program. When I got this kind of behaviour it was always my fault. I develop on Solaris/SPARC and Oracle 10g. Once it was a double free (i.e. I freed the same pointer twice) and the second time I had a core in the Oracle part of the program was when I freed a pointer which was not an allocated memory block. If you're on Solaris you can try the libumem allocation library (google it for details) to see if the behaviour change.


A solution that worked for me: Delete the c files created by ProC & make(recompile)

Pro c files(*.pc) are 'compiled'/preprocessed in c files and sometimes when 'compiling' them some errors may occur (in my case it wasn't any more space left) and even if the build succeeds I would get a SIGSEGV signal in sqlcxt libclntsh.so when executing them.

pstack & gdb could help you for debugging if that's not the case.

0

精彩评论

暂无评论...
验证码 换一张
取 消