调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)

转载请注明出处:http://blog.csdn.net/horkychen

有时在查找问题时,不想中断程序运行就输出一下某个条件下的函数执行顺序可以帮助定位问题。

在Xcode下可以编辑断点设置中的Action设为Debugger Command, 如果你使用GDB作为调试器(项目设置),然后输入backtrace如下:

记得勾选"Automatically continue after evaluating", 这样程序就不会停在这个断点,而是继续执行下去。

运行结果:

#0  a (i=5) at /xxxx/TestBacktrace/main.c:20

#1  0x0000000100000e72 in main (argc=1, argv=0x7fff5fbffa88) at /xxxx/TestBacktrace/main.c:25

如果使用LLDB作为调试器,则输入bt, 其运行结果如下:

* thread #1: tid = 0x2503, 0x0000000102238e37 TestBacktrace`a + 7 at main.c:20, stop reason = breakpoint 1.1

    frame #0: 0x0000000102238e37 TestBacktrace`a + 7 at main.c:20

    frame #1: 0x0000000102238e72 TestBacktrace`main + 34 at main.c:25

    frame #2: 0x0000000102238d44 TestBacktrace`start + 52

Debugger的选择在这里:

另外也可以在代码中调用backtrace函数实现。 当你调试一个多进程程序时,Debugger可能无法及时attach目标进程,这个方法就有用了。

#include <execinfo.h>

void printCallStack(void)

{

    void* callstack[128];

    int i, frames = backtrace(callstack, 128);

    char** strs = backtrace_symbols(callstack, frames);

    for (i = 0; i < frames; ++i) 

    {

        printf("%s\n", strs[i]);

    }

    free(strs);

}

int a(int i)

{

    printCallStack();

    return i+1;

}

...

输出结果:

0   TestBacktrace                       0x00000001013ddd6a printCallStack + 42

1   TestBacktrace                       0x00000001013dde30 a + 16

2   TestBacktrace                       0x00000001013dde72 main + 34

3   TestBacktrace                       0x00000001013ddd34 start + 52

Windows下在Visual Studio,有类似的做法, 贴两张图就应该懂了:

*Windows的第二种方法可以参考CaptureStackBackTrace函数的使用:

1. MSDN

2. Win32 - Backtrace from C code

 

时间: 2024-09-23 06:05:29

调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux &amp; Windows)的相关文章

usb转串口-安卓读取串口数据时read阻塞,程序不能向下进行

问题描述 安卓读取串口数据时read阻塞,程序不能向下进行 用安卓 通过串口读取单片机发来的数据时,用inputstream.read()去读取数据时会发生阻塞,程序就卡在read()函数不能往下运行了,我是用的网上来源的serial_port_api,,,本人新手做项目卡在这了,求大神指导一下!!感谢

政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信息

  [国内政策动态]工信部发布关于规范互联网信息服务使用域名的通知 点击查看原文 概要:<规范互联网信息服务使用域名的通知>要求互联网接入服务提供者按照<网安法>要求落实实名制,并要求域名注册管理.服务机构按照<互联网域名管理办法>和电信主管要求,与"ICP/ICP地址/域名信息备案管理系统"进行对接.互联网接入服务提供者应当定期通过备案系统核查互联网信息服务提供者使用域名的状态,对于域名不存在.域名过期且未提供真实身份信息等情形的,互联网接入服务提

c++-C++在脱离了环境的情况下输出代码执行的源代码

问题描述 C++在脱离了环境的情况下输出代码执行的源代码 不要百度的回答,谢谢,是脱离环境下的输出源代码,怎么把源代码输出出来? 解决方案 首先,你需要一份源代码放在你的程序中,然后你可以用 ___LINE___ 宏来嵌入当前执行的行,然后你可以读取源代码文件,输出这个行的代码. 解决方案二: 包编译后就是二进制文件了怎么输出源代码,你告诉我

php-PHP被阻塞情况下输出数据 ob_flush不管用

问题描述 PHP被阻塞情况下输出数据 ob_flush不管用 ob_start(); for($i=0;$i<20;$i++){ //...耗时的操作 3秒钟 echo "ABC"; ob_flush(); } 运行的时候,需要1分钟才能显示ABC,怎样一条条的出来,3秒钟得出来一次呀? 谢谢解答在线等~ 解决方案 @ob_flush(); for($i=0;$i<20;$i++){ //...耗时的操作 3秒钟 echo "ABC" . str_rep

c#-如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox

问题描述 如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox 如何用while语句判断用户名及密码 并且在账号错误或者密码错误的情况下输出MessageBox 代码已经写好了如下 怎么样可以在while循环密码不正确后输出MessageBox 用于区分 对账户的判断 if (sdr.HasRows) { //SqlDataReader 在数据库中为 从第1条数据开始 一条一条往下读 while (sdr.Read()) //如果读取账户成功(文本框中

高分求解:集成windosws身份验证,登录后如何在不中断会话的情况下注销登录?

问题描述 一个网站中使用了集成windosws身份验证,使用WINDOWS帐户登录后,如果在不中断当前会话的情况下注销啊?> 解决方案 解决方案二:网站,你是说登陆数据库????????解决方案三:windosws身份验证,不是登录数据库是网站中使用了服务器的系统帐户来进行认证解决方案四:关注,学习一下!解决方案五://自己写个类,//youPrincipal为自己写的继承System.Security.Principal.IPrincipal类.每个页面前面加入if(Context.User.

在服务器数据丢失情况下如何恢复数据

作为一个专门从事计算机工作的人,笔者的一些亲戚朋友经常打电话给我,询问一些有关数据丢失的问题.他们遇到的问题五花八门,有些时候是数据被意外删除,有些时候数据是被病毒侵蚀而丢失,有些时候是硬盘本身出现了问题.无论数据丢失是由于什么原因造成的,这些遇到问题的人都存在同样的问题,那就是他们都不是IT专业人员,而且从来都不对他们的数据进行备份. 笔者最近做了很多数据恢复的工作,所以我决定写一些有关数据恢复的文章.我打算在这些文章中讨论我所使用的一些常规的技术.在这篇文章中,我将会谈谈当数据丢失时该如何处

asp.net程序aspnet_client目录下的js失效

问题描述 asp.net程序aspnet_client目录下的js失效2007-11-0523:21系统同时安装.net1.1 和.net2.0时,.net1.1程序的aspnet_client下的WebUIValidation.js和SmartNav.js文件就会失效,验证通过却无法提交.通过比较,有几个地方不同原.net1.1下的WebUIValidation.jsfunctionValidatorCommonOnSubmit(){varresult=!Page_BlockSubmit;Pa

[译] 如何在无损的情况下让图片变的更小

本文讲的是[译] 如何在无损的情况下让图片变的更小, 原文地址:Making Photos Smaller Without Quality Loss 原文作者:Stephen Arthur 译文出自:掘金翻译计划 译者:Xat_MassacrE 校对者:meifans,windmxf 如何在无损的情况下让图片变的更小 Yelp(美国最大点评网站)已经有超过 1 亿张用户上传的照片了,其中不但有晚餐.理发等活动的照片还有我们的新特性照片 -- #yelfies(一种在拍摄时,加上自拍头像的一种新的