C++ 如何在预生成中修改源文件。。。不修改源文件?

C++ 如何在预生成中修改源文件。。。不修改源文件?,c++,visual-studio-2005,add-in,aop,pre-build-event,C++,Visual Studio 2005,Add In,Aop,Pre Build Event,因此,我正在使用VisualStudio2005,在我当前的项目中,我正在构建一个C#外接程序来处理AspectC++方面的编织。收集方面和源文件并将它们提供给方面编译器非常简单,但这会生成新的(修改过的)源文件。我试图模仿标准APETCT++Ad:In,所以我想让项目的源文件不变,因为我把编织文件导入到C++编译器中。假设我甚至可以做到这一点(不确定如何做到),我如何让调试器正确地指向原始源文件?我知道我必须取消选中VS选项,这样源代码就不必与编译后的版本匹配,但是我不知道如何在不直接修改源文

因此,我正在使用VisualStudio2005,在我当前的项目中,我正在构建一个C#外接程序来处理AspectC++方面的编织。收集方面和源文件并将它们提供给方面编译器非常简单,但这会生成新的(修改过的)源文件。我试图模仿标准APETCT++Ad:In,所以我想让项目的源文件不变,因为我把编织文件导入到C++编译器中。假设我甚至可以做到这一点(不确定如何做到),我如何让调试器正确地指向原始源文件?我知道我必须取消选中VS选项,这样源代码就不必与编译后的版本匹配,但是我不知道如何在不直接修改源文件的情况下将两者关联起来。有什么建议吗?

听起来您想在预处理器之前或之后修改源代码。在这种情况下,您应该使用#line指令来告诉编译器它真正在处理什么文件和行。这就是预处理器的工作方式,它将所有头文件包含在一个大文件中,该文件包含#行指令,这使编译器能够报告正确行的错误,并在调试器的符号中指定正确行

您应该尝试在源文件上运行预处理器。这将向您展示#line指令是如何工作的。cl.exe命令行选项/P将在此处帮助您。请记住,您将需要编译该文件所需的所有其他预处理器选项,如/D和/I


假设我试过这个。我会收集我的源文件和方面文件,将它们输入AspectC++编译器(Weaver),获取新的编织源文件,并在整个修改后的文件中定期插入指向原始unwoven文件的#行指令。在这之后,我会把编织文件和“X行指令”发送给C++编译器。我没弄错吧?当您说它与调试器一起工作时,是否包括断点?有没有一种方法可以在不插入指令的情况下做到这一点?比如通过更改一些项目或文件设置?实际上,在阅读AspectC++手册之后,我发现#行指令是作为编织过程的一部分生成的。现在我的问题是,如何将新修改的文件从C++插件中添加到C++编译器中?这可能是最困难的部分。VS api应该支持这一点。我确信边界检查器和Purify之类的东西也必须像这样更改代码。您应该将生成的文件放在Debug或Release目录中,这样它们就不会污染常规的源文件。这将告诉调试器在何处启用断点等。