首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VC++ 崩溃处理以及打印调用堆栈

title: VC++ 崩溃处理以及打印调用堆栈 tags: [VC++, 结构化异常处理, 崩溃日志记录] date: 2018-08-28 20:59:54 categories: windows...高级编程 keywords: VC++, 结构化异常处理SEH, 崩溃日志记录 --- 我们在程序发布后总会面临崩溃的情况,这个时候一般很难重现或者很难定位到程序崩溃的位置,之前有方法在程序崩溃的时候记录...Java、Python等等语言在崩溃的时候都会打印一条异常的堆栈信息并告诉用户那块出错了,根据这个信息程序员可以很容易找到对应的代码位置并进行处理,而C/C++则会弹出一个框告诉用户程序崩溃了,二者对比来看...,C++似乎对用户太不友好了,而且根据它的弹框很难找到对应的问题,那么有没有可能使c++像Java那样打印异常的堆栈呢?...打印函数调用堆栈 关于打印堆栈的内容,这里不再多说了,请参考本人之前写的博客 windows平台调用函数堆栈的追踪方法 这里的主要思路是使用StackWalker来根据当前的堆栈环境来获取对应的函数信息

3.4K40
您找到你想要的搜索结果了吗?
是的
没有找到

java-堆栈打印

前言 在做调试bug的时候, 想测试知道这些流程是怎么调用的, 就需要打印堆栈信息 这里只是封装了一个工具函数, 看自己使用 代码如下 public static void printCallStack...} public static void printCallStack(int elementMax) { printCallStack(elementMax, true); } /** * 打印堆栈...* * @param elementMax 打印的调用链数, 默认0: 无限制 * @param currentThread 是否仅当前线程, 默认true */ public static...element.getLineNumber(), element.getMethodName()); System.out.println(msg); num++; } } 其实也只是使用线程来根据当前所在的Thread获取当时的堆栈..., 同时, 也可以获取所有线程的堆栈信息, 调用的是 Thread.getAllStackTraces(); 返回一个Map, 遍历其就可以了 使用的话, 直接在想要打印的地方插入一行调用该方法 如 @

2.1K00

第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

问题 在 09 问 中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息。...那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何分析有效的信息?...实验 我们沿用 09 问 中的 MySQL 崩溃的场景,此处忽略复现崩溃的步骤,大家参看 09 问 查看 error log: ?...我们拿到了崩溃位置 0xee36f1,如何找到与之相对的代码位置呢? 找台测试机,获取对应版本的安装包: ? 解压: ? 然后用 GDB 打开 mysqld: ?...我们可以看到,gdb 将崩溃位置的文件名和行号都打印出来, 剩下的事情,就可以交给开发工程师,按照这个崩溃堆栈来进行问题排查。 赠送章节 ? 红框内的这串信息是什么?

83020

Lua调用C++时打印堆栈信息

公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志时,基本上只能靠“猜”来复现bug...更为郁闷的是很多时候并没有使用log输出,在崩溃日志里还无法查看大概在哪一步操作崩溃的… 后来在网上搜索了一下,受到一点启发,lua代码在执行的时候可随时调用debug.traceback()方法来获得调用栈的字符串信息...所以只能在ant的build.xml配置中想办法了,好在ant本身就支持正则的任务“ReplaceRegExp”,在调用的方法前面添加打印堆栈的方法即可。...打印lua调用堆栈的方法: // 打印lua调用栈开始 lua_getglobal(tolua_S, "debug"); lua_getfield(tolua_S, -1, "traceback...(tolua_S, -1); CCLOG(sz); self->\1;' byline="true" flags="g"/> 注: 为换行符 参数资源: lua调用C++函数崩溃

2.8K20

如何正确地打印异常堆栈信息

