[Qt-creator] [qt-creator] custom plugin using debugger compilation error

apoenitz apoenitz at t-online.de
Fri Mar 15 09:26:39 CET 2024


On Fri, Mar 08, 2024 at 07:28:08AM +0800, ogre up wrote:
>    Hi all,
>    I want to implement a qt creator plug-in that can read specified
>    variables (such as a vector with more elements) from the debugger, and
>    then export the variable values to a text file.
>    Currently, simple sample plug-ins can be compiled and loaded according
>    to the qt creator wizard (using qt creator 4.12.4/Qt 5.14.2/vs2017
>    build tools), but when trying to use the Debugger class, a compilation
>    error will appear, prompting an unresolved external symbol. I tried
>    adding a dependency on debugger in the pro file, but it didn't seem to
>    have any effect.
>    complier error message as follows:
>    example.obj : error LNK2019: Unresolved external symbol "public: static
>    class QPointer<class Debugger::Internal::DebuggerEngine> __cdecl
>    Debugger::Internal::EngineManager::currentEngine(void)"
>    (?currentEngine at EngineManager@Internal
>    @Debugger@@SA?AV?$QPointer at VDebuggerEngine@Internal at Debugger@@@@XZ),
>    this symbol is in the function "private: void __cdecl
>    Example::Internal::ExamplePlugin::triggerAction(void)" (?triggerAction@
>    Referenced in ExamplePlugin at Internal@Example@@AEAAXXZ)
>    ..\..\..\..\Qt\qtcreator-4.12.4\lib\qtcreator\plugins\Example4.dll :
>    fatal error LNK1120: 1 unresolved external command
>    some of the source code as follows:
>    void ExamplePlugin::triggerAction()
>    {
>        QMessageBox::information(Core::ICore::mainWindow(),
>                                 tr("Action Triggered"),
>                                 tr("This is an action from Example."));
>        Debugger::Internal::DebuggerEngine *engine =
>    Debugger::Internal::EngineManager::currentEngine();
>        if (engine)
>        {
>            // try fetch variable by name, and dump it's values to text
>    file ...
>        }
>    }
>    and lib dependency settings in pro file:
>    --------------------------------------------
>    QTC_PLUGIN_NAME = Example
>    QTC_LIB_DEPENDS += \
>        # nothing here at this time
>    QTC_PLUGIN_DEPENDS += \
>        coreplugin \
>        debugger \
>        projectexplorer
>    QTC_PLUGIN_RECOMMENDS += \
>        # optional plugin dependencies. nothing here at this time
>    -----------------------------------------------------------------------
>    ---
>    I would like to know:
>    1. How to solve the above compilation error?
>    2. To achieve the function I want, what code snippets can I refer to?
>    Any suggestion would be appreciated.

The '::Internal' in Debugger::Internal:: is the sign that this is not an
exported class, i.e. not meant for public consumption or re-use, i.e. 
you cannot use this from outside the debugger plugin itself. 

As a non-recommended solution, to make this work, you could add
DEBUGGER_EXPORT to  Debugger::Internal::EngineManager in a local build
of Qt Creator and go from there.

However, I think that having a way to export vector data to a file from the
debugger (e.g. via a context menu entry in the "Locals" pane) would be a good
feature to have in general, so I'd suggest to implement this directly in the
regular debugger plugin, either via a patch submitted by you on
codereview.qt-project.org (preferred) or as a feature request on
bugreports.qt.io.

Andre'



More information about the Qt-creator mailing list