相关疑难解决方法(0)

来自未处理异常的c ++堆栈跟踪?

之前已经问过这个问题,并且有特定于Windows的答案,但没有令人满意的gcc答案.我可以set_terminate()用来设置一个函数,terminate()当抛出未处理的异常时,该函数将被调用(代替).我知道如何使用backtrace库从程序中的给定点生成堆栈跟踪.但是,当我的终止替换被调用时,这将无济于事,因为此时堆栈已被解除.

然而,如果我只是允许程序abort(),它将产生一个核心转储,其中包含从抛出异常的点开始的完整堆栈信息.所以信息就在那里 - 但是有没有一种编程方式来获取它,例如它可以被记录,而不是必须检查核心文件?

c++ callstack exception-handling stack-trace unhandled-exception

31
推荐指数
1
解决办法
2万
查看次数

如何在 Visual C++ 程序中每次抛出异常时运行一些代码?

如果在 C++ 程序中引发异常,则控制将被转移到异常处理程序或被terminate()调用。

即使程序从处理程序内部(或从terminate()处理程序)发出一些诊断信息,也可能为时已晚 - 最大的值位于抛出异常时的调用堆栈中,而不是处理程序中。

[StackWalk64()在 Windows 上,可以使用] 1函数获取调用堆栈。关键是如何在正确的时刻调用该函数。

有没有办法让 Visual C++ 程序在每次抛出异常(或未设置处理程序的异常)时执行一些用户代码?

c++ exception visual-c++

5
推荐指数
1
解决办法
1739
查看次数

捕获所有异常并记录信息

我是一名使用 C++ 代码的 Java 程序员,需要一些异常处理方面的帮助。

我有以下结构的代码:

try{
...
}
catch( ... ) 
{
    log("Exception occurred");
}
Run Code Online (Sandbox Code Playgroud)

发生了异常,但 try 块确实很大,而且调试不是一种选择,因此我需要最少地修改代码以提供有关异常的相关信息。

所以我在现有的 catch 块之前添加了以下 catch 块(使用我的 Java 知识并参考 C++ 指南):

catch(exception e)
{
    log(e.what());
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然收到旧消息 - “发生异常”。try 块中的代码包含许多低级函数,例如strncpy, memcpy等。

为什么这个catch块没有按预期工作?我该怎么做才能获取有关正在发生的异常以及在哪一行上的信息,类似于 Java 轻松提供的堆栈跟踪。

c++ exception-handling try-catch

5
推荐指数
2
解决办法
7198
查看次数