在 Visual C++ 2003 中附加到外部可执行文件

Posted

技术标签:

【中文标题】在 Visual C++ 2003 中附加到外部可执行文件【英文标题】:Attaching to a foreign executable in Visual C++ 2003 【发布时间】:2008-08-27 19:57:39 【问题描述】:

我有一个可执行文件(由其他人编译)在我的代码附近遇到了一个断言。我在 Visual C++ 2003 中处理代码,但我没有此特定可执行文件的项目文件(该代码用于构建许多不同的工具)。是否可以在 Visual C++ 的调试器中启动二进制文件并告诉它源代码在哪里?我以前在 GDB 中做过这个,所以我知道它应该是可能的。

【问题讨论】:

【参考方案1】:

如果没有该应用程序的 PDB 符号,您将很难对正在发生的事情和位置做出正面或反面。我认为任何源代码信息都只会出现在构建该应用程序时创建的 PDB 文件中。

这是假设 PDB 文件是为此应用程序创建的——我认为这不是发布模式 VC++ 项目的默认配置。既然你在断言,我猜这是一个调试配置?

【讨论】:

【参考方案2】:

缺少任何其他答案,我会尝试附加到 Visual Studio 中的可执行进程,在代码中设置断点,当您进入没有源的进程时,它应该要求提供源文件.

【讨论】:

【参考方案3】:

是的,这是可能的。只需设置一个空项目并将所需的.exe 文件指定为调试目标。具体方法我不记得了,但我知道这是可行的,因为我在为 Winamp 开发插件时将winamp.exe 设置为调试目标。

由于您没有源文件,它只会显示汇编代码,但这可能仍然有用,因为您还可以检查内存、寄存器等。

更新

如果您在自己的程序中调试断言,您应该能够很好地看到源代码,因为当您使用调试信息编译它时,源文件的路径存储在可执行文件中。

【讨论】:

以上是关于在 Visual C++ 2003 中附加到外部可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

使用Visual Studio将类库项目附加到外部应用程序

如何在 Visual Studio 2003 中重命名 C++ 源文件?

C++ 从命令行附加 Visual Studio 调试器

使用多个引擎将 Visual Studio 2013 附加到托管和 C++ 进程

如何在运行时确定您的 C++ 应用程序何时附加了 Visual Studio 调试器?

安装 - microsoft visual c++ 2003 可再发行包 - 出现错误