简体   繁体   English

LLDB没有在正确的行上设置断点

[英]LLDB is not setting breakpoints at the correct line

This should server to illustrate the problem. 这应该用服务器来说明问题。 I was originally trying to set the breakpoints in Xcode, but observed that the same problem happened when I set them on the command line of LLDB: 我最初试图在Xcode中设置断点,但观察到在LLDB命令行上设置断点时也会发生相同的问题:

(lldb) list /Users/jim/Code/breakout-juce/Source/BalLGame.h:300
   300         }
   301     }
   302 
   303     void handleCollision(const Object & other) override
   304     {
   305         if (other.getComponentID() == "paddle")
   306         {
   307             auto & paddle = dynamic_cast<const Paddle&>(other);
   308 
   309             auto positionInPaddle = paddle.getLocalPoint(this, getLocalBounds().getCentre());
   310             auto normal = paddle.getNormal(positionInPaddle.getX());

Now let me set a breakpoint at line 305. 现在让我在第305行设置一个断点。

(lldb) break set -f /Users/jim/Code/breakout-juce/Source/BalLGame.h -l 305
Breakpoint 4: where = Buzz`Ball::getDamage() const + 12 at BalLGame.h:341, address = 0x00000001000018ac

But bugger - it's now at line 341. 但麻烦的是-它现在位于第341行。

Here is line 341: 这是第341行:

(lldb) list /Users/jim/Code/breakout-juce/Source/BalLGame.h:340
   340 
   341     int getDamage() const { return damage; }
   342 
   343     void tick() override
   344     {
   345         setBounds(getBounds().translated(getDirectionVector().x, getDirectionVector().y));
   346         angle += deltaAngle;
   347     }
   348 
   349     bool isKilled() override { return killed; }
   350 

And we have debugging symbols: 我们有调试符号:

(lldb) script lldb.target.module['/Users/jim/Code/breakout-juce/Builds/MacOSX/build/Debug/Buzz.app/Contents/MacOS/Buzz'].GetNumCompileUnits()
19

Any ideas what to check next? 有什么想法下一步要检查吗? It's a debug build...I've just upgraded to the latest Xcode version, but it was failing in Xcode 6 as well in exactly the same way. 这是一个调试版本...我刚刚升级到最新的Xcode版本,但是它在Xcode 6中也以完全相同的方式失败。

PS. PS。 Here are the lovely compiler options: 这是可爱的编译器选项:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=c++11 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -D_DEBUG=1 -DDEBUG=1 -DJUCER_XCODE_MAC_F6D2F4CF=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -fasm-blocks -fstrict /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c ++ -arch x86_64 -fmessage-length = 0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit = 0 -std = c ++ 11 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-exit-时间破坏因素-无括号-括号-Wswitch-无使用的功能-无使用的标签-无使用的参数-无用的变量-无用的值-无空的主体-无用的未初始化- Wno-unknown-pragmas -Wno-shadow-Wno-四个字符常量-Wno-conversion-Wno-constant-conversion-Wno-int-conversion-Wno-bool-conversion-Wno-enum-conversion-Wno-shorten- 64到32 -Wno-换行符-Wno-c ++ 11扩展-D_DEBUG = 1 -DDEBUG = 1 -DJUCER_XCODE_MAC_F6D2F4CF = 1 -DJUCE_APP_VERSION = 1.0.0 -DJUCE_APP_VERSION_HEX = 0x10000 -isysroot / Applications / Xcode。 /Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -fasm-blocks -fstrict -aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.10 -g -fvisibility=hidden -fvisibility-inlines-hidden -Wno-sign-conversion -iquote /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-generated-files.hmap -I/Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-own-target-headers.hmap -I/Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-all-target-headers.hmap -iquote /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-project-headers.hmap -I/Users/jim/Code/breakout-juce/Builds/MacOSX/build/Debug/include -I../../JuceLibraryCode -I../../../juce/modules -I/Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Bui -aliasing -Wdeprecated-clarification -Winvalid-offset -mmacosx-version-min = 10.10 -g -fvisibility = hidden -fvisibility-inlines-hidden -Wno-sign-conversion -iquote / Users / jim / Limary / Library / Developer / Xcode / DerivedData /Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-produced-files.hmap -I / Users / jim / Library / Developer / Xcode / DerivedData / Buzz-gymosgfspfkofkhbahhngwelyhtes .build / Debug / Buzz.build / Buzz-own-target-headers.hmap -I / Users / jim / Library / Developer / Xcode / DerivedData / Buzz-gymosgfspfkofkhbahhngwelyhbv / Build / Intermediates / Buzz.build / Debug / Buzz.build /Buzz-all-target-headers.hmap -iquote /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Buzz-project-headers.hmap -I /用户/ jim /代码/ breakout-juce / Builds / MacOSX / build / Debug / include -I ../../ JuceLibraryCode -I ../../../ juce / modules -I / Users /吉姆/库/开发商/ Xcode中/ DerivedData /巴兹 - gymosgfspfkofkhbahhngwelyhbv /裴 ld/Intermediates/Buzz.build/Debug/Buzz.build/DerivedSources/x86_64 -I/Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/DerivedSources -Wreorder -F/Users/jim/Code/breakout-juce/Builds/MacOSX/build/Debug -MMD -MT dependencies -MF /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Objects-normal/x86_64/BalLGame.d --serialize-diagnostics /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Objects-normal/x86_64/BalLGame.dia -c /Users/jim/Code/breakout-juce/Source/BalLGame.cpp -o /Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/Debug/Buzz.build/Objects-normal/x86_64/BalLGame.o ld / Intermediates / Buzz.build / Debug / Buzz.build / DerivedSources / x86_64 -I / Users / jim / Library / Developer / Xcode / DerivedData / Buzz-gymosgfspfkofkhbahhngwelyhbv / Build / Intermediates / Buzz.build / Debug / Buzz.build / DerivedSources -Wreorder -F / Users / jim / Code / breakout-juce / Builds / MacOSX / build / Debug -MMD -MT依赖项-MF / Users / jim / Library / Developer / Xcode / DerivedData / Buzz-gymosgfspfkofkhbahhngwelyhbv / Build / Intermediates /Buzz.build/Debug/Buzz.build/Objects-normal/x86_64/BalLGame.d-串行化诊断/Users/jim/Library/Developer/Xcode/DerivedData/Buzz-gymosgfspfkofkhbahhngwelyhbv/Build/Intermediates/Buzz.build/ Debug / Buzz.build / Objects-normal / x86_64 / BalLGame.dia -c /Users/jim/Code/breakout-juce/Source/BalLGame.cpp -o / Users / jim / Library / Developer / Xcode / DerivedData / Buzz- gymosgfspfkofkhbahhngwelyhbv /生成/中间体/ Buzz.build /调试/ Buzz.build /对象 - 正常/ x86_64的/ BalLGame.o

If you set a breakpoint on a line of source code that doesn't generate any executable code (eg a comment, a #ifdef'ed out line, an non-exported function that never gets used) lldb will move the breakpoint to the next source line that generates executable code, which may well be in a different function. 如果您在不生成任何可执行代码的源代码行上设置断点(例如,注释,#ifdef'ed行,从未使用过的非导出函数),则lldb会将断点移至下一个生成可执行代码的源代码行,这些代码可能具有不同的功能。

Can't tell for sure from your source clips, but if getDamage is the next function after handleCollision, then the breakpoint motion would be explained if no code was emitted for handleCollision. 从您的源剪辑中无法确定,但是如果getDamage是handleCollision之后的下一个函数,那么如果没有为handleCollision发出代码,则将解释断点运动。 If you do: 如果您这样做:

(lldb) image lookup -n ClassName::handleCollision

or if you want to consult something outside lldb: 或者,如果您想咨询lldb以外的内容:

$ nm <Binary> | grep handleCollision

do they show there is actually a symbol for that function? 他们显示该功能实际上有一个符号吗?

尝试将Xcode升级到最新版本,如果您使用Xcode 7.1或更低版本,则可能是我在使用Xcode 7.1.1时遇到了许多错误,并且没有任何问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM