Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在c++ lldb中使用重载运算符计算表达式

在c++ lldb中使用重载运算符计算表达式
EN

Stack Overflow用户
提问于 2013-12-04 23:01:42
回答 1查看 8.7K关注 0票数 19

我正在使用lldb在Xcode5中调试一个C++程序,我想在调试器中计算任意表达式,特别是那些使用重载操作符的表达式。

例如,我创建了一个非常简单的Xcode5 C++项目,并将以下main.cpp和所有编译器/链接器/etc选项设置为默认值:

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>
#include <vector>

int main(int argc, const char * argv[])
{
  std::vector<int> vec;
  vec.push_back(42);
  std::cout << "vec[0] = " << vec[0] << std::endl;
  return 0;
}

我在return 0;行上设置了一个断点并运行了程序。

然后,在lldb提示符下,将向量打印为一个整体:

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr vec
(std::__1::vector<int, std::__1::allocator<int> >) $0 = size=1 {
  [0] = 42
}

但是,我不能使用重载的operator[]访问它的成员

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr vec[0]
error: call to a function 'std::__1::vector<int, std::__1::allocator<int> >::operator[](unsigned long)' ('_ZNSt3__16vectorIiNS_9allocatorIiEEEixEm') that is not present in the target
error: The expression could not be prepared to run in the target

类似地,我无法获得迭代器(尽管我在这方面的经验较少,因此我的语法可能是错误的):

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr vector<int>::iterator it = vec.begin()
error: use of undeclared identifier 'vector'
error: expected '(' for function-style cast or type construction
error: expected '(' for function-style cast or type construction
error: 3 errors parsing expression

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr (vector<int>::iterator) vec.begin()
error: use of undeclared identifier 'vector'
error: expected '(' for function-style cast or type construction
error: expected '(' for function-style cast or type construction
error: 3 errors parsing expression

类似地,打印一个简单的字符串也很好:

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr string("a")
(std::__1::string) $0 = "a"

但是,简单的字符串连接会失败:

代码语言:javascript
运行
AI代码解释
复制
(lldb) expr string("a") + string("b")
error: invalid operands to binary expression ('string' (aka 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') and 'string')
error: 1 errors parsing expression

我做错了什么?lldb是否支持使用重载运算符进行求值?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 01:36:01

注意,C++标准库是这样设置的:它们内联它们可以合理地内联的所有模板化函数,并且不存在真正的函数副本。因此,例如,当您调用std::vector<int>::begin()时,没有这样的函数。它的所有用法都被内联了。

这就是为什么你会收到关于“调用函数...不存在于目标中”的错误。可能有函数的内联副本,但没有我们可以实际调用的副本。举个例子,如果我构建了一个生成std::vector的小C++程序,并将一些元素推入其中,然后迭代它们,然后执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
    (lldb) image lookup -r -n begin
    2 matches found in /private/tmp/vector:
        Address: vector[0x0000000100000eaf] (vector.__TEXT.__text + 1071)
        Summary: vector`main + 1071 [inlined] std::__1::vector<int, std::__1::allocator<int> >::begin() at vector.cpp:12
                 vector`main + 1071 at vector.cpp:12        Address: vector[0x0000000100000eaf] (vector.__TEXT.__text + 1071)
        Summary: vector`main + 1071 [inlined] std::__1::vector<int, std::__1::allocator<int> >::begin() at vector.cpp:12
                 vector`main + 1071 at vector.cpp:12

所以std::vector<int>的begin & end访问器的所有实例都是内联的。再往下看来自std c库本身的部分:

代码语言:javascript
运行
AI代码解释
复制
12 matches found in /usr/lib/libc++.1.dylib:
    Address: libc++.1.dylib[0x000000000003e4ec] (libc++.1.dylib.__TEXT.__text + 252188)
    Summary: libc++.1.dylib`std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::begin()        Address: libc++.1.dylib[0x000000000003e51c] (libc++.1.dylib.__TEXT.__text + 252236)
    Summary: libc++.1.dylib`std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::begin() const        Address: libc++.1.dylib[0x000000000003e574] (libc++.1.dylib.__TEXT.__text + 252324)

还有一些针对basic_string的,仅此而已。所以我们不能调用任何真正的实现。然后,一旦我们只获得了这些std对象的一小部分真实世界,当你开始推动它时,世界就会以其他奇怪的方式分崩离析。

lldb目前还不够聪明,无法弄清楚如何从C++标准库的头文件中重构模板化的函数/方法。我们没有足够的环境,您的代码最初被编译来完成这项任务。

请注意,这实际上不是重载操作符的问题,而是编译器使用std库的方式的问题。对于您自己的类来说,事情应该运行得更好,在-O0中没有那么多内联。

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

https://stackoverflow.com/questions/20387942

复制
相关文章
Asp.Net Core Web应用程序—探索
作为一个Windows系统下的开发者,我对于Core的使用机会几乎为0,但是考虑到微软的战略规划,我觉得,Core还是有先了解起来的必要。
Kiba518
2019/05/07
1.3K0
Asp.Net Core Web应用程序—探索
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)
本章节主要针对Web API进行基础教学以及强化训练,并对跨域操作做出详细的介绍与添加跨域配置信息,可以通过本文学会创建【跨域接口的编写】,风格采用【restfull】风格
红目香薰
2022/11/29
1.8K0
ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)
ASP.NET MVC 与 ASP.NET Web Form 的介绍与区别
Controller:控制器 通过Model 读取处理数据,通过View 将结果返回。
conanma
2021/12/29
2.7K0
asp.net web api 2.2 基础框架(带例子)
简介 这个是我自己编写的asp.net web api 2.2的基础框架,使用了Entity Framework 6.2(beta)作为ORM。 该模板主要采用了 Unit of Work 和 Rep
solenovex
2018/03/01
4.9K0
asp.net web api 2.2 基础框架(带例子)
使用ASP.NET Core MVC框架构建Web应用
ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。
conanma
2021/12/29
1.4K0
ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。
KenTalk
2020/01/20
1.4K0
ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
Asp.Net Web API(三)
    在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public方法就被叫做action方法或简单的Action。当Web API接收到一个请求的时候,它将这个请求路由到一个Action。
