<< >>
justin = { main feed , music , code , askjf , social , pubkey };
[ <<< last (older) article | view in index | next (newer) article >>> ]

March 20, 2018
share the function names in your mac programs and plug-ins, man

It is amazing to me how many developers shoot themselves in the foot in the name of secrecy, image, embarrassments, fear of piracy, or something else (I have no idea!).

For example, almost all VST plug-in developers I see will never put symbol names in their plug-ins. So when a plug-in crashes, you get crash traces like this:

0   com.somedev.pluginnamethingy    0x00000001a4d351e3 0x1a4cb7000 + 516579
1   libc++abi.dylib                 0x00007fff76d8c3bb __dynamic_cast + 272
2   com.somedev.pluginnamethingy    0x00000001a505d897 0x1a4cb7000 + 3827863
3   com.somedev.pluginnamethingy    0x00000001a5107d85 0x1a4cb7000 + 4525445
4   com.somedev.pluginnamethingy    0x00000001a5107d15 0x1a4cb7000 + 4525333
5   com.somedev.pluginnamethingy    0x00000001a54740ec 0x1a4cb7000 + 8114412
6   com.somedev.pluginnamethingy    0x00000001a5107d85 0x1a4cb7000 + 4525445
7   com.somedev.pluginnamethingy    0x00000001a5145407 0x1a4cb7000 + 4776967
8   com.somedev.pluginnamethingy    0x00000001a5107d15 0x1a4cb7000 + 4525333
9   com.somedev.pluginnamethingy    0x00000001a5273ac1 0x1a4cb7000 + 6015681
10  com.somedev.pluginnamethingy    0x00000001a5103be4 0x1a4cb7000 + 4508644
Super helpful to everybody involved, right?

In REAPER we have for a very long time, on macOS at least, included symbol names. So when there's a crash, we see:
30  com.apple.AppKit                0x00007fff4f2f2ee6 _NSTryRunModal + 100
31  com.apple.AppKit                0x00007fff4ec5dcf9 -[NSApplication runModalForWindow:] + 133
32  com.cockos.reaper               0x0000000100510cad SWELL_DialogBox(SWELL_DialogResourceIndex*, char const*, 
33  com.cockos.reaper               0x000000010016583b __localizeDialog(void*, char const*, HWND__*, 
34  com.cockos.reaper               0x0000000100149a02 LoadProjectFromContext(ReaProject*, ProjectStateContext*, 
35  com.cockos.reaper               0x0000000100147fcc LoadProject(ReaProject*, char const*, int*, int) + 972
36  com.cockos.reaper               0x00000001000aef49 DoProjectLoad(char const*, bool, int) + 537
37  com.cockos.reaper               0x00000001000acc3d Main_openProject(char const*) + 509
38  com.cockos.reaper               0x0000000100070098 Main_OnCommandEx2(int, int, ReaProject*) + 9160
39  com.cockos.reaper               0x00000001000d3a6f Main_OnCommandEx(int, int, ReaProject*) + 31
40  com.cockos.reaper               0x000000010036198b KBD_OnMainActionEx(int, int, int, int, HWND__*, 
Yes, our functions are named terribly. It's much worse than it looks, even, but at a quick glance we (or our troubleshooting user) can quickly see exactly what the hell is going on.

Can one do this on VC builds (without doing full line numbers, obviously)? I forget...






3 Comments:
Posted by deee on Mon 26 Mar 2018 at 10:58 from 79.168.107.x
nothing justifies being disrespectful


Posted by Justin on Mon 26 Mar 2018 at 12:32 from 108.21.108.x
Disrespectful to whom?


Posted by deee on Mon 26 Mar 2018 at 12:57 from 79.168.107.x
nevermind! something better for you to spend your time: youtube.com/watch?v=lgCZN1rU5co


Add comment:
Name:
Human?: (no or yes, patented anti crap stuff here)
Comment:
search : rss : recent comments : Copyright © 2018 Justin Frankel