Linux高级编程--04.GDB调试程序(查看数据)

查看栈信息当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令:backtrace/bt:打印当前的函数调用栈的所有信息。如:(gdb)bt#0func(n=250)attst.c:6#10x08048524inmain(argc=1,argv=0xbffff674)attst.c:30#20x400409edin__libc_start_main()from/lib/libc.so.6从上可以看出函数的调用栈信息:__libc_start_main–>main()–>func()backtrace/bt:n是一个正整数,表示只打印栈顶上n层的栈信息。backtrace<-n>/bt<-n>:-n表一个负整数,表示只打印栈底下n层的栈信息。如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首...

Linux高级编程--04.GDB调试程序(设置断点)

调试已运行的程序在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdbPID格式挂接正在运行的程序。先用gdb关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程的PID。并用detach来取消挂接的进程。暂停/恢复程序运行调试程序中,暂停程序运行是必须的,GDB可以方便地暂停程序的运行。你可以设置程序的在哪行停住,在什么条件下停住,在收到什么信号时停往等等。以便于你查看运行时的变量,以及运行时的流程。当进程被gdb停住时,你可以使用infoprogram来查看程序的是否在运行,进程号,被暂停的原因。在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(ThreadStops)。如果要恢复程序运行,可以使用c或是continue命令。设置断点(BreakPoint)我们用break命令来设置断点。正面有几点设置断点的方法:break:在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式...

Linux高级编程--04.GDB调试程序(入门概述)

GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事。动态的改变你程序的执行环境。从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。一个调试示例//test.c#include<stdio.h>intfunc(intn){intsum=0,i;for(i=0;i<n;i++){sum+=i;}returnsum;}intmain(){in...

PHP扩展--XHProf优化PHP程序

简介XHProf是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU计算时间和内存开销。函数性能报告可以由调用者和被调用者终止。在数据搜集阶段XHProf通过调用图的循环来检测递归函数,通过赋予唯一的深度名称来避免递归调用的循环。XHProf包含了一个基于HTML的简单用户界面(由PHP写成)。基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。同时也支持查看调用图。XHProf的报告对理解代码执行结构常常很有帮助。比如此分层报告可用于确定在哪个调用链里调用了某个函数。XHProf对两次运行进行比较(又名“diff”报告),或者多次运行数据的合计。对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。安装/配置编译安装wgethttp://pecl.php.net/get/xhprof-0.9.4.tgztar-zxvfxhprof-0.9.4.tgzcdxhprof-0.9.4/cdextension//usr/local/p...

【php】分享一个php转换微信、QQ、微博 特殊非主流 | 杀马特 网名的 function

1、实现的效果: 2、将上面带有图标、非主流的文字,转换成utf-8格式,能存进去和读出来。3、code:functionemoji_encode($nickname){$strEncode='';$length=mb_strlen($nickname,'utf-8');for($i=0;$i<$length;$i++){$_tmpStr=mb_substr($nickname,$i,1,'utf-8');if(strlen($_tmpStr)>=4){$strEncode.=rawurlencode($_tmpStr);}else{$strEncode.=$_tmpStr;}}return$strEncode;} ...

【原创+亲测可用】JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器

1、原理:通过不同移动端的ua弹窗获取user-agent参数包含的信息,进行判断浏览器类型在Android上QQ内置环境的ua中有关键字MQQBrowser,并且后面包含一个【空白符+QQ】字符;QQ浏览器仅有【MQQBrowser】因此在Android上区分,需要用正则判断ua中包含MQQBrowser,并且剔除【MQQBrowser】之后包含【空白符+QQ】,则是QQ内置浏览器,QQ浏览器:ua中包含MQQBrowser但是不包含QQ在ios上QQ内置浏览器:ua包含一个空格加QQ,但是不包含MQQBrowserQQ浏览器:ua包含MQQBrowser但是不包含单独的QQ 2、直接上js正则判断代码:(s代表空白符)<scripttype="text/javascript">//判断是否QQ内置浏览器(含IOS和Andriod)functionisQQAPP(){varisIosQQ=(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)&&/sQQ/i.test(navigator.user...

