gpt4 book ai didi

c++ - 调试发布版本客户端崩溃 : what are the possible ways of geting call stack?

转载 作者:行者123 更新时间:2023-11-30 00:39:38 26 4
gpt4 key购买 nike

我有一个 native C++ 应用程序,在办公室运行良好(当然,我们进行测试),但客户端会遇到许多不同的崩溃。我知道可以使用 windbg(它是一个跨平台应用程序 - Win、Linux 和 Mac,但在所有平台上都会发生崩溃,因此调试其中一个很有用),但是操纵客户端的机器(例如安装和注册 windbg)不是选项。我想知道是否有其他方法可以获取调用堆栈。是否有任何工具可以检测二进制文件以提供此类信息?

P. S. 我想我可以将 .pdb 文件与二进制文件一起发送,但我不想这样做。

最佳答案

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

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

编辑:

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

为了捕获和转储调用堆栈,您应该在堆栈展开之前转储它。像这样:

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
}

关于c++ - 调试发布版本客户端崩溃 : what are the possible ways of geting call stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com