我如何学习遵循我不懂的语言的代码流程?

问题描述 投票:0回答:2

我正在尝试学习我最喜欢的游戏之一的关卡格式,这几乎完全没有记录。基本上,描述关卡格式的唯一文档就是简单地说:

First 12 bytes: header

4 following bytes: number of materials

x next bytes: array of materials

诸如此类的事情。

我对十六进制非常缺乏经验,不完全理解他们在说什么。然而,有一个关卡编辑器,并且源代码可以在谷歌代码上免费获得。我正在考虑将其添加到我的视觉工作室中,并尝试通过阅读关卡编辑器如何打开文件来学习关卡格式。

但是,另一个问题,我不懂C++(我懂Python)。这意味着我可能无法找到代码的哪一部分读取字节之类的。

我正在寻找能让我在执行过程中遵循代码流程的东西。本质上,其作用类似于在每一行上设置断点,并让它显示在读取文件内容时正在执行代码的特定部分。

但是,显然在每一行上设置断点是非常混乱和缓慢的。我正在寻找一些东西,当我在编辑器中打开文件时,它可以简单地显示正在运行的代码。

有人知道我能做什么吗?

c++ debugging execution flow breakpoints
2个回答
3
投票

您正在寻找一种功能来从一个语句跳转到下一个语句;我知道的每个调试器都有这样的功能。首先在感兴趣区域的开头设置一个断点,然后从那里开始“单步执行”代码。

例如在 Visual C++ 2010 中,F10 键执行一步;您还可以使用 F11“单步执行”下一条语句(例如方法调用)。

在您的情况下,将断点设置为读取关卡文件的开始位置,然后从那里继续。找到读取文件的位置也可能是一个难题 - 取决于代码的清晰度;但如果代码写得好,应该有一个名称中带有“read”或“load”或类似内容的方法 - 你会明白的!

不过,您可能必须至少了解一些基本的 C++ 语法才能跟上正在发生的事情。

我还建议阅读调试方法(例如这个)。


1
投票

你觉得晦涩难懂的文档,只是关卡格式规范,大多数情况下,规范就够了。您还需要一些额外的文件读取经验。

读取文件时,您必须注意一些事情。

1) 逐字节(8 位)读取时顺序不变。

2)一次读取32位时,字节顺序可以根据机器的字节顺序改变。

(例如当字节序改变时0x12345678变成0x78563412)

有一个非常古老的教程可以帮助您加载 3D 模型,帮助我开始使用文件:

http://www.spacesimulator.net/wiki/index.php?title=教程:3ds_Loader

这很有用,因为您拥有部分规范(如原始文档中的内容),并且它展示了如何从规范开始创建加载程序。这就是你所需要的。那是 C,但在这种情况下与 C++ 没有太大区别。

如果您需要一些其他简单的文件格式规范以及相关的文件加载器以使事情更清晰,您还可以查看 libktx 和 ktx 规范:

http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/

如果我没记错的话,还有一个非官方的 C++ KTX 加载器,如果您打算编写 C++ oop 代码而不是 C,您可以看看。

© www.soinside.com 2019 - 2024. All rights reserved.