【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

一、微信联合登录是怎么登录的,有几种登录方式;微信联合登录和微信授权登录【授权登录(非静默授权)与静默授权】【主动授权】:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取。【静默授权】:不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和unionid,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。 二、某个服务,包括移动app端、PC网页端、公众号端服务,那么用户使用微信授权登录的数据流转流程是怎么样的;1、用户通过微信授权移动app服务;该应用服务即可通过接口获取用户的unionid,这个时候,如果在数据库中没有查到该id,则识别为新用户,直接创建一个userid,该唯一userid与unionid对应;2、用户通过微信扫码PC端授权联合登陆获取PC端服务;该应用服务即可通过接口获取用户的unionid,这个时候,在数据库中查到有这个id,就会把pc登录这个账户合并到之前创建的唯一userid账户下;3、用户通过关注该服务公众...

【win7 + win server 2008】设置定时任务,设置.bat 文件去执行php脚本 == 用来配合爬虫程序简直不要太爽

WindowsServer2008中使用计划任务定时执行BATbat进行PHP脚本的执行一、首先进行任务管理器设置 每隔1分钟执行.BAT文件配置首先WindowsServer2008不同于其他服务器操作系统和WindowsServer2003有着很大的区别,计划任务的名称是“任务计划程序”不在控制面板里,而是在“管理工具”里。由于服务器需要做些任务,定时执行,自己写程序吧,麻烦,所以采用BAT进行代替操作,网络上很多人都在说每分钟执行怎么配置,今天我们就配置一下。打开“任务计划程序”–点击“任务计划程序库”在右则会看到操作项里有“创建基本任务”和“创建任务”如图所示: 点击“创建任务”后如图所示:填写好相应的名称和勾选好必要的条件  选择“触发器”选项,点击“新建”,创建任务执行时间,“重复任务间隔&rdqu...

+递归下降语法分析程序设计

消除左递归后的文法是:E→TE'E'→+TE'|-TE'|εT→FT'T'→*FT'|/FT'|εF→(E)|i  #include<stdio.h>#include<string>charstr[10];intindex=0;voidE();voidX();voidT();voidY();voidF();intmain(){intlen;intm;printf("请输入要测试的次数:");scanf("%d",&m);while(m--){printf("请输入算数表达式:");scanf("%s",str);len=strlen(str);str[len]='#';str[len+1]='';E();printf("正确语句!");strcpy(str,"");index=0;}return0;}voidE(){T();X();}voidX(){if(str[index]=='+'||str[index]=='-'){index++;T();X();...

词法分析程序

#include<stdio.h>#include<string.h>voidFenxi(charc,charb);voidword(chara[]);voidnumber(chara[]);inti;//定义全局变量iints=1;//用来记录是否存在非法字符main(){chara[50];printf("请输入源程序:");gets(a);printf("您要分析的源程序为:");printf("%s",a);printf("");for(i=0;(a[i]!='')&&(i<50)&&s==1;i++){if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))word(a);elseif(a[i]>='0'&&a[i]<='9')number(a);elseFenxi(a[i],a[i+1]);}printf("");}voidnumber(chara[])//对数字字符进行扫描分析{cha...
IT猿 IT猿·2020-03-25

月薪3万的程序员都避开了哪些坑

程序员薪水有高有低,有的人一个月可能拿30K、50K,有的人可能只有2K、3K。同样有五年工作经验的程序员,可能一个人每月拿20K,一个拿5K。是什么因素导致了这种差异?我特意总结了容易导致薪水低的九大行为表现,避开这些大坑,你就离高薪不远了。 习惯即刻回报他不懂得只有春天播种,秋天才会有收获。刚刚付出一点点,甚至还没有付出,就想要得到回报。技术刚刚掌握,能一边百度一边干活了就觉得该拿到多少多少钱了。找工作先想着多少多少钱,入职了没干几个月就想着要加多少多少钱,干了没几个月,薪水要是没涨,就放弃了,准备通过跳槽加薪,不跳槽的话,往往也会因为没加薪而牢骚满腹,工作敷衍了事。一个程序员的价值,是通过他带给公司的价值体现的。先给公司带来了价值,然后才会反过来在薪水上体现出自己的价值。公司都很现实,很少会为你的潜力买单,在你还没有体现出价值时就给你很高的薪水。在生活和工作中,一定要懂得付出,不要那么急功近利,马上想得到回报。天下没有白吃的午餐,你想获得什么,就得先付出什么。唯有种下种子,然后浇水、施肥、除草、杀虫,然后才能等来收获。缺乏学习热情很少有哪个岗位的人像程序员这样需要持续不...

