WinDbg live debugging shows module as ".exe" (no symbols), but TTD loads symbols fine

I’m debugging a small Cygwin-based program with WinDbg (live debugging), and WinDbg refuses to load symbols for my executable. In the module list it only shows:

ModLoad: 00000001`00400000 00000001`00419000   .exe

So the module name is literally just .exe, and no symbols for hello_world.exe ever load. Symbols for cygwin1.dll load fine.
If I use Time Travel Debugging (TTD) with the same binary and DLLs, WinDbg shows the proper name and symbols work:

ModLoad: 00000001`00400000 00000001`00419000   hello_world.exe
ModLoad: 00007ff9`xxxx0000 00007ff9`xxxxe000   cygwin1.dll
bp hello_world!main

I tried putting the executable and cygwin1.dll both in a WSL path and on a normal C: path, but WinDbg behaves the same in both cases. I have double checked the source and symbol paths .

What compiler are you using to compile it? WinDbg understands symbol files created by Visual C++.

I'm compiling the program with Cygwin's GCC toolchain. What’s confusing is that WinDbg is able to load the symbols correctly when using TTD, but during live debugging it treats the module as just “.exe” and doesn’t load any symbols at all.

GCC is unable to produce debugging information in the PDB format. I am not sure why you get any success at all with TTD to be honest. You should either use gdb or switch to a toolchain that actually works with the Windows ecosystem. MSVC and Clang are your usual options. However that probably doesn’t help you if you are stuck with cygwin for some reason.

!lmi output in case of TTD

         Module: hello_world
   Base Address: 0000000100400000
     Image Name: hello_world.exe
   Machine Type: 34404 (X64)
     Time Stamp: 68efdcac Wed Oct 15 23:11:00 2025
           Size: 19000
       CheckSum: 1fd92
Characteristics: 26  
Debug Data Dirs: Type  Size     VA  Pointer
             CODEVIEW    19,  401c,    141c RSDS - GUID: {C7121DA2-FCD2-96E5-43E2-7127FDF66134}
               Age: 1, Pdb: 
     Image Type: FILE     - Image read successfully from debugger.
                 hello_world.exe
    Symbol Type: PDB      - No error - symbol load deferred from image path.
                 C:\ProgramData\Dbg\sym\hello_world.exe\68EFDCAC19000\hello_world.exe
    Load Report: no symbols loaded
                 C:\ProgramData\Dbg\sym\hello_world.exe\68EFDCAC19000\hello_world.exe 


This is the !lmi output in case of live debugging

Loaded Module Info: [00000001`00400000] 
         Module: 
   Base Address: 0000000100400000
     Image Name: .exe
   Machine Type: 34404 (X64)
     Time Stamp: 68efdcac Wed Oct 15 23:11:00 2025
           Size: 19000
       CheckSum: 1fd92
Characteristics: 26  
Debug Data Dirs: Type  Size     VA  Pointer
             CODEVIEW    19,  401c,    141c RSDS - GUID: {C7121DA2-FCD2-96E5-43E2-7127FDF66134}
               Age: 1, Pdb: 
     Image Type: FILE     - Image read successfully from debugger.
                 C:\Users\MCW\Downloads\test\hello_world.exe
    Symbol Type: NONE     - No error - symbol load deferred from image path.
    Load Report: no symbols loaded

For you reference i have added the !lmi output of TTD and live debugging respectively .Yes I have the necessity to debug executables compiled with Cygwin toolchain .

You Should Generate a pdb file for windbg to load the symbols

you can generate a pdb file using the following command

gcc -g HELLO.C -o HELLO.exe -Wl,--pdb=HELLO.pdb

also make sure you run windbg from cygwin terminal for cygwin1.dll to be loaded in the process

foo@blah /cygdrive/…./appdir
$ windbgx hello.exe

running windbg out from Start Menu and loading using File→ LaunchExecutable will likely end up in NtTerminateProcess



if done correctly windbg should be able to debug your exe compiled with cygwin gcc , g++



0:000> lmvm h*
Browse full module list
start             end                 module name
00000001`00400000 00000001`0041a000   HELLO      (pdb symbols)          E:\CYGAPP\HELLO\HELLO.pdb
    Loaded symbol image file: E:\CYGAPP\HELLO\hello.exe
    Image path: HELLO.exe
    Image name: HELLO.exe
    Browse all global symbols  functions  data  Symbol Reload
    Timestamp:        Fri Nov 21 17:40:04 2025 (6920A3F4)
    CheckSum:         0001994C
    ImageSize:        0001A000
    Mapping Form:     Loaded
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    Information from resource tables:


0:000> x HELLO!main
00000001`00401080 HELLO!main (main)


0:000> uf HELLO!main
HELLO!main:
00000001`00401080 55              push    rbp
00000001`00401081 4889e5          mov     rbp,rsp
00000001`00401084 4883ec20        sub     rsp,20h
00000001`00401088 e833000000      call    HELLO!_main (00000001`004010c0)
00000001`0040108d 488d056c1f0000  lea     rax,[HELLO!_cygwin_cxx_malloc <PERF> (HELLO+0x3000) (00000001`00403000)]
00000001`00401094 4889c1          mov     rcx,rax
00000001`00401097 e834000000      call    HELLO!puts (00000001`004010d0)
00000001`0040109c b800000000      mov     eax,0
00000001`004010a1 4883c420        add     rsp,20h
00000001`004010a5 5d              pop     rbp
00000001`004010a6 c3              ret

0:000> da Hello+0x3000
00000001`00403000  "hello cygwin"
1 Like

Well I’ll be damned, binutils actually added some PDB support throughout 2022, my understanding was outdated. Depending on how complete it is what @raj_r suggested here may work.

Thank you for your reply I will try this way

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.