[Lldb-commits] [lldb] [lldb][windows] support long path in loaded modules cache (PR #206117)

Charles Zablit via lldb-commits lldb-commits at lists.llvm.org
Wed Aug 12 04:47:42 PDT 2026


charles-zablit wrote:

> No, that's not the case. `GetModuleHandleExW` with `GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS` should be fine.

I tried it and it does not work. `GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS` resolves the address against the calling process's module list, not the debuggee's.

Results when debugging a simple program(`sleeper.exe`):

```
  [sleeper.exe]      base=00007FF660470000
      GetModuleFileNameExW:    \\?\C:\Users\...\sleeper.exe
      GetModuleHandleExW:      FAILED err=126          // ERROR_MOD_NOT_FOUND

  [umppc21108.dll]   base=00000218061A0000
      GetModuleFileNameExW:    C:\windows\System32\umppc21108.dll
      GetModuleHandleExW:      FAILED err=126

  [ntdll.dll]        base=00007FFFB9560000
      GetModuleFileNameExW:    C:\windows\SYSTEM32\ntdll.dll
      GetModuleHandleExW:      HMODULE=00007FFFB9560000
        ...which is:           C:\windows\SYSTEM32\ntdll.dll
      GetFinalPathName(HMOD):  FAILED needed=0 err=6   // ERROR_INVALID_HANDLE
```

Also, I found that instead of truncating a long path, `CreateToolhelp32Snapshot(TH32CS_SNAPMODULE)` refuses the process path outright with ERROR_MORE_DATA

| exe path | recorded image path (with `\\?\`) | `CreateToolhelp32Snapshot(TH32CS_SNAPMODULE)` | `EnumProcessModulesEx` + `GetModuleFileNameExW` |
  | -------: | -------------------------------: | --------------------------------------------- | ----------------------------------------------- |
  | 251 | 255 | OK | OK |
  | 257 | 261 | `INVALID_HANDLE_VALUE`, `ERROR_MORE_DATA` (234) | OK |
  | 287 | 291 | `INVALID_HANDLE_VALUE`, `ERROR_MORE_DATA` (234) | OK |

> While ToolHlp32 has its own set of issues, you are certain that the snapshot itself is valid.

I don't think this is true per the documentation: https://learn.microsoft.com/en-us/windows/win32/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot
> if the module list changes during the function call as a result of DLLs being loaded or unloaded, the function might fail with ERROR_BAD_LENGTH or other error code.

https://github.com/llvm/llvm-project/pull/206117


More information about the lldb-commits mailing list