【问题标题】:View Assembly from DMD with line numbers从 DMD 查看带有行号的程序集
【发布时间】:2013-02-25 15:35:16
【问题描述】:

如何查看源代码中特定行的汇编代码?

我尝试使用 DMD 和 -g-gc(在 Windows 上)编译我的源代码,并使用 objconv 输出 .obj.exe 的程序集,但似乎没有关于行号等的提示。 但是当我使用Code::Blocks 并设置断点时,它会显示一些像这样的程序集

004030CE    // C:\...\TEST\main.d:291   matrix.array[3] = 0;
004030CE    mov dword [ebp+0xfffffec4], 0x0

所以一定有一些关于某处的线的信息......

【问题讨论】:

  • 信息可能是objconv不理解的调试格式。如果objconv 支持 PDB 文件,您可以尝试通过cv2pdb 传递可执行文件。您可能还想看看 DigitalMars dumpobj 实用程序。
  • 谢谢,我不认为 objconv 理解 pdb,即使将 dll 从 VS 复制到 cv2pdb 文件夹或将它们添加到PATH。我想我会在我当前的项目上创建一个 C::B 项目,并使用断点来获取程序集......(当我将 src 文件添加为外部文件时,断点不会被 Ddbg 命中)

标签: d dmd


【解决方案1】:

您可能想使用http://d.godbolt.org/(仅限gdc)。

【讨论】:

  • 除了一些琐碎的代码之外,这不会很好地工作......在这种情况下,您可能不关心行号。
【解决方案2】:

非常有用和简单的方法是在 Visual Studio / Visual D 插件中。

只需放置一个断点,在调试模式下启动程序,然后从菜单 Debug/View 中显示 Disassembly。

如果您没有 Visual Studio,您可以下载 Visual Studio Shell(空 IDE),在其中安装 VisualD 插件。 VS Shell 2010VS Shell 2012

【讨论】:

    【解决方案3】:

    这就是您如何在现有项目之上创建 CodeBlocks (v10.05) 项目以使用 DMDDdbg_gdb 调试器并在断点处查看组件:

    1. File>New>Project...>D application
    2. 随意设置项目名称
    3. 将“创建项目的文件夹”更改为您已经拥有源文件的目录
    4. 将“结果文件名”从 (3) 更改为目录并添加“项目文件名”。 (如果你的项目文件夹是C:\some\path\srcBaseDir,你的项目文件名是myProject.cbp,那么生成的文件应该是C:\some\srcBaseDir\myProject.cbp
    5. 设置“Digital Mars D 编译器”并完成
    6. Settings>Compiler and Debugger...
      • 设置“Digital Mars D Compiler”所需的所有目录
      • 将工具链executables>Debugger 更改为“ddbg_gdb”
      • 点击确定
    7. 右键单击您的项目并递归添加文件并添加您需要的所有源文件

    现在,您应该可以设置断点,Ddbg_gdb 将正确识别这些断点,并在 Debug>Debugging Windows>Disassembly 中使用 Disassembly 视图查看程序集

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2023-03-22
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多