【问题标题】:How to produce assembly output with Sublime Text?如何使用 Sublime Text 生成汇编输出?
【发布时间】:2016-04-10 19:15:47
【问题描述】:

我在Sublime Text 2 中编译C 文件时创建了一个自定义构建命令,它工作正常。

output_c.sublime-build文件如下:

{
    "cmd": "gcc $file_base_name.c -g -O3 -m32 -std=c99 -fverbose-asm -fno-inline -save-temps -Wall -Werror -o $file_base_name.exe"
}

然后,我使用以下output_asm.sublime-build 命令来创建更具可读性的汇编文件:

{
    "cmd": "objdump -d -M intel $file_base_name.o > $file_base_name.asm"
}

但是,第二个命令(我的意思是第二个 output_asm.sublime-build 文件)将输出转储到屏幕上(就在 Sublime 文本屏幕上的状态行上方),而不是创建 $file_base_name.asm 文件。

连接到这个问题,我有两个问题:

  1. 如何格式化 objdump 命令,以便将程序集输出写入文本文件?
  2. 如何将这两个构建命令合并到一个output_combined.sublime-build 文件中,以便合并的命令文件同时创建.exe.asm 文件?

(系统:Windows 10)

【问题讨论】:

    标签: c assembly sublimetext2


    【解决方案1】:

    回答你的问题:

    1. 如果您使用像> 这样的shell 命令,您必须添加"shell": true 作为参数(或者在ST3 中使用shell_cmd 而不是cmd
    2. 如果你在shell中使用cmd,那么你可以将这两个命令与&&结合起来(如果第一个命令成功,则执行第二个命令)

    此外,我建议添加一个范围 selectorworking_dir(尤其是当您使用 file_base_name 时)和一个 file_regex(单击跳转到错误)。这会产生以下构建系统:

    {
        "cmd": "gcc $file_name -g -O3 -m32 -std=c99 -fverbose-asm -fno-inline -save-temps -Wall -Werror -o $file_base_name.exe && objdump -d -M intel $file_base_name.o > $file_base_name.asm",
        "shell": true,
        "working_dir": "$file_path",
        "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
        "selector": "source.c"
    }
    

    【讨论】:

    • 听起来很公平,但在尝试之后,它会吐出以下错误:TypeError: __init__() got an unexpected keyword argument 'shell_cmd'(链接:i.imgur.com/0qENVO9.png
    猜你喜欢
    • 2023-03-24
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多