【西天取经】第一招:如何调试NET CORE的源代码(微软、第三方)
How to: Debug .NET Framework source
如何设置Visual Studio开发工具调试NET源代码:
如何关联所需要调试的pdb文件路径:
一定要从Nuget上面下载带有pdb文件的版本引用到你的项目里,这个只能是你下载之后,去本地磁盘目录找有没有了,有的版本真的就是就没有pdb文件,所以只能使用不能调试。
比如:这个的 System.IdentityModel.Tokens.Jwt ,如果是5.6.0版本就没有对应的pdb文件,只能用5.4.0这个版本进行调试。十分不爽
5.6.0版本的是真没有pdb,5.4.0这个版本才有pdb
开发工具里需要找到"模块"的窗口,在"调试"菜单里的子菜单项里找到"模块"菜单项。
要调试的代码所在的dll文件,可以通过搜索的方式查看某一个dll是否已经是被已加载符号的状态,如果没有,可以通过右键菜单完成。
选中你要加载的dll文件,右键菜单里关联对应的pdb文件。
符号状态:变成已加载符号的状态就可以调试源代码了。
net的源码调试比java的复杂多了,这是因为net程序编译之后生成的dll文件里没有调试信息,调试信息放在pdb文件里,在调试源码的时候必须要先有对应的符号信息才可以。
如果你使用JetBrains Rider这个NET开发工具那就可以直接调试源代码啥也不用设置,吃不吃惊,牛不牛逼。谁是宇宙第一IDE,现在是不是一目了然了。(我平时主要用它调试和查看源代码)
后面又新知道的反编译和调试可以在一起的工具: dnSpy (也很牛逼,但是我没用)
总结:
想学好net比学好java门槛高多了,所以这也是为什么大家都爱用java的一个主要原因之一。
不要觉得这个门槛无所谓,好比平时我们工作中也基本用不到调试源代码,但是如果你想做好一个大项目,那么学习源码,调试源码就是一个必经之路,而微软在这个地方给你设置了一个非常高的门槛,对比这个门槛在java那里根本没有,没有对比就没有伤害。
java查看源码和调试源码是非常简单容易的,基本不用进行任何附加设置,就能直接调试项目里引用别人写的jar。
我现在正好项目用到JWT,我需要一个更安全的JWT,不想在别人拿到access token之后,访问这个jwt.io网站里看到我给他的信息,因此我需要调试源代码,看看到底这个JWT是如何生成,如何验证的,我学习之后,会重新修改或者重新定义一个我自己认为更安全的JWT数据给我的下游客户。而目前市面上我能找到的关于OAuth2.0的NET CORE的例子里,基本上都是最简单的使用方法不够实用。就我目前的水平还没有达到熟练掌握OAuth2.0这个开发技术,所以只能自定义实现我认为更安全的JWT给下游客户了。
- 被暴露的JWT信息(不安全)
- 不被暴露的JWT信息:(加密之后给客户端,服务器端能加密能解密的JWT才是更安全的使用方式。)
就凭这一个骚操作,又可以秒了网上很多介绍JWT的文章了,既实用又安全的骚操作!