gpt4 book ai didi

c++ - 在 Visual Studio 中调试 PIMPL(2012)

转载 作者:行者123 更新时间:2023-12-05 06:45:36 27 4
gpt4 key购买 nike

我有一个包含以下类的 DLL:

目录.h:

#ifndef CAT_H
#define CAT_H

class __declspec( dllexport ) Cat
{
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat();
int a;
};

#endif

猫.cpp:

#include "Cat.h"

class Cat::CatImpl
{
public:
int c1;
int c2;
};

Cat::Cat()
{
cat_ = new Cat::CatImpl();
cat_->c1 = 1;
}

然后我有一个项目(在单独的解决方案中)创建此类的实例:

主要.cpp:

#include <Windows.h>
#include "..\..\DLL\DLL\Cat.h"

int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
Cat cat;
int x = 0;
}

现在我在该行放置一个断点:

int x = 0;

然后打开快速监 window 口: image

符号已加载,*(cat.cat_) 不起作用:

image

有什么办法可以查看cat_的内容吗?

到目前为止我想出的唯一方法是:

(int)(*((char*)cat.cat_ + 0))

另外,为什么以下返回 0?:

image

最佳答案

解决此问题的方法是在值上添加一个监视,您可以在其中 "cast"它到包含 impl 的 DLL。所以在你的情况下就是这样。

(DLL.dll!Cat::CatImpl*)cat.cat_

关于c++ - 在 Visual Studio 中调试 PIMPL(2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com