> On Jan 31, 2020, at 4:53 PM, Jim Ingham <jing...@apple.com> wrote: > > That shouldn't be ASAN specific, that should happen on and > LLDB_CONFIGURATION_DEBUG build. If it only happens on ASAN builds, something > else must be going wrong. > > BTW, those asserts only make sense if you can't re-enter the command > interpreter while a command is active. In the case of a command that runs > the target synchronously (like "step") with stop hooks or breakpoint > commands, the "step" command won't have completed when you're running the > commands in the stop hook or the breakpoint callback. So that assumption is > clearly not correct. > > I don't think those asserts serve any useful purpose beyond reminding us that > some day we really need to take the time to tease apart the part of > CommandObject that forms the template for the command, and the part that > represents this particular execution of that command. > > The CommandObject is a singleton, so it makes no sense for it to hold the > data for any given execution. We skate by on this for the most part because > commands tend to do: > > 1) Store away the execution context for this command invocation > 2) Parse Command Input into the option ivars in the CommandObject > 3) Use those ivars to figure out what to do > 4) Do It > 5) Report a result that doesn't rely on the input data > > Since you don't generally get a chance to run another command till stage 4, > it doesn't matter that that operation might overwrite the context or option > ivars in the current CommandObject. > > This is clearly the wrong design, but unfortunately it has never caused any > problems serious enough to motivate fixing it. > > Jim > >> On Jan 31, 2020, at 4:04 PM, Adrian Prantl <apra...@apple.com> wrote: >> >> This could be the known bug where a CommandObject is scheduled while the >> same CommandObject is already deeper on the command stack. I tried digging >> up the bugreport for that, but I couldn't find it.
The one I was thinking about was <rdar://problem/48514710> which says the stop-hooks test is failing when building in debug mode. -- adrian >> >> -- adrian >> >>> On Jan 31, 2020, at 3:59 PM, Vedant Kumar <vedant_ku...@apple.com> wrote: >>> >>> >>> >>>> On Mar 5, 2019, at 5:07 PM, Adrian Prantl via lldb-commits >>>> <lldb-commits@lists.llvm.org> wrote: >>>> >>>> Author: adrian >>>> Date: Tue Mar 5 17:07:45 2019 >>>> New Revision: 355466 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=355466&view=rev >>>> Log: >>>> Replace debug-only assert with a plain old assert. >>>> >>>> Modified: >>>> lldb/trunk/source/Interpreter/CommandObject.cpp >>>> >>>> Modified: lldb/trunk/source/Interpreter/CommandObject.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandObject.cpp?rev=355466&r1=355465&r2=355466&view=diff >>>> ============================================================================== >>>> --- lldb/trunk/source/Interpreter/CommandObject.cpp (original) >>>> +++ lldb/trunk/source/Interpreter/CommandObject.cpp Tue Mar 5 17:07:45 >>>> 2019 >>>> @@ -136,17 +136,15 @@ bool CommandObject::ParseOptions(Args &a >>>> } >>>> >>>> bool CommandObject::CheckRequirements(CommandReturnObject &result) { >>>> -#ifdef LLDB_CONFIGURATION_DEBUG >>>> // Nothing should be stored in m_exe_ctx between running commands as >>>> // m_exe_ctx has shared pointers to the target, process, thread and frame >>>> and >>>> // we don't want any CommandObject instances to keep any of these objects >>>> // around longer than for a single command. Every command should call >>>> - // CommandObject::Cleanup() after it has completed >>>> - assert(m_exe_ctx.GetTargetPtr() == NULL); >>>> - assert(m_exe_ctx.GetProcessPtr() == NULL); >>>> - assert(m_exe_ctx.GetThreadPtr() == NULL); >>>> - assert(m_exe_ctx.GetFramePtr() == NULL); >>>> -#endif >>>> + // CommandObject::Cleanup() after it has completed. >>>> + assert(!m_exe_ctx.GetTargetPtr()); >>> >>> Hi all, >>> >>> I'm actually hitting this assert now when I try debugging clang with a >>> sanitized lldb. Any advice appreciated! >>> >>> Stop hook #1 added. >>> (lldb) s >>> * thread #1, queue = 'com.apple.main-thread', stop reason = step in >>> * frame #0: 0x00000001044d2268 clang-10`clang::noteBottomOfStack() at >>> Stack.cpp:42:8 >>> frame #1: 0x0000000100002295 clang-10`main(argc_=64, >>> argv_=0x00007ffeefbff160) at driver.cpp:342:3 >>> frame #2: 0x00007fff722ba3d5 libdyld.dylib`start + 1 >>> >>> Assertion failed: (!m_exe_ctx.GetTargetPtr()), function CheckRequirements, >>> file >>> /Users/vsk/src/llvm-project-master/lldb/source/Interpreter/CommandObject.cpp, >>> line 153. >>> Stack dump: >>> 0. Program arguments: >>> /Users/vsk/src/builds/llvm-project-master-SAN/bin/lldb -o b main -o r -o >>> target stop-hook add -o bt -o v -o s -o s -- >>> /Users/vsk/src/builds/llvm-project-master-D/bin/clang-10 -cc1 -triple >>> x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage >>> -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -main-file-name >>> sqlite3.c -mrelocation-model pic -pic-level 2 -mthread-model posix >>> -mframe-pointer=all -fno-rounding-math -masm-verbose -munwind-tables >>> -target-sdk-version=10.14 -target-cpu penryn -dwarf-column-info >>> -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb >>> -target-linker-version 556 -resource-dir >>> /Users/vsk/src/builds/llvm-project-master-RA/lib/clang/11.0.0 -isysroot >>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include >>> -internal-isystem >>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include >>> -internal-isystem >>> /Users/vsk/src/builds/llvm-project-master-RA/lib/clang/11.0.0/include >>> -internal-externc-isystem >>> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -O2 >>> -fdebug-compilation-dir /Users/vsk/src/builds/llvm-project-master-RA >>> -ferror-limit 19 -fmessage-length 178 -stack-protector 1 -fblocks >>> -fencode-extended-block-signature -fregister-global-dtors-with-atexit >>> -fgnuc-version=4.2.1 -fobjc-runtime=macosx-10.14.0 -fmax-type-align=16 >>> -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops >>> -vectorize-slp -o /dev/null -x c >>> /Users/vsk/Downloads/sqlite-amalgamation-3300100/sqlite3.c >>> zsh: abort ~/src/builds/llvm-project-master-SAN/bin/lldb -o "b main" >>> -o "r" -o -o "s" - >>> >>> vedant >>> >>> >>>> + assert(!m_exe_ctx.GetProcessPtr()); >>>> + assert(!m_exe_ctx.GetThreadPtr()); >>>> + assert(!m_exe_ctx.GetFramePtr()); >>>> >>>> // Lock down the interpreter's execution context prior to running the >>>> command >>>> // so we guarantee the selected target, process, thread and frame can't go >>>> >>>> >>>> _______________________________________________ >>>> lldb-commits mailing list >>>> lldb-commits@lists.llvm.org >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >> > _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits