【问题标题】:debugger already attached - cscript调试器已附加 - cscript
【发布时间】:2023-07-02 16:50:01
【问题描述】:

我有一个简短的 JScript,它创建一个活动 X 对象并调用一个函数。该活动 X 对象是用 C++ 编写的。当我运行命令cscript scriptName.js //X 时,我以调试模式启动VS2012。比我尝试附加一个调试器,但如您所知,已经附加了一个。

有没有办法重新附加调试器或以某种方式连接到它?

我目前的解决方案是不使用 JScript 并从 C++ 调用代码。

【问题讨论】:

    标签: c++ windows debugging jscript


    【解决方案1】:

    您想使用哪个调试器?Visual Studio 还是 WinDBG? 您真的需要同时调试 JavaScript 代码和 C++ 代码吗?

    如果后者对您来说不是问题,并且您想专注于 C++ 代码,则在 Visual Studio(或 WinDBG)中只调试 cscript.exe,不带 /x 标志。甚至不需要附加,您可以在 Visual Studio 中使用 F5 开始调试。

    1. 在 Visual Studio(2008、2010 或 2012 - 它们都可以工作)中,右键单击 ActiveX 项目(即 C++ 项目)。
    2. 转到:配置属性 -> 调试
    3. 在命令中输入 cscript 完整路径:C:\Windows\System32\cscript.exe
    4. 在命令参数中输入 JS 文件的完整路径
    5. 在您的 ActiveX 代码上放置一个断点(在 dllmain 或您的 COM 对象的构造函数上)
    6. 按 F5
    7. Visual Studio 会抱怨缺少 cscript 的符号。没关系。继续前进。
    8. 你会遇到断点

    需要考虑的几点:

    1. 设置符号路径以包含 Microsoft 符号。这样,您将看到调用您的代码的函数的名称(oleaut32.dll 和朋友)。

    此外,这是默认设置,但请确保:

    1. 同一属性框中的调试器类型可以是 Native 或 Auto。

    【讨论】:

    • 当我开始调试时它说“cscript.exe 没有在 [PCNAME] 上运行”
    • @qballer 不应该。你确定你正在运行没有'//x'标志的cscript吗?
    • 是的,我确定。仍然无法附加。
    • 如果有帮助,我正在使用 vs 2012。