c ++调试:来自控制台的调试语句

问题描述 投票:1回答:1

我正在Mac上使用lldb。试图在玛丽安图书馆中查看中间张量输出。

类似于debug(tensor,“”)的语句;当我将它们放入代码中并运行它们时(它们显示了张量的一个漂亮的np数组样式视图),就可以工作,但是当我从DEBUG CONSOLE运行它们时,得到以下错误消息

debug(output, "ads");
warning: Stopped in a C++ method, but 'this' isn't available; pretending we are in a generic context
error: <user expression 5>:1:1: no matching function for call to 'debug'
debug(output, "ads");
^~~~~
note: candidate function not viable: no known conversion from 'const char [4]' to 'const std::__1::string' (aka 'const std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') for 2nd argument

是否有一种方法可以允许这种交互性,或者在显示某些局部变量的左装订线中显示张量显示?

c++ visual-studio-code lldb tensor
1个回答
0
投票

即使函数使用std :: string并向其传递C字符串,您尝试调用的例程也会在源代码中使用,因为编译器知道如何将C字符串(“ ads”)转换为一个std :: string。 lldb的表达式解析器不够智能,无法执行这样的强制转换。

即使足够聪明地尝试这种方法,进行模板实例化也不是一件容易的事,而lldb的表达式解析器只是开始学习如何做。如果您的调试函数的某个版本使用C字符串,则可以使用该版本。或者,您可以在代码中添加一个实际上包含C字符串的包装器。您应该能够在表达式解析器中轻松调用。

我对玛丽安一无所知,无法回答您问题的第二部分。这个张量有什么存储空间?它是否是您感兴趣的函数的参数,是局部变量还是在某些全局存储中?

顺便说一句,表达式解析器说的事实:

warning: Stopped in a C++ method, but 'this' isn't available; pretending we are in a generic context

[可能意味着您正在调试优化的代码,因为在-O0处,编译器通常使整个函数的this保持活动状态。如果您需要调试优化版本,例如由于未优化的代码太慢而无法使用,那么这就是您的命运。但是,在调试优化的代码时,您通常无法在调试器中访问代码中定义的所有变量。

© www.soinside.com 2019 - 2024. All rights reserved.