将Delphi.dcu反编译为.pas

将Delphi.dcu反编译为.pas,delphi,syntax-error,decompiling,Delphi,Syntax Error,Decompiling,我正在运行RAD Studio Delphi XE2。似乎对我的一个.pas文件做了一些奇怪的操作。我的unit1.pas中的许多行已被替换为简单的“º”,其他行已丢失。我在原始文件中间的某个地方留下了一小部分代码。我可以通过某种方式反编译unit1.dcu来获取原始的unit1.pas吗 还有,为什么会发生这种情况?你以前听说过这个吗?代码运行,但很明显,我不能编辑任何我看不见的内容。即使您可以对其进行反编译,与原始代码相比,它可能是一个无法维护的混乱 相反,请尝试查找项目的\u Histor

我正在运行RAD Studio Delphi XE2。似乎对我的一个.pas文件做了一些奇怪的操作。我的unit1.pas中的许多行已被替换为简单的“º”,其他行已丢失。我在原始文件中间的某个地方留下了一小部分代码。我可以通过某种方式反编译unit1.dcu来获取原始的unit1.pas吗


还有,为什么会发生这种情况?你以前听说过这个吗?代码运行,但很明显,我不能编辑任何我看不见的内容。

即使您可以对其进行反编译,与原始代码相比,它可能是一个无法维护的混乱

相反,请尝试查找项目的
\u History
文件夹。您应该找到代码的旧版本。选择最新的;-)

为什么会发生这种情况


有很多原因。IDE中的Bug?IDE插件或自定义组件中的Bug?代码中的错误可能会覆盖源文件?

您无法将.dcu文件反编译到原始源文件。从源代码到可执行代码的转换过程中会丢失信息。类型声明、变量名、方法名、代码布局等都不存在于编译器的输出中。编译是一个单向过程


如果您使用修订控制,您将能够从存储库中获取最新版本。如果您不使用版本控制,那么您刚刚从中吸取了教训,在没有版本控制的情况下,您再也不会尝试执行软件开发。

只需从版本控制存储库中签出一份新副本,或从备份中恢复即可。(很难说会发生什么,因为您引用了一个字符并说“缺少其他字符”。)通过反编译,您永远不会得到“原始unit1.pas”,因为变量名和其他信息根本不在.dcu文件中。你可能会得到一些可以挽救的逻辑,但不会是“unit1.pas”。谢谢Ken。我从历史标签中得到了一个旧版本,幸运的是我没有做太多。我在网络上使用了一个文件,我不知道这是否会导致这种情况,但从现在起我将使用本地副本。你真的应该得到一个真正的VCS。Subversion、Mercurial或Git都是免费的,很容易配置和使用(有些甚至带有GUI或Windows资源管理器扩展,以便更容易使用),XE附带了对内置SVN的支持。它真的可以节省你的背部。:-)IDE的_历史记录不是一个真正的版本控制系统,默认情况下它只存储最后10个副本(尽管您可以增加该数字)。实际上(刚刚编辑-抱歉)我使用的是XE2-但我想它是一样的。:-)我查了两个Git。我现在将更加认真地关注它们。请尝试在另一个(文本)编辑器中打开.pas文件,以防出现显示问题,并在另一台计算机中打开,以防该计算机出现问题。谢谢。我怀疑我的代码中有任何东西会导致这种情况。这可能与访问基于网络的文件,而不是本地副本或网络共享有关吗?也许你的一个奶牛工人喜欢开玩笑。。。?我会将源代码保存在本地,并将它们推送到基于网络的版本控制。Delphi的
\uuu history
文件夹对于这些短期的东西很有用,但我经常发现自己陷入了一个巨大的编码漏洞,需要一路后退直到一天的开始<代码>\u历史记录在这方面通常不会有帮助。我对此表示怀疑-它们是网络上保存的个人文件,因此我可以随时访问它们。这是个谜。从现在起,我将在本地工作,推拉。谢谢。幸运的是,我有一个最近的版本,我恢复到它只是几行不同的代码@特洛伊安我有一句话,“如果你不使用修订控制,你就不会进行软件开发”。事实上,.dcu文件与链接的二进制文件相比包含了相当多的信息。函数名和类型信息肯定存在。甚至可能是局部变量名。@DavidHeffernan:看一看,例如。“类型声明、变量名、方法名、代码布局等根本不在编译器的输出中。”