如何在Codeview 3.14中加载MASM32编译的16位.exe符号信息?
解决CodeView 3.14无法识别16位MASM程序符号的问题
核心原因
MASM32自带的ml.exe是32位版本,默认生成COFF格式目标文件,尽管能通过/c参数生成16位代码,但它的符号信息格式和16位link16、CodeView 3.14兼容性不佳,导致符号无法被识别。
解决方法
方法1:改用16位MASM(masm.exe)编译
直接使用纯16位的masm.exe(通常随旧版MASM或DOS工具集提供)编译,生成的OMF格式目标文件对16位工具链兼容性更好:
- 编译命令:
(末尾的分号用于跳过交互输入,直接生成.obj文件)masm /Zi EX4_2_Zi.asm; - 链接命令保持不变:
link16 /codeview EX4_2_Zi.obj;
方法2:调整ml.exe参数生成兼容的OMF格式目标文件
如果坚持使用MASM32的ml.exe,需强制生成OMF格式而非默认的COFF格式,确保符号信息能被link16正确处理:
- 编译时添加
/omf参数:ml /c /Zi /omf EX4_2_Zi.asm - 链接命令不变:
link16 /codeview EX4_2_Zi.obj,,,,
方法3:确保符号文件与可执行文件同目录
link16 /codeview会生成对应的.dbg符号文件,需保证该文件和.exe文件在同一目录下,CodeView 3.14才能自动加载符号信息。
方法4:明确源文件的16位程序模型
在汇编源文件开头添加16位程序模型声明,避免ml.exe默认启用32位相关设置:
.model small .stack 100h .data ; 数据段内容 .code main proc ; 代码内容 main endp end main
验证步骤
- 重新编译链接后,检查是否生成了
.dbg文件(方法1/2场景下); - 启动CodeView 3.14加载
.exe,若仍有警告,尝试通过File > Load Symbols手动选择对应的.dbg或.obj文件。
内容的提问来源于stack exchange,提问作者nostromo
相关产品推荐
相关产品推荐

