Cookingall-in-one 调试镜像
核心代码代码的原理很简单dotnet-coverage collect --session-id ${sessionID} cmd: 通过 dotnet-coverage collect 来启动程序并且创建一个 session iddotnet-coverage snapshot --output ${coverageFile} ${sessionID}: 运行期通过 session id 采集 coverage 信息到一个文件dotnet-coverage merge {coverageFile} --output {coberturaFile} --output-format cobertura: 把 coverage 文件转换为 xml 格式reportgenerator -reports:{coberturaFile} -targetdir:{htmlDir} -reporttypes:Html: 把 xml 文件渲染为 htmlpublic static async Task CodeCoverageCallbackAsync(HttpContext ctx) { var sessionId ctx.Request.Query[session-id].FirstOrDefault(); if (string.IsNullOrEmpty(sessionId)) { ctx.Response.StatusCode 400; await ctx.Response.WriteAsync(HtmlError(Missing query parameter: session-id)); return; } var uuid Guid.NewGuid().ToString(N); var coverageFile $/tmp/{uuid}.coverage; var coberturaFile $/tmp/{uuid}.cobertura.xml; var htmlDir $/tmp/html_{uuid}/; // Step 1: snapshot var (snapshotOk, snapshotErr) await RunCommandAsync( dotnet-coverage, $snapshot --output {coverageFile} {sessionId}); if (!snapshotOk) { ctx.Response.StatusCode 500; ctx.Response.ContentType text/html; charsetutf-8; await ctx.Response.WriteAsync(HtmlError($dotnet-coverage snapshot failed:\n{snapshotErr})); return; } // Step 2: convert to cobertura xml var (mergeOk, mergeErr) await RunCommandAsync( dotnet-coverage, $merge {coverageFile} --output {coberturaFile} --output-format cobertura); if (!mergeOk) { ctx.Response.StatusCode 500; ctx.Response.ContentType text/html; charsetutf-8; await ctx.Response.WriteAsync(HtmlError($dotnet-coverage merge failed:\n{mergeErr})); return; } // Step 3: generate html report var (reportOk, reportErr) await RunCommandAsync( reportgenerator, $-reports:{coberturaFile} -targetdir:{htmlDir} -reporttypes:Html); if (!reportOk) { ctx.Response.StatusCode 500; ctx.Response.ContentType text/html; charsetutf-8; await ctx.Response.WriteAsync(HtmlError($reportgenerator failed:\n{reportErr})); return; } ctx.Response.Redirect($/code_coverage_report/{uuid}/); }具体代码请看QiWa.DemoServer/src/CodeCoverage/CodeCoverage.cs at main · ahfuzhang/QiWa.DemoServer · GitHub编译 debug 版本的 dlldotnet publish $(PRJ).csproj \ -r linux-x64 \ -p:DefineConstantsUNIX -p:AllowUnsafeBlockstrue \ -p:StripSymbolsfalse \ -p:InvariantGlobalizationtrue \ -p:EventSourceSupporttrue \ -p:EmbedAllSourcestrue \ -p:DebugTypeportable \ -p:DebugSymbolstrue \ -p:Optimizefalse \ -p:CopyOutputSymbolsToPublishDirectorytrue \ -p:TieredCompilationfalse \ --self-contained false \ -c Debug -o $(BUILD_DIR)特别要注意不要加这些选项PublishAottrue : 触发 AOT 原生编译的核心标志StaticLinkedRuntimetrue / StaticExecutabletrue — 静态链接原生可执行文件PositionIndependentExecutabletrue — 仅对原生二进制有意义--self-contained true: 输出产物将为托管 DLL依赖系统安装的 .NET 运行时。为了保障工具集的版本一致性也可以使用 docker 中的命令来编译:docker run --rm \ -v ./:/app \ -w /app \ --user $(id -u):$(id -g) \ ahfuzhang/csharp-dbg-all-in-one:dotnet10 \ dotnet publish $(PRJ).csproj \ -r linux-x64 \ -p:DefineConstantsUNIX -p:AllowUnsafeBlockstrue \ -p:StripSymbolsfalse \ -p:InvariantGlobalizationtrue \ -p:EventSourceSupporttrue \ -p:EmbedAllSourcestrue \ -p:DebugTypeportable \ -p:DebugSymbolstrue \ -p:Optimizefalse \ -p:CopyOutputSymbolsToPublishDirectorytrue \ -p:TieredCompilationfalse \ --self-contained false \ -c Debug -o $(BUILD_DIR)在 all-in-one 镜像中启动服务器docker run --rm \ -v ./:/app \ -w /app \ --user $(id -u):$(id -g) \ --network host \ ahfuzhang/csharp-dbg-all-in-one:dotnet10 \ dotnet-coverage collect \ --session-id my-server-cov \ --output /tmp/demo_server.coverage \ dotnet $(BUILD_DIR)/QiWa.DemoServer.dll -- \ -log.leveldebug注意:要使用dotnet-coverage collect来启动--session-id my-server-cov这个参数指定了 session id 的名字叫做my-server-cov要记住这个名字dotnet xx.dll保障了程序使用 dotnet CLR 。如果静态编译的话可能就无法采集了--这个后面是服务器的命令行参数通过浏览器查看代码覆盖情况打开浏览器访问http://127.0.0.1:8091/code_coverage?session-idmy-server-cov注意要带上my-server-cov这个名字会触发后端运行命令并生成 html 报告

相关新闻

一台电脑多人同乐:Nucleus Co-Op如何让你和朋友们共享游戏世界?

一台电脑多人同乐:Nucleus Co-Op如何让你和朋友们共享游戏世界?

一台电脑多人同乐:Nucleus Co-Op如何让你和朋友们共享游戏世界? 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾想…

2026/6/29 11:14:05阅读更多 →
Cursor Free VIP终极指南:三步永久免费使用AI编程助手

Cursor Free VIP终极指南:三步永久免费使用AI编程助手

Cursor Free VIP终极指南:三步永久免费使用AI编程助手 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

2026/6/29 11:14:05阅读更多 →
Apache Shiro反序列化漏洞深度解析:从原理到实战代码审计

Apache Shiro反序列化漏洞深度解析:从原理到实战代码审计

1. 项目概述:从一次真实的应急响应说起去年,我参与了一次针对某中型互联网公司的应急响应。攻击者利用一个看似不起眼的登录接口,在几分钟内就拿到了服务器的最高权限。事后溯源,根因正是Apache Shiro框架的反序列化漏洞。这个案例…

2026/6/29 11:09:03阅读更多 →
5分钟终极解决国内Docker镜像拉取难题:DaoCloud镜像加速完整实战指南

5分钟终极解决国内Docker镜像拉取难题:DaoCloud镜像加速完整实战指南

5分钟终极解决国内Docker镜像拉取难题:DaoCloud镜像加速完整实战指南 【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 项目地址: https://gitcode.co…

2026/6/29 14:10:03阅读更多 →
Windows Cleaner:免费开源的系统清理神器,三步解决C盘爆红和电脑卡顿

Windows Cleaner:免费开源的系统清理神器,三步解决C盘爆红和电脑卡顿

Windows Cleaner:免费开源的系统清理神器,三步解决C盘爆红和电脑卡顿 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一…

2026/6/29 14:10:03阅读更多 →
PaddleSeg 实战:从零构建数据集到模型部署全链路解析

PaddleSeg 实战:从零构建数据集到模型部署全链路解析

1. 工业质检场景下的图像分割实战指南 在工业质检领域,图像分割技术正逐渐成为缺陷检测的核心手段。以零件表面划痕检测为例,传统人工检测每小时最多处理200-300个零件,而基于PaddleSeg的AI方案可以实现每秒10零件的自动检测,准确…

2026/6/29 14:10:03阅读更多 →
基于RKmedia的RV1109/RV1126人脸与车牌识别SDK实战:从部署到二次开发全解析

基于RKmedia的RV1109/RV1126人脸与车牌识别SDK实战:从部署到二次开发全解析

1. RKmedia与RV1109/RV1126平台概述 RV1109和RV1126是瑞芯微推出的两款高性能AI视觉处理芯片,专为边缘计算场景设计。这两款芯片都搭载了独立的NPU(神经网络处理单元),RV1109提供1.2TOPS算力,而RV1126则达到2.0TOPS&am…

2026/6/29 14:10:03阅读更多 →
汽车电子ASIC评估实战:从EVM硬件解析到GUI软件操作全流程

汽车电子ASIC评估实战:从EVM硬件解析到GUI软件操作全流程

1. 项目概述与EVM的核心价值在汽车电子,尤其是关乎行车安全的底盘控制领域,比如电子驻车制动(EPB),工程师在选型和前期开发阶段面临一个核心矛盾:芯片数据手册上的参数是静态的、理想的,但真实的…

2026/6/29 14:10:03阅读更多 →
从硬件信任根到数据保险箱:深入解析苹果安全隔区的纵深防御体系

从硬件信任根到数据保险箱:深入解析苹果安全隔区的纵深防御体系

1. 苹果安全隔区的设计哲学:为什么需要"纵深防御"? 想象一下你的家有一扇坚固的大门,但窗户却敞开着——这显然不够安全。苹果的安全隔区(Secure Enclave)采用的正是"纵深防御"理念,就…

2026/6/29 14:05:01阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中的纹理制作而烦恼吗?…

2026/6/29 0:01:47阅读更多 →
OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单! 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCA…

2026/6/29 0:01:47阅读更多 →
终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了Windows 11系统自带的20…

2026/6/29 0:01:47阅读更多 →