Console.log() 不会输出到 C++ 中 Awesomium 的远程调试器

Console.log() does not output to remote debugger for Awesomium in C++

我正在为我的 C++ 应用程序的 UI 使用 Awesomium library("plain" C++,没有 .NET,预编译头等)。

一切正常,我可以将事件从 C++ 应用程序发送到 Awesomium 中的 JavaScript,反之亦然。 UI 响应点击等,感谢 webCore->Update()

问题是,JavaScript 中有时会出现错误。我希望看到它们像Edge/Chrome/Firefox(您可以按 F12 查看控制台、调试器等)。

我知道可以通过适当的方式为 Awesomium 使用远程调试器 WebConfig 所以我试过了:

Awesomium::WebConfig webConfig;
webConfig.remote_debugging_host = Awesomium::WSLit("127.0.0.1");
webConfig.remote_debugging_port = 9222;
//create the WebCore singleton with configuration
webCore = Awesomium::WebCore::Initialize(webConfig);

//create a new WebView instance with a certain width and height
view = webCore->CreateWebView(width, height, 0, Awesomium::kWebViewType_Window);
view->set_parent_window(*windowHandle->getHWND());

view->set_view_listener(this);

//create a global js object named 'app'
Awesomium::JSValue result = view->CreateGlobalJavascriptObject(Awesomium::WSLit("app"));

//bind our method dispatcher to the WebView
view->set_js_method_handler(this);

if (result.IsObject()) {
    //bind our custom method to it
    Awesomium::JSObject& appObject = result.ToObject();
    appObject.SetCustomMethod(Awesomium::WSLit("sendEvent"), false);
}

现在 Chrome 在 http://localhost:9222/# 我看到了我的会话:

我能够,例如我的 C++ 应用程序中的 select UI 个元素与调试器。 但我在 Chrome 中的调试器控制台选项卡中看不到任何内容(我确实在加载到 Awesomium 的网站内部使用了 console.log("Hello!")):

p.s。调试器 window 不是 100% 高度(如您在屏幕上所见)。我能以某种方式修复它吗?

p.s.2。 Google Chrome 不是我选择的浏览器。我可以使用另一个来调试 Awesomium UI吗?

JavaScript error/debug 消息在 Awesomium (v1.7.5.1) 的远程调试器中不可见。 我找到的唯一方法是听 WebViewListener::Load class 中的 OnAddConsoleMessage() 方法。 您必须制作自己的子class并将其注册到您的网络视图。

    #include <Awesomium/WebViewListener.h>
    class MyViewListender : public WebViewListener::View {

            // ... All the overridden WebViewListener::View methods go here

            void OnAddConsoleMessage(Awesomium::WebView* caller,
                                     const Awesomium::WebString& message,
                                     int line_number,
                                     const Awesomium::WebString& source) 
            {
                    cout << "Console: " << message << endl;
            }
    };

注册它:

    MyViewListender* my_view_listener = new MyViewListender();
    view->set_view_listener(my_view_listener);