<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143149>143149</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
A few of lldb's frame formatting function options do not work on Windows
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lldb,
platform:windows
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DavidSpickett
</td>
</tr>
</table>
<pre>
Found while fixing https://github.com/llvm/llvm-project/pull/142952, but really this has been going on for a while.
`function.name` and `function.name-without-args` don't work on Windows because it thinks that the function's "name" is like `void fn(void)`.
For example:
```
C:\Users\tcwg>cat test.cpp
void fn0() {}
void fn1() { fn0();}
int main() { fn1(); return 0; }
```
This is the default backtrace:
```
lldb.exe test.exe
(lldb) target create "test.exe"
Current executable set to 'C:\Users\tcwg\test.exe' (aarch64).
(lldb) b fn0
Breakpoint 1: where = test.exe`void __cdecl fn0(void) at test.cpp:1, address = 0x00000001400148c0
(lldb) run
Process 5632 launched: 'C:\Users\tcwg\test.exe' (aarch64)
Process 5632 stopped
* thread #1, stop reason = breakpoint 1.1
frame #0: 0x00007ff6483248c0 test.exe`void __cdecl fn0(void) at test.cpp:1
-> 1 void fn0() {}
2 void fn1() { fn0();}
3 int main() { fn1(); return 0; }
4
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* frame #0: 0x00007ff6483248c0 test.exe`void __cdecl fn0(void) at test.cpp:1
frame #1: 0x00007ff6483248d4 test.exe`void __cdecl fn1(void) at test.cpp:2
frame #2: 0x00007ff6483248ec test.exe`main at test.cpp:3
frame #3: 0x00007ff648324838 test.exe`static int __scrt_common_main_seh() at exe_common.inl:288
frame #4: 0x00007ff648324d3c test.exe`mainCRTStartup(__formal=<unavailable>) at exe_main.cpp:16
frame #5: 0x00007ff9efe52310 kernel32.dll`BaseThreadInitThunk + 48
frame #6: 0x00007ff9f3a15aec ntdll.dll`RtlUserThreadStart + 60
```
Note that some functions lack arguments, I don't know why.
`function.name` does not remove the return type or parameters for some functions:
```
(lldb) settings set frame-format "'${function.name}'\n"
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* 'void __cdecl fn0(void)'
'void __cdecl fn1(void)'
'main'
'static int __scrt_common_main_seh()'
'mainCRTStartup'
'BaseThreadInitThunk'
'RtlUserThreadStart'
```
`function.mangled-name` works:
```
(lldb) settings set frame-format "'${function.mangled-name}'\n"
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* '?fn0@@YAXXZ'
'?fn1@@YAXXZ'
'main'
'static int __scrt_common_main_seh()'
'mainCRTStartup'
'BaseThreadInitThunk'
'RtlUserThreadStart'
```
`function.name-with-args` still includes the return type:
```
(lldb) settings set frame-format "'${function.name-with-args}'\n"
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* 'void __cdecl fn0(void)'
'void __cdecl fn1(void)'
'main'
'static int __scrt_common_main_seh()'
'mainCRTStartup(__formal=<unavailable>)'
'BaseThreadInitThunk'
'RtlUserThreadStart'
```
`function.name-without-args` also does not work:
```
(lldb) settings set frame-format "'${function.name-without-args}'\n"
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* 'void __cdecl fn0(void)'
'void __cdecl fn1(void)'
'main'
'static int __scrt_common_main_seh()'
'mainCRTStartup'
'BaseThreadInitThunk'
'RtlUserThreadStart'
```
That was with PDB debug info, I tried DWARF too but the only difference was that we got some extra functions before main that are unrecognised, and the calling convention goes away:
```
(lldb) settings set frame-format "'${function.name}'\n"
(lldb) bt
* thread #1, stop reason = breakpoint 1.1
* 'void fn0(void)'
'void fn1(void)'
'main'
frame #3: 0x00007ff6955721a0 test.exe`test.exe[0x00000001400021a0]
frame #4: 0x00007ff69557225c test.exe`test.exe[0x000000014000225c]
'BaseThreadInitThunk'
'RtlUserThreadStart'
```
The basic problem here is that on Windows we think `name` is `<return type> <calling convention> <actual name>(<parameters>)`.
It doesn't seem like a thing that would be decided by the platform, but it looks like it is because it happens for DWARF and PDB.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWFtv2zoS_jX0yyCGREq-PPjBlxroy6LoyeKc3ReDIkc21zQpkFSc_PsFKcWWc-lJi3aBYgMFUUTym-F8cyO592pvEBekXJFyM-JtOFi32PAHJf9olDhiCKPKyqfF1rZGwvmgNEKtHpXZwyGExhO2JHRL6HavwqGtxsKeCN1q_fD8565x9j8oAqHbptWa0G1e0HlJCV1D1QZwyLV-gnBQHg7cQ4VoYG-jAGugtg54J3ZMsmV8JlndGhGUNWPDT0gmGXAj4eX3u7MKB9uGO-72Pk6S1hA6DXC27hih_1RG2nMUKHjrEVSISpijh3Dg8R3hGZDQqQdCaZJHKSgPWh0xynywSkJtCJ3FN0LnZJL1mm6tA3zkp0ZjtFJSvX-y5Tp-Ktf_9Og8KddBnPeEfRJRMPowFk1DsmUPnhE6I3QOZLoi0831e379fp1FWD9JmQAnrszNpPwyCRyG1hnI4nu3YqjffeRD-WQGiTVvdYCKi2NwXLyxHa1lNcZH7LTHR4zjdBY_R-GBuz0GEA55wGjJyzRKozFa59AEwEcUbeCVRvAYIFggdPqWpcr1FWAKhM44d-IwKQidj28lV8ky2XLlkB8bG42SE7aE8wEdAmGbq8Y9mbudkCh0b9GeVRgSw5Z59F4upUPvE0j2mHU_eRF_ZyK7VcO1hmTLL86KuKKcMAqat0YcUEZtvn-bL9F8sE2DMkldQjg45BIIZUnTOBgDzVuTtK0GxhjnJFsCANSOnyI3LIsadRua1vWkmDEaN_SDhsqWd4R9gjyKeM-fAYDCh5waAFhE-n7nBoDihWuEH7ZWXPXL7HVDRv4WuCy-AZ6_Cx5D7YpM30JGMUSOFn6BwV4qyN6CYbMhjA88KJE42-28cGEn7OlkzS7i7zweehZ5ygD94FgZHXWezV5KLN6QKNkrxddf7_8I3IW2IXS229XWnbgmbEPYujX8gSsdEw1hnwai47pnJiYv5ZY3cudYY0lZnsERnUHN6FhqTSbZinu8Tx712ahwf2jNEQhdQfFqI5NbwJrxvOQowASpdY_2NeiYEjrAtJ8ElpLuMAH_wwbsCpe3p2vl8qC5OAJ3-_aEJvjo358vpfBo7BnOh6dvlFZp0YOxsU6f7AOmetAHV3hqEKyDhscNBXQ-letb-a9LxSACPYagzN6nbJ_McpdoinukhE4JLch0davTdBMHyrXpSsfPi2dCp--HaZTZsfd6Wv7OtC4_DT58MA76NT3C0I0HWG942XXda6fpxm5oGJB94mavUd49kx5bpJ_K3I2AX8kgYdvIWxGffy3_-uvfV6Okofz10O9G1qW5vXS2PiitQRmhW4n-ZYj-7AgcyP4dYvGXcPt39eR_wP7waMO1t9dMHaP3l5B-Efn_wfs1MbwK62-y2q37CLH3sV6fuYdoXfiyWYHEqt2DMrXtKnVwCiVs_lx-3UKwNp2YY3xbo59AqrpGh0ZgAknV_4ywt30TgI_B8UErUGFtHaa-uZvMHUJrHAq7N8qjTKcaI5MEwbWOh3BhzQOaCAD76GH8zJ9-v6L-N470sSL-Xs87L8spzflNx395LVc3Z8MsTiTl5haweAOQluJjgLQUPeBPc0uEinsloHG20niCdFhWvYsN7k7O2N2ZAJlkz82D8vE_wtY3NegTELZ-7VP9ABeh5RoSREygM8LW17ayz6mXi5XPISW7rof1iKfuNoYnXfZ9HNhWS6gQJAolUUL1lNy60TxEd3y-flIBtLXH_kJHhaj-4EbowJsGTdfYdlEY4-PLZjUeyQWTczbnI1zk02JOaVYWdHRYcEqxmNV1zmWOWcbm2RR5VeRYohSTuhypBc1omU2ySV6wssjHec6Q8xmf5HNWlNOCFBmeuNJjrR9OY-v2I-V9i4u8YHkxH2leofbpyo7SLk4ooWtC6WVzbHnuGIpD5WbkFukqrmr3nhSZVj74K3hQQeNiCTWewdbQIU59751d7MaIvmQSsE2XUKS9FJyBV4xapxfffTmYtujT9WDa5cOC_jcAAP__JfE8uA">