如何在macOS上显示堆栈跟踪中的行号?

5

我正在使用 dmd 2.072.1 在 OS X El Capitan 上编译我的命令行程序,并尝试在使用 LLDB 进行调试时显示堆栈跟踪中的行号。目前,堆栈跟踪看起来像这样:

core.exception.RangeError@Level.d(454): Range violation
----------------
4   Game                                0x000000010b108ac1 _d_arraybounds + 97
5   Game                                0x000000010b07f759 Level.__array + 41
6   Game                                0x000000010b0969c4 void Level.Level.GenerateBlocks() + 992
7   Game                                0x000000010b094c32 Level.Level Level.Level.__ctor(Renderer.Renderer, Level.Meshes, Level.Textures, bool, boo

LLDB是否可以显示行号?如果可以,如何操作?如果不行,使用dmd时有哪些替代方案?我使用Emacs开发D程序,但也安装了Xcode用于其他语言。

使用 -g 编译。请参考 https://dlang.org/dmd-osx.html#switch-g。 - Bauss
我已经在做了。 - SurvivalMachine
你还使用哪些标志进行编译? - Bauss
我还尝试了-debug-gc。我刚刚注意到我的堆栈跟踪粘贴的第一行包含行号,我以前怎么没看到它呢 :-/ 但问题仍然存在,因为其他行没有包含行号。 - SurvivalMachine
第一行是从throw line获取的,它是Exception构造函数的一部分。后面的行是堆栈跟踪本身...我不知道Mac OS为什么在那里无法工作。 - Adam D. Ruppe
1个回答

0

我在MacOS上遇到了同样的问题,但我已经解决了。当我将所有C源文件编译成目标文件时,我包含了-g选项。然后,在将所有目标文件一起编译以生成最终可执行文件时,我也包含了-g选项。这样,lldb就显示了错误发生的正确行号!


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接