<div dir="ltr"><div dir="ltr"><div dir="ltr">The `argv.size()` expression doesn't crash with SIGSEGV when used directly in the Clang binary though, only when evaluated in LLDB.<br>I'm running x64 Linux (Ubuntu 18.04) and compiled the binary in debug mode using Clang, LLD, libc++ (all in version 8.0.0) installed from the official APT repository.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 25 Mar 2019 at 20:56, Adrian Prantl <<a href="mailto:aprantl@apple.com" target="_blank">aprantl@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
> On Mar 25, 2019, at 6:08 AM, Jan Svoboda via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
> <br>
> Hi,<br>
> I'm trying to use LLDB to debug Clang built with the LLVM toolchain.<br>
> <br>
> However, whenever I try to evaluate a method call in the debugger,<br>
> I get the following error instead of the actual result:<br>
> <br>
> error: Execution was interrupted,<br>
> reason: signal SIGSEGV: invalid address (fault address: 0x0).<br>
> <br>
> (See the full output below.)<br>
> <br>
> What am I doing wrong? GDB works fine in this scenario. LLDB works<br>
> fine with other projects I have on hand. Any help appreciated.<br>
> <br>
> Thanks,<br>
> Jan<br>
> <br>
> --<br>
> <br>
> $ lldb-8 ./llvm-project/build/bin/clang<br>
> (lldb) target create "./llvm-project/build/bin/clang"<br>
> Current executable set to './llvm-project/build/bin/clang' (x86_64).<br>
> (lldb) b main<br>
> Breakpoint 1: where = clang`main + 25 at driver.cpp:322:18, address = 0x00000000043142d9<br>
> (lldb) r<br>
> Process 4920 launched: '/home/jan/Code/llvm-project/build/bin/clang' (x86_64)<br>
> Process 4920 stopped<br>
> * thread #1, name = 'clang', stop reason = breakpoint 1.1<br>
>     frame #0: 0x00000000043142d9 clang`main(argc_=1, argv_=0x00007fffffffdf28) at driver.cpp:322:18<br>
>    319     }<br>
>    320     <br>
>    321     int main(int argc_, const char **argv_) {<br>
> -> 322       llvm::InitLLVM X(argc_, argv_);<br>
>    323       SmallVector<const char *, 256> argv(argv_, argv_ + argc_);<br>
>    324     <br>
>    325       if (llvm::sys::Process::FixupStandardFileDescriptors())<br>
> (lldb) n<br>
> Process 4920 stopped<br>
> * thread #1, name = 'clang', stop reason = step over<br>
>     frame #0: 0x00000000043142ed clang`main(argc_=1, argv_=0x00007fffffffdf28) at driver.cpp:323:39<br>
>    320     <br>
>    321     int main(int argc_, const char **argv_) {<br>
>    322       llvm::InitLLVM X(argc_, argv_);<br>
> -> 323       SmallVector<const char *, 256> argv(argv_, argv_ + argc_);<br>
>    324     <br>
>    325       if (llvm::sys::Process::FixupStandardFileDescriptors())<br>
>    326         return 1;<br>
> (lldb) n<br>
> Process 4920 stopped<br>
> * thread #1, name = 'clang', stop reason = step over<br>
>     frame #0: 0x000000000431430c clang`main(argc_=1, argv_=0x00007fffffffdf28) at driver.cpp:325:7<br>
>    322       llvm::InitLLVM X(argc_, argv_);<br>
>    323       SmallVector<const char *, 256> argv(argv_, argv_ + argc_);<br>
>    324     <br>
> -> 325       if (llvm::sys::Process::FixupStandardFileDescriptors())<br>
>    326         return 1;<br>
>    327     <br>
>    328       llvm::InitializeAllTargets();<br>
> (lldb) e argv<br>
> (llvm::SmallVector<const char *, 256>) $0 = {<br>
>   llvm::SmallVectorImpl<const char *> = {<br>
>     llvm::SmallVectorTemplateBase<const char *, true> = {<br>
>       llvm::SmallVectorTemplateCommon<const char *> = {<br>
>         llvm::SmallVectorBase = (BeginX = 0x00007fffffffd598, Size = 1, Capacity = 256)<br>
>       }<br>
>     }<br>
>   }<br>
>   llvm::SmallVectorStorage<const char *, 256> = {<br>
>     InlineElts = {<br>
>       ... // actual elements here<br>
>     }<br>
>   }<br>
> }<br>
> (lldb) e argv.size()<br>
> error: Execution was interrupted, reason: signal SIGSEGV: invalid address (fault address: 0x0).<br>
> The process has been returned to the state before expression evaluation.<br>
> (lldb) <br>
<br>
This error message indicates that the expression you compiled "argv.size()" crashed with a SIGSEV. If this is unoptimized code this looks like it could be a bug in LLDB. What OS are you using and what compiler did you compile clang with?<br>
<br>
-- adrian<br>
</blockquote></div>
</div></div>