在屎山代码中快速找到想要的代码法-锁表法(C#)

由于本人水平有限,文中有写得不对的地方请指正,本文的方法有些投机取巧,实在是没招的情况下可以酌情使用,如有侵权,请联系删除。

前几天接到一个需求,要在医嘱签署时对检验项目进行分方操作,分方规则调用第三方的接口获取(注:我们公司是做his系统的),我也是刚跳槽来到这家公司不久,有些代码还不熟悉。要对检验项目进行分方操作,我大概知道是对处方表met_ord_recipedetail(这是我们公司的处方表)的处方号进行修改,虽然找到"签署"按钮对应代码的入口,但里面的业务逻辑牵扯较多,再加上命名不规范以及多个功能封装在一个命名不严谨的方法里面,想要找到对处方表met_ord_recipedetail操作的那一小段代码逻辑,还是很费劲的。我最常用的方法是大胆猜测代码可能出现的位置,发现不管用,反正那天早上尝试了很多靠谱和不靠谱的方法,依旧没找到。中午去吃饭的路上脑袋里突然蹦出一个想法,既然我知道代码会修改处方表met_ord_recipedetail(insert或者update,select的不行),那我岂不是可以手工锁住该表,代码调用的地方肯定会堵塞,然后通过反编译调试工具dnSpy就能轻松找到要修改的代码位置。后面通过该方法,还真见鬼的几秒就给我找到了。

注意:千万不能在真实环境的数据库锁表,要在开发库上并且在人少使用系统的情况下操作

本文测试的环境:

1   oracle 19c数据库

2   dnSpy v6.1.8反编译调试工具

3   我们公司的客户端系统(有点low,直接通过sql的方式连接数据库的,不过管它的,能赚到钱就行)

废话不多说,跟着我一起来体验一把吧!

步骤1:打开我们公司的客户端系统,开好医嘱等待通过点击"签发"按钮签署医嘱,如图:

 

步骤2:打开反编译调试工具dnSpy,并附加客户端程序,如下图:

 步骤3:在签发按钮代码入口打上断电,如图:

 步骤4:点击签发按钮,进入断点如图:

步骤5:在数据库中手工锁表(当然也得会解锁)

我在pl-sql Developer工具中进行操作:

lock table met_ord_recipedetail in share mode nowait;

步骤6:点击反编译工具的继续按钮继续运行:

 

 由于我们的系统是在UI线程进行数据库操作,所以很明显就看到系统被堵塞了,这时我们就可以点击反编译工具的"全部中断"按钮看代码的堆栈了,如下图:

 

 

 从上图中我们就可以看到对应的堆栈了

步骤7:解锁表,oracle的使用rollback即可

 

好了,本文到此结束

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在编写C#代码时,有几个常见的问题需要注意: 1. 命名规范:遵循命名规范可以提高代码的可读性。使用有意义的变量、方和类名,并遵循驼峰命名或Pascal命名等约定。 2. 异常处理:在适当的情况下,使用try-catch语句来捕获和处理异常。异常处理可以防止程序崩溃,并提供错误信息以供调试和修复。 3. 内存管理:确保在不再需要时及时释放资源,如关闭文件、释放数据库连接等。使用using语句可以自动管理一些资源的释放。 4. 空引用检查:避免使用空引用,可以使用条件语句或空值合并操作符(??)来检查和处理可能为空的引用。 5. 字符串处理:注意字符串的拼接和格式化,尽量使用StringBuilder类来处理大量字符串拼接,以提高性能。 6. 数据类型转换:在进行数据类型转换时,确保数据的有效性和安全性。使用类型转换方(如Convert类或强制类型转换)时,注意可能出现的异常情况。 7. 代码注释:为了增加代码的可读性和可维护性,使用注释来解释代码的意图、算和重要细节。 8. 安全性考虑:在处理用户输入或外部数据时,要进行有效的输入验证和防御性编程,以防止安全漏洞和恶意攻击。 9. 性能优化:在需要的情况下,进行性能优化,避免不必要的循环、重复计算和内存占用等问题。 10. 代码复用:尽量遵循面向对象编程的原则,提取可复用的代码片段并封装成类或方,以便在不同的地方重用。 这些问题只是C#代码需要注意的一些方面,根据具体的项目和需求,可能还会有其他需要关注的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值