在以下功能中,我无法在LLDB中看到“ recordMap”。for循环输出键,recordType设置正确,但是'p recordMap'给出错误“使用未声明的标识符”。我在LLDB中可以看到变量'recordType'很好,所以我处于正确的范围内。当我在LLDB中键入'recordMap'时,它会自动完成,就好像它在那里一样。
对于调试和发布,我都将优化设置为“无”。这可能是什么!
void MezNetworkController::showRecord( std::map<string, MezSQLData*> recordMap ) {
for( auto item : recordMap )
printf( " KEY: %s\n", item.first.c_str() );
int recordType = (int) recordMap["messageType"]->intValue();
printf( recordType );
}
Run Code Online (Sandbox Code Playgroud)
以下是lldb中“ image lookup -va $ pc”的结果:
Address: Mezmo[0x00015ed0] (Mezmo.__TEXT.__text + 45272)
Summary: Mezmo`MezNetworkController::showRecord(std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, MezSQLData*, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, MezSQLData*> > >) + 780 at MezNetworkController.cpp:774
Module: file = "/Users/paulslocum/Dropbox/_iOS/_414 Messenger_/DerivedData/414 Messenger/Build/Products/Debug-iphoneos/Mezmo.app/Mezmo", arch = "armv7"
CompileUnit: id = {0x00000000}, file = "/Users/paulslocum/Dropbox/_iOS/_414 Messenger_/414 Messenger/MezNetworkController.cpp", language = "ISO C++:1998"
Function: id = {0x400015fa2}, name = "showRecord", range = [0x000c2bc4-0x000c42a6)
FuncType: id = {0x400015fa2}, decl = MezNetworkController.hpp:60, clang_type = "void (void)"
Blocks: id = {0x400015fa2}, range = [0x000c2bc4-0x000c42a6)
LineEntry: [0x000c2ed0-0x000c2ee6): /Users/paulslocum/Dropbox/_iOS/_414 Messenger_/414 Messenger/MezNetworkController.cpp:774:38
Symbol: id = {0x000001f8}, range = [0x000c2bc4-0x000c42a8), name="MezNetworkController::showRecord(std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, MezSQLData*, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, MezSQLData*> > >)", mangled="_ZN20MezNetworkController10showRecordENSt3__13mapINS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEP10MezSQLDataNS0_4lessIS7_EENS5_INS0_4pairIKS7_S9_EEEEEE"
Variable: id = {0x400015fb6}, name = "this", type = "MezNetworkController *", location = [sp+1068], decl =
Variable: id = {0x400015fc5}, name = "recordType", type = "int", location = [sp+1028], decl = MezNetworkController.cpp:774
Run Code Online (Sandbox Code Playgroud)
变量“recordMap”未在“图像查找”输出中列出;这意味着 LLDB 实际上无法使用您当前的位置
这通常是编译器生成的调试信息存在问题,其中忽略了变量。当调试器没有被告知某个变量或该变量在内存中的位置时,不幸的是它无能为力。
作为解决方法,您可以手动打印键/值绑定(我看到您已经在为键执行此操作),但我会向 clang 编译器提交有关缺少变量的错误报告
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |