c语言gdb调试问题 无法定位 5C

图片说明

0

6个回答

编译的使用gcc使用-g参数编译,并且要对有symbol的so进行调试,通过file命令可以知道这个文件是否有symbol,file命令最后有一个striped就是没有symbol

1
qq_36291682
shadowPK小明 谢谢回答
一年多之前 回复

系统库是不带debug符号的,所以出现:no debugging symbols found
只能通过调用位置进行判断了。

看上去是取消线程引起的问题,看看是不是资源冲突,释放了已经释放的指针啥的?

1
qq_36291682
shadowPK小明 谢谢回答
一年多之前 回复
1

问题补充:Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `ck_qzj 211 60002 0GDaWz02GD0LyWl00yWVlB06Gj0HGjWFjB04'.
Program terminated with signal 6, Aborted.
#0 0x009d3430 in __kernel_vsyscall ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.209.el6_9.2.i686
(gdb) bt
#0 0x009d3430 in __kernel_vsyscall ()
#1 0x00164781 in raise () from /lib/libc.so.6
#2 0x0016605a in abort () from /lib/libc.so.6
#3 0x001a4645 in __libc_message () from /lib/libc.so.6
#4 0x001a4774 in __libc_fatal () from /lib/libc.so.6
#5 0x00bc63aa in pthread_cancel_init () from /lib/libpthread.so.0
#6 0x00bc2744 in pthread_cancel () from /lib/libpthread.so.0
#7 0x0805176b in f_pthread_cancel (threadid=3317513072) at ck_qzj_data.c:1220
#8 0x0804a127 in f_thread_timer (pvParam=0x0) at ck_qzj.c:429
#9 0x00bbdbc9 in start_thread () from /lib/libpthread.so.0
#10 0x0021d04e in clone () from /lib/libc.so.6

0
0
qq_36291682
shadowPK小明 谢谢回答
一年多之前 回复

堆栈信息不是已经有了?ck_qzj_data.c:的1220行

0
qq_36291682
shadowPK小明 谢谢回答
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Bochs + GDB 源码级调试C语言内核
Ubuntu 14.04 64bit Bochs 2.6.6 GDB 7.7 想要源码级调试C内核,需要在编译Bochs时加上 --enable-gdb-stub 参数 sudo ./configure --enable-all-optimizations --enable-long-phy-address --enable-disasm --enable-alignmen
GDB调试和常见段错误
1.基本命令 1)进入GDB  #gdb test   test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码  (gdb) l   源码会进行行号提示。   如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入
C语言调试工具---gdb及自动调整格式
一、gdb调试-常用指令 gdb progrom  执行 r args 增加断点 b file.c:23 查看断点: info b 进入函数内部 s 运行一行代码  n 运行到下一个断点 c 打印  p  执行到段错误的时候,可以查看具体的段错误代码 bt  二、 调整C语言代码格式 将C程序自动调整为谷歌风格 clan...
踩内存问题定位总结
现象:挂死,程序跑的异常,数据被串改 大致原因:数组越界,字符串操作越界,栈指针操作越界,操作了释放掉了的指针,多线程时序对资源保护控制不当,内存管理异常,使用了其他地方的内存 定位方法: 1. 类似内存泄漏的问题,先定界,后定位,通过内存proc信息(meminfo/media-mem)判断是具体的模块,内存段 2. 减法缩小范围,裁剪模块,修改应用程序,找到最小场景
gdb+core 定位so崩溃
最近专门搞了一下so的调试。总结一下 关于core dump的输出准备: 执行程序的linux user一定要先打开core dump开关,注意:这个开关是与用户会话关联的,因此要先执行ulimit -c unlimited,在执行程序。可以用ulimit -c或ulimit -a查看一下。 关于程序的准备: so必须编译成debug版,但是可执行文件不一定必须要debug。调试时...
通过valgrind、gdb定位程序问题的几个方法小结
通过valgrind、gdb定位程序问题的几个方法小结 一,用valgrind定位程序问题   在排查程序问题时候,我们会经常用到gdb。gdb确实是定位程序问题的很有用的工具。但是很多时候我们用gdb来定位问题,会发现不好定位,花了很多时候把发生core的地方找到了,可是还是不知道为何会发生该错误-----因为常常产生core的地方是由于在core之前的错误导致的。   这时
栈溢出导致的core dump的定位------千年等一回
某服务在跑的时候, 从来没有core dump过, 某次, core dump了。 老大收到core dump告警后, 在群里贴了一下, 我开始着手定位。 这是个低概率的core dump, 重现原来问题几乎没有可能。         那就去看core吧, gdb xxx core一下发现, 程序core在一个字符串处理的地方, 但是,  无法进一步知道更具体的原因。 为了简便起见, 我对原来的
Windows下搭建了Eclipse+MinGW+GDB的C程序开发环境
转载: 1 Windows下搭建了Eclipse+MinGW+GDB的C程序开发环境 [url]http://www.cnblogs.com/xubing/archive/2010/06/07/1751952.html[/url] 最近由于项目需要,我在Windows下搭建了一个Eclipse+MinGW+GDB的C/C++程序开发环境。 Eclipse和MinGW都很容易搞定...
Linux 下gdb调试——定位程序崩溃位置
当程序出现错误,可使用gdb在线调试,以下举一个简单例子说明,如何定位程序。 1.创建一个文件gdb_test.c,输入以下代码。代码中的第5行,使用了未初始化为有效值的指针,运行过程中肯定是会出错的。 1 #include "stdio.h" 2 3 4 int main() 5 { 6 int *b = 0; 7 *b = 10; 8 printf("...
gdb常用定位命令及基本问题定位方法
1 gdb常用调试命令及技巧 1、gdb中如何定义临时变量 (gdb) set $i="hello" (gdb) ptype $i typee = char[6] gdb定义结构体变量:call malloc 构造结构体变量,然后填定内容,然后即可当成参数进行传值; (gdb) call malloc(sizeof(VFP_QUE_HI161X_PHY_CB) $1=0xfbbdf0 (g...
Linux:使用GDB调试C程序
调试指令 指令: 1.编译:gcc -o xxx xxx.c 2.生成可调试文件:gcc -o xxx -g xxx.c 3.调试程序:gdb xxx 4.执行程序: start 从程序第一步开始执行 run 直接运行程序到结束或者断点处 5.设置断点:break line(行数)或函数名或者条件表达式 break 6 在第6行设置断点 b...
linux环境下写c语言——gdb的使用
今天学习了linux环境下gdb调试工具的使用,在英语半通不通的情况下,终于琢磨出来了它的使用方法。 gdb包含以下一些功能: 1.监视程序中变量的值 2.设置断点以使程序在指定的代码行上停止执行(以前我们总是设置输出1或者其他什么的测试) 3.一行行地执行代码首先我们要先检查我们的linux系统有没有装gdb这个工具 在命令框中直接输入gdb就可以查看有没有装这是装好了的显示结果,如果没
用gdb学C语言
转自:https://bbs.pediy.com/thread-229985.htm 用 gdb 学 C 语言 我写作本文的目的是,是向大家展示 gdb 这一学习 C 语言的强大工具。我将介绍一些我最常用的 gdb 命令,同时还将会演示如何用 gdb 来理解 C 语言中最令人头疼的内容:指针和数组的区别。 gdb 简介 我们用这个 minimal.c 的小程序来开始: 1 ...
【C语言】gdb调试器入门
前言    作为一名计算机系的学生,接触编程也有两年时间了,一个比较深的感受:光会码代码是远远不够的,调试代码的能力十分重要!     经常有同学说,这个我知道思路,代码也打出来了,为什么跑出来的结果总是不如我所愿!打代码1小时,调试1天这种事常常发生。     当然,这并不是我们打代码的能力不够,再好的程序员也会因为各种原因打出有bug的程序,debug是家常便饭。
C语言debug之gdb的调试技巧
C语言debug之gdb的调试技巧。
linux 下 gdb core dump 分析程序崩溃原因
原博客:http://hnhujun3023.blog.163.com/blog/static/105440217201291552338564/在linux中使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的,特别对于难以复现的crash,准确定位crash的位置对分析crash原因更有意义。下面讲述如何配置linux系统在程序crash时产生...
内存越界的一种定位方法
#include #include #include void fn(char *str) { memset(str, 0, 64); return; } int main(int argc, char **argv) { char badstr[32] = "abc"; int fd = 1; printf("badstr = %s\n", ba
一次踩内存事件
做各个模块集成,其中包含了文件管理、录像业务相关的库。 背景:在文件管理初始化时,应用层会指定数据根目录。   测试发现在执行特定操作时,目录失效,无法创建文件,日志大概这样  (NULL) /Movie/xxxx.MP4,好像是指定的根目录变空了。  检查一番, 没有进行去初始化, 跟文件管理库负责同事远程沟通了下,他在库里维护了一个指针,指向 应用 层设置的 目录字符串(这个方法当然不...
go语言程序-gdb调试问题
    以前经常用gdb调试C/C++程序,当学习golang的时候,发现golang的程序也是支持gdb调试的,然而还是遇到一些问题。比如说调试etcd程序就遇到如下问题: 【问题1】 info goroutines,提示找不到Undefined info command: "goroutines".  Try "help info". 解决方法:启动gdb后,运行目标程序之前(输入r之前)...
用gdb来学习c语言(linux环境下)
目录(?)[+] 原文地址:https://www.hackerschool.com/blog/5-learing-c-with-gdb 前几天在hacknews上看到这篇文章,发现它对C的初学者来说很有帮助。所以就尝试的翻译,粘贴在这里。限本人的英文水平和技术水平有限,有些地方可能翻译的不准,敬请见谅啊! --------------------------------------
Linux下C语言环境编程(gdb调试指针)
1.vim:() 2.gcc:
Linux 下使用 gdb 定位 crash 位置
下面这一段代码会出现SEGV错误。 #include int foo(void) { int *i = NULL; *i = 0; } int main(void) { foo(); return 0; } 执行后如下: $ ./foo 段错误 (核心已转储) 但是没有发现 core 文件。 需要设置一下。 ulimit -c unlimited
linux程序调试命令addr2line之入门简介(本文先不聊gdb调试)
addr2line有什么作用呢? 可别小瞧它, 它可以定位到代码出错的位置。 下面, 我们来看看这个简单的代码: #include int main() { int *p = NULL; *p = 0; printf("bad\n"); return 0; }       这个程序很小, 我们可以一眼就看出程序在运行期出错。
gdb调试(3):观察点和程序崩溃
转发自:http://songjinshan.com/akabook/zh/gdb.html#id1继续修改上一节的程序。经过调试我们得出结论,对于这个程序来说, sum 赋不赋初值不重要,重要的是在 while (1) 循环体的开头加上 sum =0; ,这才能保证每次循环从0开始累加。我们把程序改成这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
解决一个Linux下C语言工程无法调试的问题
解决一个Linux下C语言工程无法调试的问题准备跟一下iostat(包含在sysstat软件包中)的源码。在Eclipse中新建一个Makefile工程,导入sysstat 9.1.3的源代码。代码可以通过编译,编译出来的iostat也可以正常运行。然而,在Eclipse调试运行却提示"function 'main' not defined",代码中的断点也都不起作用。在命令行下用gdb调试,在main函数上设置断点时也会提示"function 'main' not defined"。将iostat用obj
GDB 找不到源代码
首先直接列出问题及其解决方法:设置a.cpp:1234这样的断点后(断点位于.so文件中),gdb知道停在哪个函数,并能够停下来,但是无法显示源文件名及行号,也无法看到源码。明显是gdb有问题或者是调试信息有问题,我试遍了-g , -gstabs , -ggdb , -gstabs+参数,最终,-gstabs+参数可以和我的gdb完美配合,输出了我想要的东西,能够在debug的时候正确的看到函数名...
C语言gdb分析段错误的core文件
C语言gdb分析core文件
Linux C/C++ 多线程死锁的gdb调试方法
死锁的原因就不多说了,本质上,就是有一些线程在请求锁的时候,永远也请求不到。   先把有死锁的多线程代码贴出来 #include #include #include #include #include pthread_mutex_t g_smutex ; void * func(void *arg) { int i=0; //lock pthread_mut
pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
函数调用跟踪是在C语言开发来,在IDE里面有很多工具实现这个功能,但是,在我们使用vim+gcc+gdb开发程序而言,有一种比较好的方法,下面主要找这个方法: 请参看:http://hi.baidu.com/caosicong/blog/item/ef86426dc2c9c1f8431694fb.html 第一,安装pvtrace: 下载地址: http://www.mtjones.
Linux环境下使用GDB调试C程序
写这篇博客的目的是为了对gdb的常用命令做一个备忘,记录回顾下使用gdb的过程加深记忆。gdb是linux环境下一个非常著名的C语言调试工具,而且也非常的好用,对于解决C语言的各种bug非常拿手,对于c语言下常见的内存问题,可以说能非常快速的定位并解决问题。这篇博客首先通过介绍gdb的基本使用,后面补充gdb的各种使用命令,我还想列出一些典型的使用环境来做一个总结性的说明,不过这个就留到以后再补充吧。
c语言纠结问题之一,调试正确,运行正确----二级指针的作用
<br />  最近写程序遇到一个奇怪的问题,那就是,一个程序,调试是正确的,但是运行的时候就出不来正确的结果,又不知道出错在哪里?这个问题真是两个字“纠结”!<br />在vc中,调试用的是LIBCD.LIB,运行用的是LIBC.LIB,两者调用的动态链接库不同。<br />调试的时候,只能调试逻辑错误,笔者遇到的问题是在使用realloc函数的时候,大家都知道realloc 函数,但是用的人却不是很多,它是在原来的基础上重新开辟空间,但是新开辟的空间的首指针,指向的就不一定是原来的空间,<br />  
Ubuntu下GDB调试C语言程序
转自:这里 1.GDB是什么 GDB是GNU开源组织发布的一个UNIX下的程序调试工具,专门用来调试C,C++这些程序的了,而且都是命令行模式的。2.准备工作 平时我们在IDE开发得时候,必须在运行的时候选择debug模式,否则断点就无效了。因此,在用gcc编译的时候也是需要一些编译参数的。2.1编译 使用GCC编译时要添加-g选项来把源码编译进去,这样调试就可以看到源码了,否则调试很不方便
C实战:强大的程序调试工具GDB
C实战:强大的程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。1.2 添加断点b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。1.3 运行程序run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常
linux C —— gdb调试、简单Makefile
gcc可以编译c, c++, object-c, java等众多的语言程序 g++则是专注于C和C++。 GDB 调试器是一个功能强大的工具,它可以做很多的调试工作,如断点,单步跟踪等。 相关命令: GDB命令 格式 含义 简写 list List[开始,结束] 列出代码 l print Printf p 打印变量 p break Brea
Linux下利用GDB调试快速找到Bug
调试程序最让人头疼的就是层出不断的Bug,而且有些Bug不容易定位,下面介绍一种很强大的调试工具:GDB 虽然之前听过GDB调试,但是自己调试时一直没使用过。今天在调试highmac程序时,遇到了一个段错误,即segmentation fault。段错误的原因有指针使用错误,内存访问越界等等很多,所以一时还无法下手。。 但是我请来了师兄,描述了一下现象:简单来说就是,我在主函数中注释
用gdb分析linux死锁
简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊
C语言调试的文章(三篇)
关于一些c语言的调试问题,以及排版问题的文章
关于codelite 无法debugging 的困境
昨天已经将全部的calulate的源代码编译通过了,但是运行结果却不正确,当我zhu
GDB调试内存泄露(CentOS7 实战记录)
首先感谢《一种定位内存泄露的方法(Linux)》这片文章。基本思路是一致的。 本文追加了对于后续内存如何查看对象数据的方法。 先POST一下原来第三方文章,主要关注其思想理念: 目的: 本文是《一种定位内存泄露的方法(Solaris)》对应的Linux版本,调试器使用gdb。主要介绍实例部分。其他请见《一种定位内存泄露的方法(Solaris)》。 模拟new失败的程序: #incl...
gdb调试&C语言指针高级编程(5.7)
GCC编译器简介: 一、基本知识了解      GCC是由gun之父Stallman所开发的linux下的编译器。全程为GNU C Complier (GNU c语言编译器)。这是一种早期的说法,早期的时候,它只是用来编译我们的C 语言,之后可以多个我们的多门语言都可以进行编译。例如, C,C++,JAVA,ObjectC等等。 GCC是可以在多种硬体平台上编译出可执行程序的超级编译器,
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 物联网课程定位 大数据课程定位