又碰到了令人头疼的段错误,但是这次,虽然最终找到了出自何处,但是还是不明白究竟是为何。

最后将程序简化,贴上来,希望高人能指点一下。

memt.pc:

#include <libxml/parser.h>
#include <libxml/tree.h>
#include <sqlca.h>

int main(int argc,char** argv)
{
    EXEC SQL BEGIN DECLARE SECTION;
       char uid1[50] = "TOTO/TOTO@10.44.111.19:1521/orcl";
    EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT :uid1;
    xmlReadFile("/home/toto/etc/transdb.xml","GBK",XML_PARSE_RECOVER);
    printf("line[%d]\n",__LINE__);

return 0;
}

Makefile:

CC=gcc

PROC=proc

DBINCLUDE=-I$(ORACLE_HOME)/precomp/public

DBFLAGS= -L$(ORACLE_HOME)/precomp/lib -lclntsh -pthread

memt: memt.pc
    $(PROC) iname=memt.pc parse=no lines=yes
    $(CC) $(DBINCLUDE) -I/usr/local/include/libxml2 -o memt memt.c -L/usr/local/ActiveMQ-C/lib -lactivemq-c -L/usr/local/lib -lxml2 $(DBFLAGS) -w
#   $(CC) $(DBINCLUDE) -I/usr/local/include/libxml2 -o memt memt.c -L/usr/local/ActiveMQ-C/lib -L/usr/local/lib -lxml2 $(DBFLAGS) -w
    rm $@.c $@.lis
    mv memt $(HOME)/bin/memt
    make clean

编译没有问题,运行之后出现段错误。

1.如果把程序中的"EXEC SQL CONNECT :uid1;"这句注掉,编译运行通过;

2.如果把程序中的"xmlReadFile("/home/toto/etc/transdb.xml","GBK",XML_PARSE_RECOVER);"这句注掉,编译运行通过;

3.如果把Makefile中的"-lactivemq-c"去掉,程序也可以编译运行通过.

使用gdb调试:

Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i586-suse-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/toto/bin/memt...done.
(gdb) r
Starting program: /home/toto/bin/memt
Missing separate debuginfo for /lib/ld-linux.so.2
Try: zypper install -C "debuginfo(build-id)=77c46e45f6efdf89044415840ec59f7b3c2fd041"
Missing separate debuginfo for /usr/lib/libxml2.so.2
Try: zypper install -C "debuginfo(build-id)=48ad46afc2a5a5794ff474fa66eb3ca4d8354cef"
Missing separate debuginfo for /lib/libpthread.so.0
Try: zypper install -C "debuginfo(build-id)=3043b78c80daa60cdb3d347dcb33f00bd1551163"
[Thread debugging using libthread_db enabled]
Missing separate debuginfo for /lib/libc.so.6
Try: zypper install -C "debuginfo(build-id)=947f93f3895469254f408b3eff732d0f12135a60"
Missing separate debuginfo for /lib/librt.so.1
Try: zypper install -C "debuginfo(build-id)=88e2c2308d90ca748f6c16545dca818ca8f5a50f"
Missing separate debuginfo for /lib/libcrypt.so.1
Try: zypper install -C "debuginfo(build-id)=4fdfcab55467c7d1c6b52986053631a854d508bf"
Missing separate debuginfo for /lib/libdl.so.2
Try: zypper install -C "debuginfo(build-id)=cd785200787e37f6917cc1c87966fb4404e65297"
Missing separate debuginfo for /usr/lib/libstdc++.so.6
Try: zypper install -C "debuginfo(build-id)=a06c7686acca71405f69e506919c07c1db9ea518"
Missing separate debuginfo for /lib/libm.so.6
Try: zypper install -C "debuginfo(build-id)=293aa876def3cb4177e0389f96c11e76b839b7e4"
Missing separate debuginfo for /lib/libgcc_s.so.1
Try: zypper install -C "debuginfo(build-id)=815f111c78054fb492b3e12dd7bef2d7efc808b7"
Missing separate debuginfo for /lib/libz.so.1
Try: zypper install -C "debuginfo(build-id)=9f5e4b386d9826b14a48677c23dcdf8a2cb45bff"
Missing separate debuginfo for /lib/libnsl.so.1
Try: zypper install -C "debuginfo(build-id)=39faa9c7203fd34021eba28be4090f6f58d83c4c"