莫问今朝
2018/08/31
1.8K0
Asp.Net Web API(三)
ASP.NET Core Web API 与 SSL
SSL 一直没有真正研究过SSL,不知道下面的理解是否正确。 SSL是Secure Sockets Layer的缩写,它用来保护服务器和客户端之前的通信。它是基于信任+加密的概念。 在介绍SSL的原理之前,首先介绍一下加密(Encryption)的概念。 在很多的应用/API里,最常见的一种加密的方式是对称加密(Symmetric Encryption)。 对称加密的原理是这样的:比如说甲方想要发送一些数据给某个调用者(乙方),乙方可能在某个进程或客户端服务器里,或者是跨越网络的。总之是两方通信。而甲方发送
solenovex
2018/06/21
1.3K0
Asp.Net Web API(一)
          HTTP不仅仅服务于Web Pages。他也是一个创建展示服务和数据的API的强大平台。HTTP是简单的,灵活的,无处不在的。你能够想象到几乎任何的平台都会有HTTP服务库。HTTP服务可以涉及到范围广泛的客户端,包括浏览器,各种移动设备和传统桌面应用程序。而Web API是提供了一套RestfulAPI的开发框架,它提供了较为完整的http语义支持。
莫问今朝
2018/08/31
8290
实战 ASP.NET Web API
Web API 框架是一个面向 Http 协议的通信框架。相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置。Web API 的开发类似于 ASP.NET MVC 中控制器的开发,但是相对于直接使用 ASP.NET MVC 来返回 Json 对象的方式而言,Web API 封装了数据的序列化、反序列化,接口、实现都更加简单。 简单地说,如果要向浏览器、移动端提供 Json 数据格式的 API,则应该首选 Web API 作为通信框架。 以下,我列出了在当前
用户1172223
2018/01/29
1.4K0
实战 ASP.NET Web API
ASP.NET WEB API 调试
RouteDebugger 是调试 ASP.NET MVC 路由的一个好的工具,在ASP.NET WEB API中相应的有 WebApiRouteDebugger ,Nuget安装
跟着阿笨一起玩NET
2018/09/20
2K0
ASP.NET WEB API 调试
ASP.NET MVC Web API
实际开发中,我们可以轻松的使用 WebAPI 配合 Routing 路由和 EF 框架来轻松的实现一个 RESTful 的 API 并将其作为软件的后端。
李郑
2019/12/04
1.3K0
Asp.Net Web API(二)
当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页。
莫问今朝
2018/08/31
1.9K0
Asp.Net Web API(二)
ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。
KenTalk
2018/10/03
1.5K0
ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登录), 所以
solenovex
2018/03/01
2.1K0
从头编写 asp.net core 2.0 web api 基础框架 (1)
从头编写 asp.net core 2.0 web api 基础框架 (3)
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc
solenovex
2018/03/01
1.6K0
从头编写 asp.net core 2.0 web api 基础框架 (3)
Asp.Net Web API(四)
    如果Web API控制器抛出一个未捕捉的异常,会发生什么呢?在默认情况下,大多数异常都会转换为一个带有状态码500的内部服务器错误的HTTP响应。
莫问今朝
2018/08/31
1.6K0
Asp.Net Web API(六)
     Asp.Net Web API不可以需要IIS。可以自己在主机上承载一个Web API
莫问今朝
2018/08/31
9900
Asp.Net Web API(六)
从头编写 asp.net core 2.0 web api 基础框架 (2)
Github源码地址是: https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 本文讲的是里面的Step 2. 上一次, 我们使用asp.net core 2.0 建立了一个Empty project, 然后做了一些基本的配置, 并建立了两个Controller, 写了一些查询方法. 下面我们继续: POST POST一般用来表示创建资源, 也就是新增. 先看看Model, 其中的
solenovex
2018/03/01
1.6K0
从头编写 asp.net core 2.0 web api 基础框架 (2)
Web应用程序框架-Catharsis
Web应用程序框架-Catharsis是一个在codeplex上的项目,相关的文档说明比较详细. part I: http://www.codeproject.com/KB/applications/Catharsis.aspx -  New solution part II: http://www.codeproject.com/KB/applications/Catharsis_part2.aspx - Home page observation part III: http://www.code
张善友
2018/01/31
6780

相似问题

ASP.NET Web应用程序的web测试框架

10

使用实体框架核心的ASP.NET核心Web

11

无法调用asp.net web应用程序(.net框架)

15

ASP.Net核心+ .NET框架Web频繁的网络错误

10

VisualStudio2022- asp.net web应用程序-缺少.NET核心的目标框架

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文