LLDB /w Windows and MinGW64

Hi,

I have built LLDB on Windows 7 using MinGW64/4.9.2 (took some effort to get the job done…)
When I tried to debug a simple hello world executable, I get this output:

D:\software\msys-for-clang\1.0\home\PC\build-release-64-lldb\bin>lldb.exe HelloWorld.exe
(lldb) target create “HelloWorld.exe”
Current executable set to ‘HelloWorld.exe’ (x86_64).
(lldb) b main.cpp:7
Breakpoint 1: where = HelloWorld.exe`main + 26 at main.cpp:7, address = 0x000000000040154a
(lldb) r
error: process launch failed: unable to locate lldb-server
(lldb)

I can’t seem to locate lldb-server anywhere, and according to LLDBConfig.cmake, this target should not get built on Windows:

Figure out if lldb could use lldb-server. If so, then we’ll

ensure we build lldb-server when an lldb target is being built.

if ((CMAKE_SYSTEM_NAME MATCHES “Darwin”) OR
(CMAKE_SYSTEM_NAME MATCHES “FreeBSD”) OR
(CMAKE_SYSTEM_NAME MATCHES “Linux”) OR
(CMAKE_SYSTEM_NAME MATCHES “NetBSD”))
set(LLDB_CAN_USE_LLDB_SERVER 1)
else()
set(LLDB_CAN_USE_LLDB_SERVER 0)
endif()

and in the tools/CMakeLists.txt file we have this:

if (LLDB_CAN_USE_LLDB_SERVER)
add_subdirectory(lldb-server)
endif()

Any ideas?

Thanks,

I’m the main Windows maintainer, and while We’ve gotten things working pretty well on Windows, our effort has been 100% on building with msvc and/or clang-cl. Building with mingw has a different set of pre processor defines and some other subtle differences, so it doesn’t surprise me that things don’t work quite right.

You can try getting lldb-server to build and run under Windows, or you can try to get it to use the non lldb server codepath on MinGW, but you may still run into some issues after that as well, since you’re the first person afaik to try building with MinGW

I'm the main Windows maintainer,

Hi

and while We've gotten things working pretty well on Windows, our effort
has been 100% on building with msvc and/or clang-cl. Building with mingw
has a different set of pre processor defines and some other subtle
differences, so it doesn't surprise me that things don't work quite right.

​I got it to compile (I have a big patch that I can send you if you are

interested)
mainly involves blocking code under __MINGW32__ and some updates to the
various CMakeLists.txt and AddLLDB.cmake module files
Some functions are missing in MinGW implementations (like gets_s and others
:/)

You can try getting lldb-server to build and run under Windows, or you can
try to get it to use the non lldb server codepath on MinGW, but you may
still run into some

​I got lldb-server to compile and run on Windows, however, it crashes
immediately and the backtrace shows this:

0 0x0000000000724615
lldb_private::NativeProcessProtocol::Launch(lldb_private::ProcessLaunchInfo&,
lldb_private::NativeProcessProtocol::NativeDelegate&,
lldb_private::MainLoopBase&,
std::shared_ptr<lldb_private::NativeProcessProtocol>&)
1 0x00000000005f815d
lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS::LaunchProcess()

2 0x00000000004020e5
handle_launch(lldb_private::process_gdb_remote::GDBRemoteCommunicationServerLLGS&,
int, char const* const*)
3 0x000000000040335e main_gdbserver(int, char**)
4 0x000000000188329c main

I had to #ifndef __MINGW32__ around lldb-platform.cpp as it contains too
much Linux code that can not be compiled under Windows (fork, exec*)
and basically lldb-server calls the main_gdbserver instead of main_platform
function

​Looking at the function that crashes, I see this:

llvm_unreachable("Platform has no NativeProcessProtocol support");

Any ideas?
Thanks!

issues after that as well, since you're the first person afaik to try

Patches welcome. If you can split it into independent pieces that would be helpful, but it’s not always possible.

The NativeProcessProtocol error, that’s the interface that converts debugging events that occur on the inferior into packets that can be sent to the server, and vice versa. Since Windows doesn’t currently use lldb server, this piece has never been written for Windows

Patches welcome. If you can split it into independent pieces that would be
helpful, but it's not always possible.

Patch is attached, I think you will find it quite straight forward - feel

free to comment and send it back for revise

The NativeProcessProtocol error, that's the interface that converts
debugging events that occur on the inferior into packets that can be sent
to the server, and vice versa. Since Windows doesn't currently use lldb
server, this piece has never been written for Windows

​So this raises the question: how come lldb asks for it? (see my first emai
inl this conversation)
I would have build LLDB in debug mode, but it seems that MinGW as.exe fails
to write some of the files "File too big"

lldb-mingw.patch (12.3 KB)

If you compile with MSVC or Clang-cl it wouldn’t ask for lldb-server. So most likely there is some code that is using #if defined(_MSC_VER) when it should be using #if defined(LLVM_ON_WINDOWS).

You’ll have to hunt that down, but a good starting point might be to put a breakpoint in ProcessWindowsLive::CreateInstance and then work backwards to see why that isn’t getting called (assuming it’s not).

For the patch, can you create an account on reviews.llvm.org, and upload your patch there? This makes interactive reviewing / commenting much easier. Let me know if you need help getting that set up.

Is this what you meant:
http://reviews.llvm.org/differential/diff/51809/

Thanks

Almost, there’s one more step. Click Create a New Revision on that screen, then give it a title and a description. For reviewers put zturner, and for subscribers put lldb-commits

Done.

http://reviews.llvm.org/D18519

I was able to locate the problematic code: ProcessWindowsLive::Initialize() was not called due to wrong macros
http://reviews.llvm.org/D18520

Sorry, the current status is that lldb-server is no longer needed, however the debuggee process hangs and the lldb.exe is “froze” (i.e. it does not accept user input)

Here is the backtrace: http://pastebin.com/mbLFgCA6
I will try and get lldb built in debug mode for better debugging… but this will take sometime as the generated files are too large to written to the file system - (clang sources)

I will teak the CMakeLists.txt files to fix this and will report back
In the meantime, if you have any more hints/tips - I will be happy to try them here

Thanks

Ping…

I will have another look tomorrow.

I managed to “launch” the process - but it crashes immediately.
This happens both with lldb.exe and with my GUI interface

See http://pastebin.com/9ep130EQ for detailed backtrace

Thanks