首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调试发布构建客户端崩溃:获取调用堆栈的可能方法是什么?

调试发布构建客户端崩溃:获取调用堆栈的可能方法是什么?
EN

Stack Overflow用户
提问于 2011-11-22 16:56:41
回答 2查看 597关注 0票数 1

我有一个本机C++应用程序,它在办公室工作得很好(当然,我们做测试),但客户端经历了许多不同的崩溃。我知道可以使用windbg (它是一个跨平台的应用程序,可以在Linux和Mac上运行,但是所有平台都会崩溃,所以调试其中任何一个都是有用的),但是操作客户端的机器(例如安装和注册windbg )是不可行的。我想知道是否有其他方法可以获得调用堆栈。有没有什么工具可以检测二进制文件来提供这样的信息?

附言:我想我可以将.pdb文件与二进制文件一起发布,但我不希望这样做。

EN

Stack Overflow用户

回答已采纳

发布于 2011-11-22 17:06:50

在Windows上,你可以在客户机上配置Dr.Watson,这样如果你的应用程序崩溃,它会创建所谓的“小型转储文件”,然后调试器可以用适当的PDB打开这个文件。

您还可以将未处理的异常过滤器添加到您的应用程序中,并在出现不可恢复的错误时自己生成小型转储。

编辑:

如果您想在出现(未处理的)异常时生成转储文件,请不要在C++ catch (...)块中执行此操作,因为它是在展开发生后调用的,并且原始调用堆栈不可用。

为了捕获和转储调用堆栈,您应该在堆栈展开之前将其转储为。如下所示:

代码语言:javascript
复制
int HandleMyException(EXCEPTION_POINTERS* pExc)
{
    // dump it
    MiniDumpWrite(...);

    // Unless you decide to terminate your process, return EXCEPTION_EXECUTE_HANDLER, so that the execution
    // continues normally after the __except block.
    return EXCEPTION_EXECUTE_HANDLER;
}

__try
{
    // Do something...
}
__except (/* stack still not unwound */ HandleMyException(GetExceptionInformation()))
{
    // unwind already took place here, nothing to dump
}
票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8224178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档