Program received signal SIGSEGV, Segmentation fault.
0xb6fac88d in strncmp () from /lib/libc.so.6

(gdb) where
#0  0xb6fac88d in strncmp () from /lib/libc.so.6
#1  0xb7ece0ad in __xmlParserInputBufferCreateFilename () from /usr/lib/libxml2.so.2
#2  0xb7ece12a in xmlParserInputBufferCreateFilename () from /usr/lib/libxml2.so.2
#3  0xb7ea2001 in xmlNewInputFromFile () from /usr/lib/libxml2.so.2
#4  0xb7ece543 in xmlLoadExternalEntity () from /usr/lib/libxml2.so.2
#5  0xb7ea6661 in xmlCreateURLParserCtxt () from /usr/lib/libxml2.so.2
#6  0xb7ebcda1 in xmlReadFile () from /usr/lib/libxml2.so.2
#7  0x080487f0 in main (argc=<value optimized out>, argv=<value optimized out>) at memt.pc:12

从GDB的调试信息中可以看到,是xmlReadFile函数内部嵌套调用的strncmp函数导致了段错误,但是不明白为什么在没有嵌入SQL语句或者编译的时候不连接activemq的动态库就没有产生段错误。

在这个程序中,"-lactivemq-c”是在一个Makefile的变量里的,为了多个程序的编译共用,所以没有去掉,导致了段错误。这是一个教训,没有必要的时候,不要随意引用第三方库,还是根据实际需要最靠谱啊。

但是这里面究竟是有什么冲突呢?proc,libxml2,activemq三者的关系真是有点暧昧啊。。。

记录一个原因不明的段错误(libxml2 proc activemq的三角恋)的更多相关文章

  1. 记录一个glibc 导致的段错误以及gdb 移植

    上一篇我有相关关于一个段错误的记录,现在记录当时的段错误具体是在哪里的. // 从 GNU 的官网下载当前在使用的 glibc 的源代码以及最新的 glibc 源代码 // 地址如下: http:// ...

  2. 记录一个因sqlmap导致的错误

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "- ...

  3. linux下cp覆盖原so文件时引起的段错误原因确定

    原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...

  4. 你的java/c/c++程序崩溃了?揭秘段错误(Segmentation fault)(3)

    前言 接上两篇: 你的C/C++程序为什么无法运行?揭秘Segmentation fault (1) 你的C/C++程序为什么无法运行?揭秘Segmentation fault (2) 写到这里,越跟 ...

  5. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  6. linux Ubuntu(Segmentation fault)段错误出现原因及调试方法

      在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...

  7. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  8. 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结

    本文转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html 1. 段错误是什么 ...

  9. Linux下运行C++程序出现"段错误(核心已转储)"的原因

    今天写程序出现了“段错误(核心已转储)"的问题,查了一下资料,加上自己的实践,总结了以下几个方面的原因. 1.内存访问出错  这类问题的典型代表就是数组越界. 2.非法内存访问 出现这类问题 ...

随机推荐

  1. Lua Interface基础使用

    Lua是一种可爱的脚本语言,由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发. 其设计目的 ...

  2. 计算直线的交点数(set + 打表)

    计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. 文件atime未变问题的研究

    1. atime, ctime 以及mtime 这三个名词属于文件/文件夹的属性,存在于inode数据结构之中. 通过系统调用stat可以获取stat结构,其中包括:atime(accesstime) ...

  4. 批量创建prefab

    using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...

  5. c++编程碰到的奇怪问题与解决

    今天写一个工具,调试过程中莫名其妙崩溃,类某些成员变量指针很奇怪,为0x00003001.最后检查的结果居然是这样的: 文件class1.h: class1 { int a; int b; } 文件: ...

  6. hdu1171 Big Event in HDU 01-背包

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 Problem ...

  7. [每日一题] OCP1z0-047 :2013-07-27 外部表――不能被DML和建索引

    首先看官方文档上的解释: Managing External Tables Oracle Database allows you read-only access to data in externa ...

  8. SQL 练习题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  9. 如何 查看 WebLogic Server的版本号[转]

    如何 查看 WebLogic Server的版本号[转] WebLogic Server 10gR3为例: 1.查看$BEA_HOME/registry.xml         => <c ...

  10. Xcode6和Xcode5获取app名字

    1.在Xcode5下,获取程序名字(app name)的方法为: NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionar ...