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

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

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. yii2学习的论坛

    http://www.yiifans.com/forum.php http://www.yiichina.com/ http://www.yiichina.com/

  2. (3)选择元素——(5)为项目列表加样式(Styling list-item levels)

    Let's suppose that we want the top-level items, and only the top-level items, to be arranged horizon ...

  3. 安卓Menu键的问题

    近期开发中有须要Menu键,结果发现了一个非常尴尬的问题.我的測试机上有Menu键.可是測试平板上没有,队友的測试机上竟然也没有Menu键.这着实有些尴尬... 上网谷歌之后才发现问题所在: 仅仅有在 ...

  4. IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色

    在application: application didFinishLaunchingWithOptions: launchOptions 增加以下代码就能够实现对tabbar的颜色的改动 //设定 ...

  5. NuGet学习笔记(3)——搭建属于自己的NuGet服务器(转)

    在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重要的一步,从零开始搭建属于自己的NuGet服务器,诚然园子里及其它很多地方已经有完全写好的Nu ...

  6. js图片放大镜 可动态更换图片

    现仅已.NET为例,HTML代码如下 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > & ...

  7. PL/SQL 流程控制语句-条件结构,循环结构

    条件结构 一.IF-THEN语句 IF-THEN语句是最简单的IF语句. 语法: IF condition THEN Statements END IF; 例子: declare v_score nu ...

  8. sketchup 导出 fbx文件 单位 错误

    最近在使用sketchup导出fbx文件到unity中使用时,发生了尺度单位上的错误.按照网上给出的标准教程,选定模型的单位为十进制-米.导出时选项选择'米',但是得到的fbx文件在unity中出现了 ...

  9. NPOI通过DataTable导出和读取Excel

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...

  10. linux中运行python

    1.在终端中输入: python    **.py 2.最爽的方法: emacs中配置python运行环境.