首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lldb调试器在字符串文本类型中显示类型限定符const。这是11分贝里的窃听器吗?

lldb调试器在字符串文本类型中显示类型限定符const。这是11分贝里的窃听器吗?
EN

Stack Overflow用户
提问于 2021-12-31 15:06:54
回答 2查看 88关注 0票数 0

在C中,字符串文字的类型是char []

gdb调试器:

代码语言:javascript
复制
(gdb) ptype ""
type = char [1]
(gdb) ptype "abc"
type = char [4]

lldb调试器:

代码语言:javascript
复制
(lldb) p ""
(const char [1]) $0 = ""
(lldb) p "abc"
(const char [4]) $1 = "abc"

gdb调试器将字符串文本的类型显示为char [N] (按照语言标准),但lldb调试器在字符串文本类型- const char [N]中显示const类型限定符。

这是lldb调试器中的一个bug吗?还是,我漏掉了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-13 06:01:47

这是因为lldb调试器在计算给定给print命令的表达式时使用了ISO C++规则/规范,而在C++中,普通字符串文字的类型是const char[N],其中N是包含null终止符的字符串的大小。

lldb调试器使用ISO C++规则/规范的证明:

假设C程序有一个变量定义:

代码语言:javascript
复制
    int x;

使用lldb调试器调试此程序时,如果我这样做了:

代码语言:javascript
复制
(lldb) p sizeof (*(void *)&x)
error: expression failed to parse:
warning: <user expression 4>:1:9: ISO C++ does not allow indirection on operand of type 'void *'
sizeof (*(void *)&x)
        ^~~~~~~~~~~
error: <user expression 4>:1:8: invalid application of 'sizeof' to an incomplete type 'void'
sizeof (*(void *)&x)
       ^~~~~~~~~~~~~

在错误中,上面写着ISO C++ ..

这证明了lldb调试器使用C++语言规则/规范来计算给print命令的表达式。因此,lldb调试器在命令p "abc"的输出中显示const char [4]类型。

补充:

gdb调试器中,我们可以使用set language命令设置当前的源语言:

代码语言:javascript
复制
(gdb) show language
The current source language is "auto; currently c".

(gdb) set language c++
Warning: the current language does not match this frame.

(gdb) show language
The current source language is "c++".
Warning: the current language does not match this frame.

(gdb) ptype "abc"
type = char [4]

即使在将language设置为c++之后,输出仍显示typechar [4]。这可能是因为set language命令只设置当前的源语言,但是在计算给print命令的表达式时,它可能使用C语言规则。

在调试期间,我没有在lldb调试器中找到任何类似的设置/重置源代码语言的方法。

票数 0
EN

Stack Overflow用户

发布于 2021-12-31 15:23:04

引用cppreference.com

字符串文字是,不是可修改的(实际上可以放在只读内存(如.rodata)中。如果程序试图修改由字符串文字形成的静态数组,则行为是未定义的。

lldb只是显示了引擎盖下的真正内存的类型,尽管它可以通过指向const的指针正式到达。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70543494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档