巨大的C文件调试问题

时间:2010-05-20 15:56:26

标签: c++ c visual-studio

我的项目中有一个源文件,它有超过65,536个代码行(确切地说是112,444行)。我正在使用“sqlite amalgamation”,它出现在一个巨大的源文件中。

我正在使用MSVC 2005.问题在调试期间到来。一切都编译和链接确定。但是当我试图使用调试器进入函数时 - 它显示的代码行不正确。

有趣的是,正确的行号与调试器显示的行号之间的差异正好是65536.这使我怀疑(几乎可以确定)某些无符号短溢出。

我也怀疑它不是MSVC本身的错误。也许这是调试信息格式的限制。也就是说,MSVC使用的调试信息格式将行号存储为2字节短路。

有什么可以做的吗(除了将大文件切成几个较小的文件)?

6 个答案:

答案 0 :(得分:9)

根据MS主持人的说法,这只是调试器的一个已知问题(编译器似乎正如您所指出的那样处理它)。除了使用较短的源文件外,显然没有解决方法。请参阅对非常相似的问题here

的官方回复

答案 1 :(得分:1)

好吧,当我想看看sqlite是如何工作的时候,我拿了最后60000行,将它们移到另一个文件然后#include它。这很容易,并为我做了伎俩。此外,如果您这样做,请注意不要拆分#ifdef。

答案 2 :(得分:0)

如果查看符号调试信息的文档,您将看到用于行号的类型。例如,IDiaSession::findLinesByLinenumlinecolumn参数都属于DWORD类型。

编辑:正如@valdo指出的那样,这仍然不意味着调试器可以正常使用大行号。所以你必须使用更短的文件。不幸的是存在这样的限制,但即使没有,我仍然建议你拆分你的来源。

答案 3 :(得分:0)

您是否考虑过使用WinDBG?它非常强大,因为Windows团队使用它来调试O / S,并且那里有一些biiiig文件,或者至少在我上次查看的时候。

答案 4 :(得分:0)

对于文件行号不正确的任何人< 65536行:我发现我的问题是因为源文件中的不一致的行结尾。有129 \r个换行符,文件的其余部分为\r\n样式。调试器行和正确行之间的差异也是129。

答案 5 :(得分:-1)

除非您正在修改SQLite,否则您应该相信它正在完成其工作。根本不需要介入。 SQLite在发布之前会经过大量的测试。