c++死锁调试 ,gdb pstack】的更多相关文章

GDB(GNU Debugger) gcc -g –o testarg testarg.c //可执行文件中带上调试信息,用于后续的gdb调试 gdb testarg l; list //显示源程序 b 6; break 6 //在第6行设置断点 r; run // n; next 单步执行,不跟踪进函数 s:step (into) 单步执行,跟踪进函数 p i; print i 打印变量的值 delete 1 //删除第一个断点 info b //显示所有的断点 disable 1 //让1号…
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于7.0,之前使用过gdb6.3调试多线程是不行的. 从上图可以看出两个线程都阻塞在wait上,而且还给出了在哪一行代码中,很容易就定位到产生死锁的位置. 有时候线程太多,想写到文件里,可以: (gdb)set logging file <文件名> (gdb)set logging on (gdb)…
1.测试代码 代码中开启两个线程,加锁后轮流输出数据,其中一个线程误将pthread_mutex_unlock(),写成pthread_mutex_lock()代码如下: int g_tickets = 100; pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; void* thread_fun1(void * arg) { while(true) { pthread_mutex_lock(&g_mutex); if(g_tickets>…
参考网上的资料,写了一个configprint模块,其功能为打印输出location配置内容,并计数访问次数. 代码链接如下:https://github.com/PaulWeiHan/nginx_module_development 程序的编写到运行总不是一帆风顺的,编译通过,运行不过的情况是最让我抓狂的. 这里记录一下gdb调试过程.供大家参考: (这里没有gdb命令说明,请自行百度) 我使用的是nginx的默认模式即: daemon on; master_process on; worke…
调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提供了设置断点, 单步跟踪等的图形界面, 使调试起来直观易用. 但Linux用户可能要生闷气了 O:-) : 难道我们Linux程序员就只能使用原始的调试方法, 在代码中加入printf信息吗?难道Linux下就没有好的C语言调试工具吗? 当然不是了. GNU早就组织开发了一套C语言编译器(Gcc)和…
1.1 gdb 调试工具常用命令 list:展开调试的源代码,缩写 l: break:设置断点,缩写为 b: info break:查看断点信息,缩写为 i b delete:删除断点 print:打印变量的值,缩写为 p: run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停: step:单步调试,可以进入子函数,缩写为 s: next:单步调试,不进入子函数,缩写为 n: continue:程序继续运行,,到下一断点处暂停,缩写为 c: set args:…
Qt的安装配置请参考本博客本分类下的其他相关文章,本文主要整理在调试时候遇到的问题和解决方法供遇到同样问题的同学参考.由于我之前也没有任何Qt的开发基础,做的也是硬件方面设计,所以这方面基础还是比较薄弱,这儿主要记录摸索过程中的一点心得体会. Qt的安装和初步配置请参见:Qt Creator的配置和开发初步测试 本文的软件环境: Win7 32bit Qt 4.8.4 Qt Creator 2.6.1 MinGW 4.4 摸索了一段时间的Qt和OpenCV,3个平台都有涉及,最大的问题还在于资源…
查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的.这个一般是通过查看调用栈信息来看的.在gdb中,查看调用栈的命令是backtrace,可以简写为bt. (gdb) bt    #0 pop () at stack.c:10    #1 0x080484a6 in main () at main.c:12 也可以通过info stack命令实现类似的功能(我更喜欢这个命令): (gdb) info stack    #0 pop () at stack.c:10    #1 0x…
版权声明:本文为博主原创文章,未经博主允许不得转载. 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c #include <stdio.h> #include <stdlib.h> int main(int argc, char** arv) { printf("Hello world~\n"); ; } # Android.mk LOCAL_PATH := $(c…
gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) break func:在函数func()的入口处设置断点 (gdb) info break: 查看断点信息 (gdb) r:运行程序 (gdb) n:单步执行 (gdb) c:继续运行 (gdb) p 变量 :打印变量的值 (gdb) bt:查看函数堆栈 (gdb) finish:退出函数 (gdb)…