如何创建类的实例并将其分配给变量?

发布于 2025-01-06 16:51:30 字数 232 浏览 0 评论 0原文

对于使用 gdb 调试时的 C++ 代码: 1)如何在gdb中创建变量?使用 gdb/mi 命令? 2)如何在gdb中创建类的实例。 3)如何将创建的实例分配给gdb中创建的变量以供将来使用? 例如:

C++ code:
class C { public:int value; }

gdb commands (pseudo-code):
var v = new C()
print v.value

For C++ code when debugging using gdb:
1) How to create a variable in gdb? Using gdb/mi command?
2) How to create a instance of a class in gdb.
3) How to assign the created instance to the created variable in gdb to make use in the future?
For example:

C++ code:
class C { public:int value; }

gdb commands (pseudo-code):
var v = new C()
print v.value

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阳光下慵懒的猫 2025-01-13 16:51:30

gdb 目前不支持“new”。它根本不在解析器中处理。如果您想跟踪其进度,gdb bugzilla 中存在一个针对此问题的错误。有人(咳咳)正在研究它。

同时,我想也许你可以手动完成。不过我从来没有真正尝试过这个。这个想法是这样的:

set var $new = malloc(sizeof(struct Whatever))
call Whatever::Whatever($var)

但是,您可能在该调用中需要其他参数,因为 C++ ABI 指定了一些神奇的隐藏参数。

另一种方法是在程序中创建一个调试便利函数:

whatever *new_w() { return new whatever(); }

然后您可以直接从 gdb 调用它。

"new" is not currently supported in gdb. It isn't handled in the parser at all. There is a bug open for this in gdb bugzilla if you want to track progress on it. Someone (cough cough) is working on it.

Meanwhile, I think maybe you can do it manually. I have never tried this for real though. The idea is something like:

set var $new = malloc(sizeof(struct Whatever))
call Whatever::Whatever($var)

However, you may need additional arguments in that call, since the C++ ABI specifies some magical hidden arguments.

Another approach is to make a debugging convenience function in your program:

whatever *new_w() { return new whatever(); }

Then you can just call this directly from gdb.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文