【问题标题】:Visual Studio Code debugging: name a variable and cast itVisual Studio Code 调试:命名变量并进行转换
【发布时间】:2019-08-07 11:51:20
【问题描述】:
  1. 如何在 VisualStudio Code 的调试模式下为监视列表中列出的变量提供自定义名称?
  2. 有没有办法自动将变量从指针转换为 char*,这样 - 如果它们包含文本,用户就可以看到它?

我使用 VSCode 来调试大型 C 程序。 调试时,有大结构如:

type variable; 其中变量是一个方向列表的头部:

feature_type *variable->feature
char* variable->features->head->name // name of the 1st feature
feature_type *variable->features->head->next // 2nd feature, that has its own "name"
void* variable->features->head->a->b->c->value // value of a 1st feature.

问题是,该变量值通常是(95%?)char*,我希望看到它,但是现在 - 对于列表中的每个元素,我必须手动选择它,然后强制转换到 (const char *)。这很烦人,因为感觉打印这些变量 - 你不那么专业 - 会快得多。

(const char *) (((((type *)0x844430)->a).b).c).value // rewritten what was important on the picture that you might want to copy.

第二个问题是以这种方式转换的变量都具有相同的名称,但仅在内存地址上有所不同(这意味着我必须记住哪个是哪个)。有没有办法给他们起个名字?

【问题讨论】:

  • 将文本发布为文本而不是图片在创建答案和搜索时更有用。考虑以文本形式编辑。
  • 我在上面用文字写了整个例子。图片在那里显示它在调试器中的样子 - 因为我看不到变量的名称,只是结尾 (a->b->c-> value)
  • 可能问题出在代码而不是IDE。
  • 请发布minimal reproducible example,以便我们重现问题并帮助您调试它。另外,请说明代码要完成的工作
  • 我不是在寻求帮助来调试或编写代码。代码就是这样,对于这种规模的项目,重写数据表示的核心结构将非常耗时。我清楚地写下了我的意图 - 我想为添加到监视列表中的变量提供一个 name (因为现在它们看起来都一样)并且还自动将这些变量转换为 char* 以便调试器向我显示内容。

标签: c pointers visual-studio-code void-pointers vscode-debugger


【解决方案1】:

在搜索如何查看监视列表中内存中的值时偶然发现了这一点。看起来您可以在 gdb 窗口中设置变量名称,并在监视列表中使用该名称。

调试控制台:

-exec set $var_name = (const char *) (((((type *)0x844430)->a).b).c).value

然后在监视列表中,您可以将便利变量引用为$var_name

【讨论】:

  • 但是地址不会在一段时间后(或重新设置计算机后)改变吗?
  • 是的,看起来您每次运行都必须重置? probs 是否可以考虑设置您的 gdbinit,以便它在每次运行时进行初始化,不确定是否通过 VS Code 执行。 sourceware.org/gdb/current/onlinedocs/gdb/gdbinit-man.html
猜你喜欢
  • 2019-10-31
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2017-03-19
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多