Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否从.NET DLL文件生成PDB?_C#_.net_Debugging_Pdb Files_Disassembly - Fatal编程技术网

C# 是否从.NET DLL文件生成PDB?

C# 是否从.NET DLL文件生成PDB?,c#,.net,debugging,pdb-files,disassembly,C#,.net,Debugging,Pdb Files,Disassembly,我需要一些可以从DLL文件C.NET代码生成PDB的东西,有没有免费的程序可以这样做?您需要源代码才能生成PDB。PDB包含与DLL相关的调试符号,通常与DLL一起构建。要启用生成pdb文件,请转到项目属性、生成选项卡、高级。。。按钮,然后在“调试信息”字段中选择“仅pdb”或“完整”: 如果您需要在没有源代码的情况下调试第三方程序集,那么dotPeek和ReSharper将非常有帮助,可以选择从DLL生成PDB。在ReSharper中,可以通过ReSharper>Windows>Assembl

我需要一些可以从DLL文件C.NET代码生成PDB的东西,有没有免费的程序可以这样做?

您需要源代码才能生成PDB。

PDB包含与DLL相关的调试符号,通常与DLL一起构建。要启用生成pdb文件,请转到项目属性、生成选项卡、高级。。。按钮,然后在“调试信息”字段中选择“仅pdb”或“完整”:

如果您需要在没有源代码的情况下调试第三方程序集,那么dotPeek和ReSharper将非常有帮助,可以选择从DLL生成PDB。在ReSharper中,可以通过ReSharper>Windows>Assembly Explorer打开必要的程序集并单击Generate Pdb…:


即使没有源代码和代码混淆,也可以使用ildasm和ilasm重新编译来创建pdb:

通过ildasm反编译程序集:ildasm/out=assembly\u name.il assembly\u name.dll 与ilasm的组合:ilasm程序集_name.il/dll/pdb
实际上,从1.2版开始,您也可以使用dotPeek来实现这一点

在部件资源管理器中的部件上单击鼠标右键,然后选择“生成Pdb”。它还可以选择一次为所有引用的程序集生成文件


你可以用。这是一个方便的免费应用程序,可用于为托管dll分解和生成pdb。

换句话说:当您只有dll时,不可能创建pdb。好吧,我可以使用Reflector获取源代码,所以我需要获取pdb吗?请记住,您获得的源代码与编译dll时使用的源代码不同。如果有lambda表达式、迭代器等等,那将是一场噩梦。。。更不用说混淆了。但是假设你有一些源代码,你给编译器提供了/pdb选项。@BrunoLM Reflector Pro他们给你的15天试用期正好可以做到这一点-它将反编译整个程序集,并将构建一个pdb,以便你可以在其中进行调试。这是一个有点误导性的答案@Rup是正确的,我在过去使用过这个选项,它工作得非常好!理论上,这是可以做到的,因为使用.NETDLL可以使原始源代码在实验误差范围内。唯一缺失的是PDB文件的格式,这是一个严密保密的秘密。Reflector可以获取dll并将其转换为解决方案,您可以使用VisualStudio编译它,同时生成PDB。您可以使用Visual Studio为您生成PDB-因为它知道秘密格式。与结合使用时,这是一个不错的选项-但是,源单步执行将是IL行,而不是c或vb.net。如果程序集不包含调试目录,如果在重新创建dll/EXE之前将此解决方案与上一个答案结合起来并删除.il文件,它仍然可以工作。是否有方法防止它生成如此多的子文件夹?