[L2Ork-dev] How to debug Windows and OSX

Jonathan Wilkes jon.w.wilkes at gmail.com
Tue Apr 7 13:07:00 EDT 2020


You have chosen to set the crflag for the binbuf reading routine, so
the final newline "\n" will get converted to an A_SEMI.

In preset_hub_read you are almost certainly assuming binbuf content
that's restricted to A_SYMBOL and A_FLOAT and not checking
for A_SEMI. I'd guess that A_SEMI is sneaking through somewhere in
that great waterfall of conditionals and wreaking havoc.

I'd suggest running under valgrind in Linux to see if you've got an
invalid read to narrow down the source of the bug.

Your current fix will probably stop the crasher for well-formed preset
file content. But your read routine still has a latent bug and
could still crash under malformed preset files on OSX and Windows.

-Jonathan


On Tue, Apr 7, 2020 at 3:42 AM Ivica Ico Bukvic <ico at vt.edu> wrote:
>
> So gdb appears to be useless here on both Linux and Windows. Valgrind, on the other hand, detected the access outside the allocated memory. It is as if the last binbuf atom that reads from a file is a null one and should not be read as it will result in a segfault on Windows and Linux (although on Linux only if it runs under Valgrind, go figure). The improved version is now on the pd-l2ork 1.x branch (see x_preset.c).
>
> On 4/7/2020 1:27 AM, Ivica Bukvic wrote:
>
> Another, perhaps more informative error output with Windows version compiled without any optimizations. Looks like strcmp somehow has access violation while trying to return the pointer to symbol inside an atom (atom_getsymbol). No idea as to why... BTW, I wish gdb debugger on Windows was a bit more verbose (e.g. outputting a line number). Am I missing something?
>
> #0  0x758a9bac in strcmp () from C:\WINDOWS\System32\msvcrt.dll
> #1  0x67623719 in preset_hub_read ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #2  0x67621523 in preset_node_request_hub_read ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #3  0x675a9774 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #4  0x675aae20 in pd!outlet_anything ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #5  0x6754d6f6 in pd!canvas_objfor ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #6  0x675a9983 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #7  0x675ae368 in pd!binbuf_eval ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #8  0x6754d828 in pd!messresponder_getglist ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #9  0x675a7d0b in pd_list () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #10 0x675aad9f in pd!outlet_list ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #11 0x675de368 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #12 0x675de482 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #13 0x675a7cb7 in pd_symbol ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #14 0x675aa804 in pd!obj_list ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #15 0x675de4d9 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #16 0x675a7d0b in pd_list () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #17 0x675aad9f in pd!outlet_list ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #18 0x67577285 in vinlet_dspprolog ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #19 0x675a7d0b in pd_list () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #20 0x675aa27e in signalinlet_new ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #21 0x675a7d0b in pd_list () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #22 0x675aad9f in pd!outlet_list ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #23 0x675e1aec in pd!info_out ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #24 0x675e202e in pd!canvasinfo_dir ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #25 0x675a9436 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #26 0x675aae20 in pd!outlet_anything ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #27 0x6754d6f6 in pd!canvas_objfor ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #28 0x675a9983 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #29 0x675ae368 in pd!binbuf_eval ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #30 0x6754d730 in pd!messresponder_getglist ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #31 0x675a7c51 in pd_bang () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #32 0x675aab42 in pd!outlet_bang ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #33 0x675def79 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #34 0x675df498 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #35 0x675a7c51 in pd_bang () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #36 0x675aab42 in pd!outlet_bang ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #37 0x6757691e in pd!g_template_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #38 0x675a7c51 in pd_bang () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #39 0x675a9ec1 in signalinlet_new ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #40 0x675a7c51 in pd_bang () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #41 0x675aab42 in pd!outlet_bang ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #42 0x675def79 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #43 0x675df510 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #44 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #45 0x675aac3c in pd!outlet_float ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #46 0x675dcf24 in pd!bang_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #47 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #48 0x675ae394 in pd!binbuf_eval ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #49 0x6754d828 in pd!messresponder_getglist ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #50 0x675a7d0b in pd_list () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #51 0x675aad9f in pd!outlet_list ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #52 0x675de368 in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #53 0x675de43c in route_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #54 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #55 0x675aac3c in pd!outlet_float ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #56 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #57 0x675aa04b in signalinlet_new ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #58 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #59 0x675aac3c in pd!outlet_float ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #60 0x675dcf24 in pd!bang_setup ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #61 0x675a7c73 in pd_float () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #62 0x67599775 in pd!iemgui_out_float ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #63 0x6759ce36 in radio_draw ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #64 0x6759ce5d in radio_draw ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #65 0x6759cf7b in radio_draw ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #66 0x6759cfc1 in radio_draw ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #67 0x67581ca9 in pd!gobj_click ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #68 0x67588bd2 in pd!canvas_doclick ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #69 0x6758a4dc in pd!canvas_mousedown ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #70 0x675a9724 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #71 0x6757e6b3 in pd!guiconnect_notarget ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #72 0x675a9983 in pd_typedmess ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #73 0x675ae368 in pd!binbuf_eval ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #74 0x675b757d in socketreceiver_read ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #75 0x675b6bf0 in sys_getrealtime ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #76 0x675b6cab in sys_microsleep ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #77 0x675b42d8 in sched_tick ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #78 0x675b4422 in pd!m_mainloop ()
>    from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #79 0x675b5023 in sys_main () from C:\Program Files (x86)\Purr Data\bin\pd.dll
> #80 0x00402730 in ?? ()
> #81 0x00401386 in ?? ()
> #82 0x755a6359 in KERNEL32!BaseThreadInitThunk ()
>    from C:\WINDOWS\System32\kernel32.dll
> #83 0x776e7b74 in ntdll!RtlGetAppContainerNamedObjectPath ()
>    from C:\WINDOWS\SYSTEM32\ntdll.dll
> #84 0x776e7b44 in ntdll!RtlGetAppContainerNamedObjectPath ()
>    from C:\WINDOWS\SYSTEM32\ntdll.dll
> #85 0x00000000 in ?? ()
> (gdb)
>
> --
> Ivica Ico Bukvic, D.M.A.
> Director, Creativity + Innovation
> Institute for Creativity, Arts, and Technology
>
> Virginia Tech
> Creative Technologies in Music
> School of Performing Arts – 0141
> Blacksburg, VA 24061
> (540) 231-6139
> ico at vt.edu
>
> ci.icat.vt.edu
> www.icat.vt.edu
> www.performingarts.vt.edu
> l2ork.icat.vt.edu
> ico.bukvic.net
>
>
>
> On Mon, Apr 6, 2020 at 9:06 PM Ivica Ico Bukvic <ico at vt.edu> wrote:
>>
>> Another crasher output with preset_hub debug enabled. Looks like the
>> cutoff is seemingly random. I wonder if it has something to do with a
>> number of nested calls? In both cases we are pushing 40+? Nothing else
>> obvious pops out and the same is not a problem on Linux at all...
>>
>> <snip long list>
>>
>>      found preset? 0 found node? 1
>>      data_count = 1 starting @ 293 out of 358
>>      1st_element = 0.001000
>>      atom
>>      data = %node%
>>      new node
>>      atom
>>      data = 2
>>      loc length = 2
>>      atom
>>      data = 28
>>      loc = 28
>>      atom
>>      data = 36
>>      loc = 36
>>      found matching node
>>      atom
>>      data = %preset%
>>      new preset
>>      atom
>>      data = 1
>>      preset 1
>>      found preset? 0 found node? 1
>>      data_count = 1 starting @ 300 out of 358
>>      1st_element = 33.388901
>>      atom
>>      data = %node%
>>      new node
>>      atom
>>      data = 2
>>      loc length = 2
>>      atom
>>      data = 27
>>      loc = 27
>>      atom
>>      data = 38
>>      loc = 38
>>      found matching node
>>      atom
>>      data = %preset%
>>      new preset
>>      atom
>>      data = 1
>>      preset 1
>>      found preset? 0 found node? 1
>>      data_count = 1 starting @ 307 out of 358
>>      1st_element = 36.842098
>>      atom
>>      data = %node%
>>      new node
>>      atom
>>      data = 2
>>      loc length = 2
>>      atom
>>      data = 27
>>      loc = 27
>>      atom
>>      data = 39
>>      loc = 39
>>      found matching node
>>      atom
>>      data = %preset%
>>      new preset
>>      atom
>>      data = 1
>>      preset 1
>>      found preset? 0 found node? 1
>>      data_count = 1 starting @ 314 out of 358
>>      1st_element = 0.523600
>>      atom
>>      data = %node%
>>      new node
>>      atom
>>      data = 2
>>      loc length = 2
>>      atom
>>      data = 23
>>      loc = 23
>>      atom
>>      data = 25
>>      loc = 25
>>      found matching node
>>      atom
>>      data = %preset%
>>      new preset
>>      atom
>>      data = 1
>>      preset 1
>>      found preset? 0 found node? 1
>>      data_count = 1 starting @ 321 out of 358
>>      1st_element = 250.000000
>>      atom
>>      data = %node%
>>      new node
>>      atom
>>      data = 2
>>      loc length = 2
>>      atom
>>      data = 23
>>      loc = 23
>>      atom
>>      data = 26
>>      loc = 26
>>      found matching node
>>      atom
>>      data = %preset%
>>      new preset
>>      atom
>>      [Thread 3928.0x4658 exited with code 0]
>> [Thread 3928.0x1d74 exited with code 0]
>> [Thread 3928.0x43b8 exited with code 0]
>> [Thread 3928.0x8f8 exited with code 0]
>> [Thread 3928.0x1a00 exited with code 0]
>>
>> Thread 1 received signal SIGSEGV, Segmentation fault.
>> 0x675c01a9 in pd!atom_getsymbol ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> (gdb) back
>> #0  0x675c01a9 in pd!atom_getsymbol ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #1  0x676737f4 in preset_hub_read ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #2  0x675bda4f in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #3  0x675bf37f in pd!outlet_anything ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #4  0x675bd653 in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #5  0x675c7097 in pd!binbuf_eval ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #6  0x675bf2df in pd!outlet_list ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #7  0x67602725 in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #8  0x675bf2df in pd!outlet_list ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #9  0x675be40f in zgetfn () from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #10 0x675bf2df in pd!outlet_list ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #11 0x67608891 in pd!canvasinfo_dir ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #12 0x675bdb6a in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #13 0x675bf37f in pd!outlet_anything ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #14 0x675bd653 in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #15 0x675c7097 in pd!binbuf_eval ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #16 0x6754fe49 in pd!g_graph_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #17 0x675bf003 in pd!outlet_bang ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #18 0x6760335b in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #19 0x676037e7 in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #20 0x675bf003 in pd!outlet_bang ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #21 0x675bf003 in pd!outlet_bang ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #22 0x6760335b in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #23 0x67603777 in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #24 0x675bf12b in pd!outlet_float ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #25 0x675c6e1e in pd!binbuf_eval ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #26 0x675bf2df in pd!outlet_list ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #27 0x67602725 in x_arithmetic_setup ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #28 0x675bf12b in pd!outlet_float ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #29 0x675be233 in zgetfn () from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #30 0x675bf12b in pd!outlet_float ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #31 0x675b0012 in radio_draw_update ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #32 0x675b0b80 in radio_draw_update ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #33 0x675a37e5 in pd!canvas_doclick ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #34 0x675a4f18 in pd!canvas_mousedown ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #35 0x675bdb14 in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #36 0x675bd653 in pd_typedmess ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #37 0x675c7097 in pd!binbuf_eval ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #38 0x675cf7ce in socketreceiver_read ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #39 0x675cedb0 in sys_getblksize ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #40 0x675d140d in sys_pollgui ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #41 0x675cb20b in pd!m_mainloop ()
>>     from C:\Program Files (x86)\Purr Data\bin\pd.dll
>> #42 0x675ce9e8 in sys_main () from C:\Program Files (x86)\Purr
>> Data\bin\pd.dll
>> #43 0x00402730 in ?? ()
>> #44 0x00401386 in ?? ()
>> #45 0x755a6359 in KERNEL32!BaseThreadInitThunk ()
>>     from C:\WINDOWS\System32\kernel32.dll
>> #46 0x776e7b74 in ntdll!RtlGetAppContainerNamedObjectPath ()
>>     from C:\WINDOWS\SYSTEM32\ntdll.dll
>> #47 0x776e7b44 in ntdll!RtlGetAppContainerNamedObjectPath ()
>>     from C:\WINDOWS\SYSTEM32\ntdll.dll
>> #48 0x00000000 in ?? ()
>> (gdb)
>>
>> --
>> Ivica Ico Bukvic, D.M.A.
>> Director, Creativity + Innovation
>> Institute for Creativity, Arts, and Technology
>>
>> Virginia Tech
>> Creative Technologies in Music
>> School of Performing Arts – 0141
>> Blacksburg, VA 24061
>> (540) 231-6139
>> ico at vt.edu
>>
>> www.icat.vt.edu
>> www.performingarts.vt.edu
>> l2ork.icat.vt.edu
>> ico.bukvic.net
>>
> --
> Ivica Ico Bukvic, D.M.A.
> Director, Creativity + Innovation
> Institute for Creativity, Arts, and Technology
>
> Virginia Tech
> Creative Technologies in Music
> School of Performing Arts – 0141
> Blacksburg, VA 24061
> (540) 231-6139
> ico at vt.edu
>
> www.icat.vt.edu
> www.performingarts.vt.edu
> l2ork.icat.vt.edu
> ico.bukvic.net


More information about the L2Ork-dev mailing list