遵循代码流

时间:2012-09-07 09:14:25

标签: c++ debugging execution flow breakpoints

我正在尝试在我最喜欢的游戏之一中学习关卡格式,这几乎完全没有文档记录。基本上,描述关卡格式的唯一文档只是简单地说First 12 bytes: header
4 following bytes: number of materials
x next bytes: array of materials,以及类似的东西。

我对十六进制缺乏经验,并不完全明白他们在说什么。但是,有一个关卡编辑器,源代码可以在谷歌代码上免费获得。我想把它添加到我的visual studio中,并试着通过阅读关卡编辑器打开文件的方式来学习关卡格式。

然而,另一个问题,我不知道c ++(我知道python)。这意味着我可能无法找到代码的哪一部分读取字节等等。

我正在寻找的东西,可以让我在执行过程中遵循代码流程。基本上类似于在每一行上设置断点的行为,并让它向我展示在读取文件内容时正在执行的代码的特定部分。 但是,显然在每一行设置断点都非常混乱和缓慢。我正在寻找能够简单地向我展示在编辑器中打开文件时正在运行的代码的内容。

有谁知道我能做什么?感谢。

2 个答案:

答案 0 :(得分:3)

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

E.g。在Visual C ++ 2010中,密钥F10执行一步;您还可以使用F11“进入”下一个语句(例如方法调用)。

在您的情况下,将断点设置为开始读取级别文件的位置,然后从那里继续。找到文件读取的位置也是一个难题 - 取决于代码的清晰度;但如果它是编写良好的代码,应该有一个名称中的“读取”方法或“加载”或类似的东西 - 你会弄明白的!

尽管如此,您可能必须至少知道一些基本的C ++语法才能跟踪发生的事情。

我还建议阅读Debugging HowTo(例如this one)。

答案 1 :(得分:1)

您发现如此模糊的文档只是级别格式规范,在大多数情况下,您只需要规范。你需要一些额外的文件阅读经验。

在阅读文件时,你必须要做几件事情。

1)当逐字节(8位)读取时,顺序没有改变。

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

(例如,当endiannes改变时,0x12345678变为0x78563412)

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

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

这很有用,因为你有部分规范(比如原始文档),它展示了如何从规范开始创建一个加载器。这就是你所需要的。这是C,但在这种情况下与C ++没有太大区别。

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

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

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

相关问题