相关疑难解决方法(0)

C++捕获所有异常

是否有Java的c ++等价物

try {
    ...
}
catch (Throwable t) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试调试调用本机Windows函数的Java/jni代码,并且虚拟机不断崩溃.本机代码在单元测试中看起来很好,并且在通过jni调用时似乎只会崩溃.一般的异常捕获机制将证明是非常有用的.

c++ exception

226
推荐指数
12
解决办法
33万
查看次数

在Linux上尝试/捕获分段错误

我有一个Linux C++应用程序,我想在解除引用之前测试对象指针的有效性.但是,由于分段错误,try/catch在Linux上不起作用.如何才能做到这一点?

c++ linux pointers segmentation-fault

10
推荐指数
3
解决办法
2万
查看次数

Linux崩溃分析

在Linux上分析崩溃的最佳方法是什么?

我们希望构建软件并向测试人员提供发布版本.测试人员可能无法记住如何重现崩溃或崩溃可能完全断断续续.他们的机器上也没有开发环境.该软件使用C/C++编写,并编译为本机代码以进行分发.

c c++ linux crash

9
推荐指数
2
解决办法
3886
查看次数

程序意外终止后如何释放资源?

我正在Visual Studio 2019上编写控制台C ++程序,其中使用了第三方相机库。这个lib需要我在程序的开始处调用libInitialize()并在程序结束时调用libTerminate()。如果我不调用libTerminate(),则下次启动该程序时,我将收到一条错误消息,指出该相机仍在被其他程序使用。只要我正确退出程序,一切都很好。但是,如果我通过关闭控制台窗口或按调试器中的停止按钮来终止程序,则永远不会调用libTerminate()。所以我的问题是,每当程序意外终止时,是否有任何方法可以执行代码?

c++ windows

7
推荐指数
0
解决办法
106
查看次数

linux3/gcc46:“-fnon-call-exceptions”,哪些信号正在捕获指令?

(环境:Linux 3.0 / x86_64 上 -std=gnu++0x 模式下的 gcc/g++ 4.6.1...)

#include <stdlib.h>
#include <signal.h>
#include <iostream>

using namespace std;

class SegmentationFault {};

void ThrowSegmentationFault(int)
{
    throw SegmentationFault();
}

void ohno(char* x)
{
    *x = 42;
}

int main()
{
    signal(SIGSEGV, ThrowSegmentationFault);

    try
    {
        ohno(0);
    }
    catch (const SegmentationFault&)
    {
        cout << "success" << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过使用-fnon-call-exceptions标志编译上面的代码,它允许SIGSEGV信号处理程序抛出异常,并且在运行时它将打印“成功”。-fnon-call-exceptions gcc 标志的文档如下:

生成允许捕获指令抛出异常的代码。请注意,这需要特定于平台的运行时支持,但并非所有地方都存在。此外,它只允许捕获指令抛出异常,即内存引用或浮点指令。它不允许从任意信号处理程序(例如 SIGALRM)引发异常。

我的问题是哪些信号正在捕获指令,哪些信号不是?

#define SIGHUP           1
#define SIGINT           2
#define SIGQUIT          3
#define SIGILL           4
#define SIGTRAP          5 …
Run Code Online (Sandbox Code Playgroud)

c++ linux gcc glibc g++

6
推荐指数
1
解决办法
2566
查看次数

优雅地捕获加载的动态库中发生的分段错误

我正在编写一个使用外部动态库的.NET 4.5控制台应用程序,但我无权访问这些库的源代码。问题是这些 DLL 可能会引发分段错误信号,当这种情况发生时,整个进程会立即终止。我当前的解决方案是将这个依赖于 dll 的代码作为单独的进程运行,然后检索结果,但我注意到这个解决方案效率不是很高。

为了说明我的问题,我制作了一个示例代码:

#include <signal.h>
__declspec(dllexport) void err(void)
{
    raise(SIGSEGV);
}
Run Code Online (Sandbox Code Playgroud)
using System;
using System.Runtime.InteropServices;
namespace ConsoleApp
{
    class Program
    {
        [DllImport("segFault.dll")]
        extern static void err();

        static void Main(string[] args)
        {
            try
            {
                Console.Write("started");
                err();
                Console.WriteLine("running");
            }
            catch(Exception ex)
            {
                Console.WriteLine("Exception:" + ex.Message);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这样的设置,我永远不会到达“正在运行”或“异常:”代码,因为整个过程将在到达段错误信号时终止。我尝试过扰乱应用程序域,但也没有取得任何巨大的成功。

using System;
using System.Linq;
using System.Runtime.InteropServices;
namespace ConsoleApp
{
    class Program
    {
        [DllImport("segFault.dll")]
        extern static void err();

        static void Main(string[] args)
        {
            if …
Run Code Online (Sandbox Code Playgroud)

c# segmentation-fault

5
推荐指数
0
解决办法
1060
查看次数

使用“尝试”来避免分段错误

最近在我的一个程序中,我遇到了分段错误问题。我设法找到引起问题的线,但没有找到解决它的方法。

该行:

self.window_player.add(self.vlc)
Run Code Online (Sandbox Code Playgroud)

在哪里self.vlc是一个小部件,self.window_playerGtk.Window()在林间空地中创建的空。

该行位于__init__我的程序的,因此实际上此问题仅在启动该程序时发生。奇怪的事实是,错误仅显示为(启动程序的)10次​​中的1次

错误:这 Segmentation fault是我从终端获得的唯一输出

所以我尝试了:

while True:
    try:
        self.window_player.add(self.vlc)
        break
    except:
        print "segmentation"
Run Code Online (Sandbox Code Playgroud)

问题是分割错误似乎并没有被try!排除。

python segmentation-fault pygobject gtk3

4
推荐指数
1
解决办法
2571
查看次数

可以在C程序中终止时调用代码吗?

在C++中,如果我希望代码调用一些不好的事情,我可以将代码放在析构函数或try-catch中.

在C中是否有类似的技术,如果程序意外终止,我可以调用特定的例程(清理资源)?

c

4
推荐指数
1
解决办法
111
查看次数

如何从 C++ 上的分段错误中恢复?

我有一些生产关键代码必须继续运行。

将代码视为

while (true){
   init();
   do_important_things();  //segfault here
   clean();
}
Run Code Online (Sandbox Code Playgroud)

我不能相信代码没有错误,并且我需要能够记录问题以便稍后进行调查。

这次,我知道代码中的某个地方抛出了分段错误,我需要至少能够记录该错误,然后重新开始一切。

阅读这里有一些解决方案,但每个解决方案后面都是一场激烈的争论,声称该解决方案实际上弊大于利,没有真正的解释。我还找到了我考虑使用的这个答案,但我不确定它是否适合我的用例。

那么,从 C++ 分段错误中恢复的最佳方法是什么?

c++ error-handling signals exception segmentation-fault

3
推荐指数
1
解决办法
1757
查看次数

是否可以绕过或捕获"分段故障"

我正在使用外部库(xqilla)来实现c ++,它以某些uri的分段错误结束,有些则不然.我对整个C世界都有点新意,我猜我不可能把它当成例外,但是我需要问一下它是否可能.任何其他解决方案当然也会受到欢迎.

那么有没有替代尝试捕获"分段错误"错误?

c c++

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