【问题标题】:Is there a posibility to debug a nested dll inside of WX GUI application?是否可以在 WX GUI 应用程序中调试嵌套的 dll?
【发布时间】:2020-04-17 09:52:29
【问题描述】:

代码涉及将使用情况监控 dll 集成到现有主机 dll。主机 dll 由 WX GUI 应用程序加载以进行回调。使用监控 dll 的工作原理如下。

初始化 //f1

usageexportfrequency //f2

将使用信号导出到服务器 // f3

deinit //f4

f1 集成到我的主机 dll 初始化例程中,f2 集成到主机 dll 中基于事件的函数,同样 deinit 集成到我的主机 dll deinit。

当我只集成 f1 和 f3 时,gui 不会崩溃并且工作正常。当我集成主 f2 函数以指示在我的主机 dll 中使用回调函数并运行 GUI 应用程序时,当我更改小部件值时它会立即崩溃。

但是,当我在示例程序(EXE 不是主机 dll)中使用“使用”dll 时,它就像一个魅力。

HINSTANCE hGetProcIDDLL;

typedef void (__stdcall *lgUsgIn)(bool);

typedef void (__stdcall *SetMinInt)(long);

typedef bool (__stdcall *lgUsgSnd)(const char*,const char*,const char*);

typedef void(__stdcall *waitforCom)(void);

lgUsgIn LogUsageInit;

lgUsgSnd LogUsageSend;

SetMinInt SetMinInterval;

waitforCom WaitForCompletion;

hGetProcIDDLL = LoadLibrary("D:\\HTA_NG_DevEnvironment\\Utilization\\LogUsage.dll");

LogUsageInit = (lgUsgIn)GetProcAddress(hGetProcIDDLL, "LogUsageInit");

SetMinInterval = (SetMinInt)GetProcAddress(hGetProcIDDLL, "SetMinInterval");

LogUsageSend = (lgUsgSnd)GetProcAddress(hGetProcIDDLL, "LogUsageSend");

WaitForCompletion = (waitforCom)GetProcAddress(hGetProcIDDLL, "WaitForCompletion");

LogUsageInit(1);

SetMinInterval(600);

const char tool[] = "tooln1";

const char opt[] = "remoteValidation";

const char tag[] = "none";

bool OutCome = LogUsageSend(tool,opt,tag); // **crash happens when this function is included**

WaitForCompletion();

FreeLibrary(hGetProcIDDLL);

用于将主机 Dll 加载到 WX GUI 应用程序的函数也是来自 wxDynamicLibrary 类的函数 Load()

【问题讨论】:

    标签: c++ dll wxwidgets


    【解决方案1】:

    使用 Visual Studio(如果您有 dll pdb 文件(符号)),您可以附加到任何进程(例如 GUI 应用程序)并调试其中的一部分(例如 dll 部分)如果您在 @ 添加断点987654322@你应该可以进去了。

    【讨论】:

    • 这里使用的 ide 是代码块,不幸的是我不得不坚持下去。
    • 看来您也可以附加到代码块中的进程:参见dummies.com/programming/cpp/…
    【解决方案2】:

    如果您在 Visual Studio 中开发了 DLL,则可以将 GUI 应用程序指定为调试的启动文件。它在项目属性下,调试。这样,当您调试项目时,GUI 应用程序将启动,并且您将在 DLL 中触发断点。

    也就是说,崩溃有可能在您的函数获得控制之前发生。调用约定不匹配是这里的常见罪魁祸首;确保导出的函数是__stdcallextern "C"

    【讨论】:

    • 这里使用的 ide 是代码块,不幸的是我不得不坚持下去。
    【解决方案3】:

    感谢您的意见,我在代码块中找到了与您的建议类似的答案。

    我们可以将主机应用程序附加到 DLL。并从 DLL 项目本身进行调试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多