itchat+pillow实现微信好友头像爬取和拼接

源码下载链接:https://pan.baidu.com/s/1cPZhwy密码:2t2o###效果图 使用方法:下载项目到本地,打开项目主目录,打开命令行,输入:pipinstall-rrequirements.txt 使用pip命令时出了一个错:Youareusingpipversion7.0.3,howeverversion9.0.1isavailable.解决方法:使用easy_install指令安装:首先进入到easy_install的目录例如D:PythonScripts然后通过指令easy_install.exepip==9.0.1安装成功。之后又提示了一个错误:error:Unabletofindvcvarsall.bat解决方法:我的python版本是3.6,网上多数解决方法是降级到2.X。不过我找到一个包,链接:https://pan.baidu.com/s/1pM6mdYj密码:s3mk下载之后按照正常方式安装,装完就解决了。等待安装完成,输入:pythonwxImage.py 出现如下二维码:用手机微信右上角的扫一扫,确认登陆即可。...

转换python脚本为可执行程序的方式

背景:部分工具使用python脚本编写,而目标服务器,没有安装python包,导致使用工具不方便,还需要另外安装python. 目前主要有2个主流软件,可做此类转换,把对应工具脚本转换为exe;py2exe:缺点是和python版本强相关,只能支持windows。pyinstaller:绿色,解压即可用,2.6以上的版本,只要额外安装一下python32扩展即可,支持所有python版本;支持所有主流操作系统(如生成linux下可执行程序)。 主要介绍下pyinstaller的使用官方介绍:http://www.pyinstaller.org/export/v2.0/project/doc/Manual.html下载绿色版解压:http://www.pyinstaller.org/pywin32扩展:http://sourceforge.net/projects/pywin32/files/ 转化成可执行程序的2种选择:单个文件--即脚本和所有资源文件一起压缩成一个exe(需要额外下载upx程序)目录形式 --脚本和资源文件存在于一个目录或者目录...

程序文案过长,‘收起/展开’文字,createSelectorQuery 获取节点成功,boundingClientRect 返回信息null

问题描述:wxml中id是动态生成的。 获取节点信息是在onReady生命周期函数内延时500ms执行的,select(id)可以获取全部节点信息,boundingClientRect(rect)返回的有些有信息,有些是null。代码如下图 解决方法:很是费解,以为是forEach异步的问题,经过了一波波测试发现并不是,而是id首位不能是数字,要不然小程序获取不到相关信息解决方法是:将图一中 id首位添加英文字母 例:id="a{{item.id}}"           将图二中 获取id方法同样添加英文字母 例  wx.createSelectorQuery().select('#a'+itemCh.id).boundingClientRect(function(rect){})完美解决 ...

无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题

第一次搭建android开发环境,装完adb以后,打开DOS验证安装是否成功:但输入adblogcat调试时,系统弹出以下异常的对话框:无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题。 网上搜索发现原因很简单,缺少AdbWinApi.dll文件。 网上说把这个文件直接放在windows/system32下就OK了,我是64位系统,起初放这个目录不行,最后放在C:WindowsSysWOW64目录解决了问题。 关于AdbWinApi.dll文件在sdk安装根目录下platform-tools目录中是否有该文件,如果没有,再到网上下载AdbWinApi http://www.hiapk.com/bbs/thread-16724-1-1.html ...
首页上一页...221222223224225...下一页尾页