#include <iostream>
# define _DLLExport extern "C" __declspec (dllexport)
void signalHandler(int signum)
{
// TODO:处理信号
// 终止程序
exit(signum);
}
_DLLExport void cpp_raise_sigsegv()
{
// 捕获SIGSEGV
signal(SIGSEGV, signalHandler);
// 如下会抛出一个 SIGSEGV信号,SIGSEGV的意思是访问了非法内存
int *p = NULL;
*p = 5;
// 直接抛出一个SIGSEGV信号
//raise(SIGSEGV);
}
使用g++编译
导入到项目
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
public class Main : MonoBehaviour
{
public Button btn;
void Start()
{
btn.onClick.AddListener(() =>
{
Debug.Log("cpp_raise_sigsegv");
cpp_raise_sigsegv();
});
}
[DllImport("cppDll")]
private static extern void cpp_raise_sigsegv();
}