而已,没想到原来一直都使用错了,以至于有些错误信息没能在log文件中打印堆栈信息,最终难以定位bug,排查困难。...如何正确地打印异常的堆栈信息? 一般在catch到异常的时候,不要使用e.printStackTrace()来打印异常信息。...我们使用日志框架来打印信息,一般来说,日志框架的log级别从低到高是:debug, info, warn, error, fatal。 对于异常,一般使用log.error()来打印堆栈信息。...对于第二个log语句,只是打印出了异常的具体信息,既没有异常类名,也没有堆栈信息。 对于第三个log语句,打印出了异常的类名和具体信息,但是没有打印出来堆栈信息。...总结一下,就是我们应该使用第一种log语句的形式来将堆栈信息打印出来,方便日后定位bug,排除错误。 警告 本文最后更新于 November 11, 2018,文中内容可能已过时,请谨慎使用。

1.2K00

iOS崩溃堆栈符号化,定位问题分分钟搞定!

说明: loadAddress 表示函数的动态加载地址,对应崩溃地址堆栈中 + 号前面的地址,即0x000ef000 address 表示运行时地址、对应崩溃地址堆栈中第一个地址,即0x0010143b...结语 在实际的项目开发中,崩溃问题的分析定位都不是采用这种方式,因为它依赖于系统记录的崩溃日志或错误堆栈,在本地开发调试阶段,是没有问题的。...如果在发布的线上版本出现崩溃问题,开发者是无法即时准确的取得错误堆栈。一般地,开发者都是接入第三方的崩溃监控服务(如:腾讯Bugly),实现线上版本崩溃问题的记录和跟踪。...目前,国内外提供崩溃监控服务的产品有好多个,在崩溃问题的统计上可能不分伯仲。但提供自动符号化功能的产品却基本没有,大部分崩溃问题的堆栈只是简单符号化以增强可读性,没有可以快速定位问题的行号信息。...而腾讯Bugly提供了地址堆栈符号化功能的崩溃分析服务,只要开发者配置了对应的符号表信息,Bugly服务会自动对错误地址堆栈进行符号化,出错位置清晰可见,分分钟定位和解决崩溃问题。

4.4K51

解决 Java 打印日志吞异常堆栈的问题

前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。...分析 在之前的一篇文章里已经验证过这种写法是可以正常打印异常和堆栈信息的:AI 自动补全的这句日志能正常打印吗?...再三确认代码写法没问题,纳闷之下只好搜索了一下关键词「Java异常堆栈丢失」,发现了这篇文章:Java异常堆栈丢失的现象及解决方法,这里面提到的问题与我们遇到的一样,而且给出了 Oracle 官方文档里的相关说明...了解到这个信息后,翻了翻从服务上次发版以来的这条日志,果然最早的十几次打印是有异常堆栈的,后面就没有了。...解决方案 回溯历史日志,找到正常打印堆栈信息,定位和解决问题; 也可以考虑在 JVM 参数里加上 -XX:-OmitStackTraceInFastThrow 参数,禁用优化; 本地复现 在本地写一个简单的程序复现一下

19420

如何对CDH集群中的Impala打印线程堆栈

上一篇文章《Impala查询卡顿分析案例》介绍了怎么对Impala进程打印线程堆栈,JVM部分直接用 jstack 比较直接,但 C++ 部分由于要使用 gdb 或 breakpad 工具,还需要编译源码...本文直接演示如何在 CDH 集群中打印 Impala 进程的线程堆栈,不再需要编译源码。当然第一次操作时还是需要下载一些工具,可以在集群中固定选一台机器来配置环境,以后再操作时就比较方便了。 1....adc7f7eb.dmp /tmp/syms > /tmp/resolved.txt 2>/tmp/breakpad.log 生成的 resolved.txt 形式如下: Operating system: Linux...0.0.0 Linux 4.4.0-24-generic #43-Ubuntu SMP Wed Jun 8 19:27:37 UTC 2016 x86_64 CPU...解析的输出包含了很多寄存器的值,有点影响阅读,可以把它们去掉: grep -v = /tmp/resolved.txt | grep -v 'Found by' | less 这样能看到比较舒服的堆栈

3K11
领券