debugging 如何在VS2019预处理期间为自定义语言生成C++自定义调试器?

sqyvllje  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(151)

我们使用自定义语言,比如FileName.xyz,它在预编译预处理时临时生成C文件,然后将其构建为可执行文件(以及临时C文件符号的PDB)。

我们希望Filename.xyz使用生成的exe和PDB调试此www.example.com。

FileName.xyz和生成的FileName.cpp之间的区别在于

  1. CPP文件在开头有附加代码#include等,因此xyz中的第一个stmt可能出现在cpp中的第11行
    1.为了Map行差和文件名,在FileName.cpp中的第10行,它将#line 1 FileName.xyz用于在第一个语句之前设置__LINE和__FILE。
    1.还每个“自定义语言语句;“在CPP中被内联替换,其函数定义使用“n-逗号分隔语句;“(与#define函数在预处理期间被替换的方式相同)。
    在Visual Studio 2019中:
    1.我如何调试FileName.xyz(放置制动点,检查变量值/调用堆栈,F9,F10,F11,Shift+F11)使用标准C调试器与exe和生成的C文件的pdbs?
    1.我需要一些明确的Map。xyz文件调试器,和。xyz到。cpp pdbs,但究竟是什么不知道,如何?
    1.我需要自定义调试器吗?如果是,我可以执行的最低步骤是什么,MSDN说我需要实现ATL组件和实现大量的接口。
    我甚至问它在MSDN(https://learn.microsoft.com/en-us/answers/questions/1190586/how-to-debugger-for-custom-language-generating-c-d)任何帮助将不胜感激。
ymdaylpp

ymdaylpp1#

谢谢,@鲍曼
它帮助.在生成的CPP文件使用

#line 1 FileName.xyz

我能够调试FileName.xyz,唯一的观察是在实时调试期间应用代码修改的EditAndContinue功能不起作用。
VS 2019正在检测www.example.com中的更改FileName.xyz,但无法编译并输出错误消息:
编辑并继续:错误:状态(.idb)文件“”中“FileName.xyz”的依赖项信息与“FileName.exe”的程序数据库(.pdb)文件“C:\Projects\FileName.pdb”不同步。请确保使用“启用最小重建(/Gm)”选项编译该文件。
我正在使用EditAndContinue,/Gm(最小重建)设置构建项目。即使为www.example.com提供自定义编译器命令FileName.xyz并使其参与build=yes。但EditAndContinue仍然没有触发FileName.xyz的自定义构建。
任何输入?

相关问题