执行dotnet run时触发栈破坏检测错误,请求解决方法
解决.NET 3.0在Pop!_OS 18.10上运行时的栈溢出检测错误
这个*** stack smashing detected ***错误在旧版本.NET和停止支持的Ubuntu衍生发行版上确实挺常见的,我来分享几个可行的排查和解决步骤:
1. 清理项目缓存,重新构建
有时候项目的缓存文件损坏会导致这类奇怪的运行时错误,先试试最基础的操作:
- 删除项目目录下的
bin和obj文件夹 - 重新执行
dotnet run
2. 更换为更兼容的.NET LTS版本
Pop!_OS 18.10已经停止官方支持,系统库版本和.NET 3.0的兼容性不佳。推荐换成长期支持的.NET 2.1版本(对旧系统适配更好):
- 先卸载当前的.NET 3.0 SDK:
sudo apt remove dotnet-sdk-3.0 - 添加微软官方软件源并安装.NET 2.1 SDK:
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get update sudo apt-get install dotnet-sdk-2.1 - 重新创建console项目并运行,看看问题是否解决
3. 检查系统glibc版本
栈溢出检测是glibc的安全机制之一,Pop!_OS 18.10的glibc版本可能和.NET 3.0的JIT编译逻辑冲突:
- 执行
ldd --version查看当前glibc版本,如果低于2.29,建议考虑升级系统 - 由于Pop!_OS 18.10已停止支持,最好升级到长期支持的版本(比如Pop!_OS 22.04 LTS),这样既能解决兼容性问题,也能获得系统安全更新
4. 临时禁用栈溢出检测(仅用于测试)
如果只是临时验证功能,可以通过环境变量绕过检测(不推荐用于生产环境):
export GCC_EXEC_PREFIX="" export LD_PRELOAD="" dotnet run
以上步骤应该能帮你解决问题,最稳妥的方案还是升级到受支持的系统版本,避免后续出现更多兼容性问题。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

