一:背景 1. 讲故事 调试训练营里的一位学员前些天找到我,说他们跑在k8s中的程序崩掉了不知道怎么回事?日志也没有记录到,让我帮他看看,dump也抓到了,既然抓到了那就看看吧。 二:程序为什么会崩溃 1. 崩溃原因 linux 上的崩溃分析没有windows上那么方便,但还是可以分析的,先通过 ! ...
一、前言 超长路径(MAX_PATH)的问题,在很多地方都可能遇到,常见的解决办法无非三种:添加前缀\\?\、app.config添加配置、修改注册表等。 而对于其它第三方的DLL,我们如何去从外部解决呢?答案是:反射。 本篇文章,我们就以DotNetZip为例,一步步来解决超长路径的问题。 **相 ...
1.ERP(企业资源计划) 英文全称:Enterprise Resource Planning 定义:由美国Gartner Group公司于1990年提出,是以管理会计为核心可以提供跨地区跨部门、甚至于跨公司整合实施信息的企业管理软件。企业资源计划是指建立在信息技术基础上,以系统化的管理思想,为企业 ...
目录C#实现欧姆龙 HostLink 通讯协议库背景介绍欧姆龙 PLC 内存区域介绍欧姆龙 PLC 数据类型对应欧姆龙 PLC 与 PC 的 RS232 接线线序HostLink通讯报文分析C-Mode通讯报文分析FINS-Mode通讯报文分析HostLink通讯协议库的C#实现核心实现(FCS校验 ...
Blazor Hybrid 插件使采用了 WinFormedge 的应用程序能够无缝集成 Blazor 组件。通过这个插件,开发者可以利用 Blazor 的现代 Web UI 框架与传统的 WinForms 相结合,使用 C#、HTML 和 CSS 构建交互式、基于组件的用户界面。这种混合方法将 W... ...
一、前言 就像开发的教程都从“Hello World!”开篇一样,系列开始,我们也从一个最最简单的功能开始:画一个能拖动的矩形。 顺便说一下,另一篇教程:(原创)[C#] GDI+ 之鼠标交互:原理、示例、一步步深入、性能优化 讲的更详细和深入,可以作为补充。 就让我们从一个能拖动的矩形开始我们的流 ...
一:背景 1. 讲故事 上一篇我们说到了 minhook 的一个简单使用,这一篇给大家分享一个 minhook 在 dump 分析中的实战,先看下面的线程栈。 0:044> ~~[138c]s win32u!NtUserMessageCall+0x14: 00007ffc`5c891184 c3 r ...
一、有什么用? 问:现在这个年代哪些场景还需要GDI+? 答:很少,主要是在上位机,复杂一点的自定义控件几乎全由GDI+绘制而成。而且很多工业设备的电脑性能差,WPF等带不起来,只能是Winform。 问:本系列文章的对于GDI+掌握有什么帮助? 答:这是一个完整的完全由GDI+实现的复杂程序,对于 ...
我让DeepSeek帮我写了一段使用 CancellationTokenSource 取消任务的简单示例如下: 取消任务的简单示例 using System.Threading.Tasks; using System.Threading; public async Task Test() { var ...
最近碰到一个Html转PDF的需求,看了一下基本上都是需要依赖Wkhtmltopdf,需要在Windows或者linux安装这个可以后使用。找了一下选择了HtmlToPDFCore,这个库是对Wkhtmltopdf.NetCore简单二次封装,这个库的好处就是通过NuGet安装HtmlToPDFCo ...
前言 自从.NET Framework 3.5提供了LINQ之后,集合数据查询基本被LINQ统一了。这大幅提高了编写数据查询代码的效率和质量,但是在需要编写动态查询的时候反而很困难,特别是最常用的where和order by子句,他们的参数是Expression。编写静态查询的时候编译器会自动把代码 ...
中间件引起的接口请求参数被拦截,导致参数一直是null,这问题困扰了我很久,值得记录 1.场景 1.1 客户端使用framework4.8做一个接口请求发送: public static class ApiHelper { private static string Internal_ApiUrl ...
关于多线程本质的思考和使用技巧 前言 近来,公司因为项目过多,人手不足,一直在进行面试。过程中同事总是问道:多线程是什么,谈谈你对多线程的理解?以我愚见,这并不是一个可以在面试中快速回答的问题,如果面试的时候向我提问,我觉得我无法有条理的回答这个问题。因此,以总结多线程开发为目标,我写下这篇笔记 ...
一:背景 1. 讲故事 当 .NET程序 在Linux上崩溃时,我们可以配置一些参考拿到对应程序的core文件,拿到core文件后用windbg打开,往往会看到这样的一句信息 Signal SIGABRT code SI_USER (Sent by kill, sigsend, raise),参考如 ...
有小伙伴反馈,System.Text.Json使用的序列化问题,经了解是System.Text.Json不兼容System.Runtime.Serialization.DataMemenber属性标记 来个demo, 1 var testMode = new TestMode(); 2 testMo ...
这里只贴出支付的操作,如果 需要其它方法(退款、查询 、关闭订单等)可以发邮件9067874006@qq.com。 需要准备的参数 AppID(小程序ID):wx7405 9e7d B2B商户号:17 637 沙箱AppKey:NYf9s TvgXGCVqf 或 现网AppKey:HcRiLtJa ...
一:背景 1. 讲故事 本来想研究一下 IL编织和反向补丁的相关harmony知识,看了下其实这些东西对 .NET高级调试 没什么帮助,所以本篇就来说一些比较实用的反射工具包吧。 二:反射工具包 1. AccessTools AccessTools这个工具包用来简化反射操作,你如果看过 harmon ...
锁是用来防止在多用户或多线程环境中同时对同一数据进行修改,从而避免数据冲突和损坏。 更新锁 用于避免死锁的锁类型,通常用于对行进行更新时。它防止其他事务对资源进行修改,但允许其他事务进行读取。 示例:在更新某一行数据之前,SQL Server 会首先加上更新锁。 使用 WITH (UPDLOCK) ...
一:背景 1. 讲故事 开局一张表,故事全靠编,为了能够承上启下,先把参数列表放出来。 参数名 说明 __instance 访问非静态方法的实例(类似 this)。 __result 获取/修改返回值,要想修改用 ref。 __resultRef 修改返回引用(方法返回是 ref 返回 )。 __s ...
一:背景 1. 讲故事 前面几篇我们说完了 harmony 的几个注入点,这篇我们聚焦注入点可接收的几类参数的解读,非常有意思,在.NET高级调试 视角下也是非常重要的,到底是哪些参数,用一张表格整理如下: 参数名 说明 __instance 访问非静态方法的实例(类似 this)。 __resul ...