Hello, just tried to reproduce this issue. I think this is a case of stack exhaustion.
Thread 1 "gimp" received signal SIGSEGV, Segmentation fault. 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547 547 ../../../../gobject/gclosure.c: Datei oder Verzeichnis nicht gefunden. (gdb) bt #0 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547 #1 0xb7099b67 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800170, invocation_hint=0xbf800114) at ../../../../gobject/gclosure.c:782 #2 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf800170) at ../../../../gobject/gsignal.c:3565 #3 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf8002dc "M5[") at ../../../../gobject/gsignal.c:3391 #4 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #5 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 ... #67352 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #67353 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175 #67354 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223 #67355 0x0059a280 in gimp_tool_compass_update_angle (compass=compass@entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip@entry=0) at gimptoolcompass.c:1172 #67356 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460 #67357 0xb7099cc8 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe7f0, invocation_hint=0xbfffe794) at ../../../../gobject/gclosure.c:804 #67358 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe7f0) at ../../../../gobject/gsignal.c:3565 #67359 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe95c "M5[") at ../../../../gobject/gsignal.c:3391 #67360 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #67361 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #67362 0xb709d79d in g_object_notify_queue_thaw (object=object@entry=0x2cd11a8, nqueue=<optimized out>) at ../../../../gobject/gobject.c:296 #67363 0xb709f3fe in g_object_new_internal (class=class@entry=0x2286560, params=params@entry=0xbfffec5c, n_params=n_params@entry=7) at ../../../../gobject/gobject.c:1856 #67364 0xb70a1010 in g_object_new_valist (object_type=<optimized out>, first_property_name=<optimized out>, var_args=<optimized out>) at ../../../../gobject/gobject.c:2122 #67365 0xb70a10c9 in g_object_new (object_type=40330576, first_property_name=0x8c26e1 "shell") at ../../../../gobject/gobject.c:1642 #67366 0x0059b953 in gimp_tool_compass_new (shell=0x2824060, orientation=GIMP_COMPASS_ORIENTATION_AUTO, n_points=1, x1=896, y1=904, x2=0, y2=0, x3=0, y3=0) at gimptoolcompass.c:1192 #67367 0x0051e88a in gimp_measure_tool_start (coords=0xbfffef38, display=0x22dcf28, measure=0xd3ba60) at gimpmeasuretool.c:454 #67368 gimp_measure_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimpmeasuretool.c:250 #67369 0x0053f2f8 in gimp_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimptool.c:710 #67370 0x004f13a2 in tool_manager_button_press_active (gimp=0xd240a8, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at tool_manager.c:287 #67371 0x0058915a in gimp_display_shell_canvas_tool_events_internal (canvas=canvas@entry=0x280db90, event=event@entry=0x6b38b20, shell=shell@entry=0x2824060, next_event=0xbffff048) at gimpdisplayshell-tool-events.c:776 #67372 0x00589503 in gimp_display_shell_canvas_tool_events (canvas=0x280db90, event=0x6b38b20, shell=0x2824060) at gimpdisplayshell-tool-events.c:307 #67373 0xb7b4c6e7 in _gtk_marshal_BOOLEAN__BOXED (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4, marshal_data=0x0) at ./gtk/gtkmarshalers.c:84 #67374 0xb7099cc8 in g_closure_invoke (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4) at ../../../../gobject/gclosure.c:804 #67375 0xb70acf62 in signal_emit_unlocked_R (node=node@entry=0xeb03e0, detail=detail@entry=0, instance=instance@entry=0x280db90, emission_return=0xbffff2f8, instance_and_params=0xbffff220) at ../../../../gobject/gsignal.c:3635 #67376 0xb70b56c9 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbffff3a0 "\310\363\377\277\220\264", <incomplete sequence \356>) at ../../../../gobject/gsignal.c:3401 #67377 0xb70b6155 in g_signal_emit (instance=0x280db90, signal_id=133, detail=0) at ../../../../gobject/gsignal.c:3447 #67378 0xb7c6e4d4 in gtk_widget_event_internal (widget=widget@entry=0x280db90, event=event@entry=0x6b38b20) at ./gtk/gtkwidget.c:5010 #67379 0xb7c6e779 in IA__gtk_widget_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkwidget.c:4807 #67380 0xb7b4a459 in IA__gtk_propagate_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkmain.c:2503 #67381 0xb7b4a8ad in IA__gtk_main_do_event (event=0x6b38b20) at ./gtk/gtkmain.c:1698 #67382 0xb79bb629 in gdk_event_dispatch (source=0xd02870, callback=0x0, user_data=0x0) at ./gdk/x11/gdkevents-x11.c:2425 #67383 0xb6fa4f30 in g_main_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3177 #67384 g_main_context_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3830 #67385 0xb6fa51a9 in g_main_context_iterate (context=0xd02950, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3903 #67386 0xb6fa5559 in g_main_loop_run (loop=0x26b89f0) at ../../../../glib/gmain.c:4099 #67387 0x0048fc3d in app_run (full_prog_name=0xc74510 "/usr/bin/gimp", filenames=<optimized out>, alternate_system_gimprc=0x0, alternate_gimprc=0x0, session_name=0x0, batch_interpreter=0x0, batch_commands=0x0, as_new=0, no_interface=0, no_data=0, no_fonts=0, no_splash=0, be_verbose=0, use_shm=1, use_cpu_accel=1, console_messages=0, use_debug_handler=0, show_playground=0, show_debug_menu=0, stack_trace_mode=GIMP_STACK_TRACE_NEVER, pdb_compat_mode=GIMP_PDB_COMPAT_ON, backtrace_file=0xc73a70 "/home/benutzer/.config/GIMP/2.10/CrashLog/GIMP-crash-20565434526299610.txt") at app.c:433 #67388 0x0048f429 in main (argc=<optimized out>, argv=<optimized out>) at main.c:524 It looks like we reach some floating point calculation that gets stored, then some widgets get redrawn and the calculation is done again and compared to the stored one. Unfortunately they do never compare as equal. That might be because that floating point comparision is done from registers instead from memory in function gimp_tool_compass_changed (gimptoolcompass.c): 89 struct _GimpToolCompassPrivate 90 { 99 gdouble pixel_angle; 114 }; 1080 gdouble pixel_angle; 1125 pixel_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x, 1126 gimp_vector2_inner_product (&radius1, &radius2)); 1168 if (unit_angle != private->unit_angle) 1169 { 1170 private->unit_angle = unit_angle; 1171 1172 g_object_notify (G_OBJECT (compass), "unit-angle"); 1173 } (gdb) nexti 0x0059a14b 1161 if (pixel_angle != private->pixel_angle) 1: unit_angle = <optimized out> 2: x/i $pc => 0x59a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st 3: private->unit_angle = 2.188940552730084 (gdb) info float R7: Valid 0x40008c179a1db749b5de +2.188940552730083914 R6: Valid 0x40008c179a1db749b800 +2.188940552730084033 =>R5: Valid 0x40008c179a1db749b800 +2.188940552730084033 R4: Empty 0x00000000000000000000 R3: Empty 0x4006b100000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 R0: Empty 0x00000000000000000000 Status Word: 0x2837 IE DE ZE UE PE TOP: 5 Control Word: 0x037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest Tag Word: 0x03ff Instruction Pointer: 0x00:0x00000000 Operand Pointer: 0x00:0x00000000 Opcode: 0x0000 Unfortunately private->unit_angle seems to just store a truncated value into its 8 bytes of storage, but the register is wider - therefore the values get never equal. One workaround could be to force the compiler to compare just an integer representation [1] [2]. But we might need an integer type of the same size - can we rely on being sizeof(gdouble)==8 on all architectures? Therefore could we just use a memcmp? Another workaround could probably be to add to CFLAGS -ffloat-store [3]. Both workarounds are currently not yet tested. Kind regards, Bernhard [1] https://floating-point-gui.de/errors/comparison/ (last paragraph) [2] http://www.cygnus-software.com/papers/comparingfloats/comparing_floating_point_numbers_obsolete.htm [3] https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
apt install xserver-xorg sddm openbox xterm mc devscripts dpkg-dev systemd-coredump gdb gimp gimp-dbgsym libglib2.0-0-dbgsym apt build-dep gimp systemctl start sddm mkdir gimp/orig -p cd gimp/orig apt source gimp cd ../.. export DISPLAY=:0 benutzer@debian:~$ gdb -q --args gimp Reading symbols from gimp...(no debugging symbols found)...done. (gdb) set height 0 (gdb) set width 0 (gdb) set pagination off (gdb) run Starting program: /usr/bin/gimp [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1". Missing fast-path babl conversion detected, Implementing missing babl fast paths accelerates GEGL, GIMP and other software using babl, warnings are printed on first occurance of formats used where a conversion has to be synthesized programmatically by babl based on format description *WARNING* missing babl fast path(s): "Y u16" to "Y' u8" [New Thread 0xb5424b40 (LWP 11501)] Kindprozess »dbus-launch« konnte nicht ausgeführt werden (Datei oder Verzeichnis nicht gefunden) *WARNING* missing babl fast path(s): "R'G'B' double" to "CIE Lab double" [New Thread 0xae2b3b40 (LWP 11503)] [New Thread 0xadab2b40 (LWP 11504)] [New Thread 0xad2b1b40 (LWP 11505)] [New Thread 0xacab0b40 (LWP 11506)] [New Thread 0xac2afb40 (LWP 11507)] [New Thread 0xab8ffb40 (LWP 11508)] [New Thread 0xab0feb40 (LWP 11509)] [New Thread 0xaa8fdb40 (LWP 11510)] (gimp:11497): Gtk-WARNING **: 09:52:06.483: Im Modulpfad »pixmap« konnte keine Themen-Engine gefunden werden, ... (gimp:11497): Gtk-WARNING **: 09:52:06.487: Im Modulpfad »pixmap« konnte keine Themen-Engine gefunden werden, [New Thread 0xa889ab40 (LWP 11512)] [Thread 0xa889ab40 (LWP 11512) exited] gimp_device_info_set_device: trying to set GdkDevice 'VirtualPS/2 VMware VMMouse' on GimpDeviceInfo which already has a device *WARNING* missing babl fast path(s): "cairo-ARGB32" to "R'G'B'A u8" [New Thread 0xa889ab40 (LWP 11521)] [New Thread 0xa7c99b40 (LWP 11522)] [Thread 0xa889ab40 (LWP 11521) exited] [New Thread 0xa889ab40 (LWP 11523)] Thread 1 "gimp" received signal SIGSEGV, Segmentation fault. 0xb7099247 in g_closure_ref () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (gdb) bt ... #59849 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59850 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59851 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59852 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59853 0x005b3579 in gimp_tool_widget_changed () #59854 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59855 0x0059a280 in ?? () #59856 0x0059afaf in ?? () #59857 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59858 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59859 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59860 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59861 0x005b3579 in gimp_tool_widget_changed () #59862 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59863 0x0059a280 in ?? () #59864 0x0059afaf in ?? () #59865 0xb7099be7 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59866 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59867 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59868 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59869 0x005b3579 in gimp_tool_widget_changed () #59870 0xb70a03c7 in g_object_notify () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59871 0x0059a280 in ?? () #59872 0x0059afaf in ?? () #59873 0xb7099cc8 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59874 0xb70ad04d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59875 0xb70b59a3 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59876 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59877 0x005b3579 in gimp_tool_widget_changed () #59878 0xb709d79d in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59879 0xb709f3fe in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59880 0xb70a1010 in g_object_new_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59881 0xb70a10c9 in g_object_new () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59882 0x0059b953 in gimp_tool_compass_new () #59883 0x0051e88a in ?? () #59884 0x0053f2f8 in gimp_tool_button_press () #59885 0x004f13a2 in tool_manager_button_press_active () #59886 0x0058915a in ?? () #59887 0x00589503 in gimp_display_shell_canvas_tool_events () #59888 0xb7b4c6e7 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #59889 0xb7099cc8 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59890 0xb70acf62 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59891 0xb70b56c9 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59892 0xb70b6155 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #59893 0xb7c6e4d4 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #59894 0xb7b4a459 in gtk_propagate_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #59895 0xb7b4a8ad in gtk_main_do_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #59896 0xb79bb629 in ?? () from /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 #59897 0xb6fa4f30 in g_main_context_dispatch () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0 #59898 0xb6fa51a9 in ?? () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0 #59899 0xb6fa5559 in g_main_loop_run () from /usr/lib/i386-linux-gnu/libglib-2.0.so.0 #59900 0x0048fc3d in app_run () #59901 0x0048f429 in main () With debug symbols: Thread 1 "gimp" received signal SIGSEGV, Segmentation fault. 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547 547 ../../../../gobject/gclosure.c: Datei oder Verzeichnis nicht gefunden. (gdb) bt #0 0xb7099247 in g_closure_ref (closure=0x259ffe0) at ../../../../gobject/gclosure.c:547 #1 0xb7099b67 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800170, invocation_hint=0xbf800114) at ../../../../gobject/gclosure.c:782 #2 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf800170) at ../../../../gobject/gsignal.c:3565 #3 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf8002dc "M5[") at ../../../../gobject/gsignal.c:3391 #4 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #5 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #6 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175 #7 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223 #8 0x0059a280 in gimp_tool_compass_update_angle (compass=compass@entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip@entry=0) at gimptoolcompass.c:1172 #9 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460 #10 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf8005d0, invocation_hint=0xbf800574) at ../../../../gobject/gclosure.c:804 #11 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbf8005d0) at ../../../../gobject/gsignal.c:3565 #12 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbf80073c "M5[") at ../../../../gobject/gsignal.c:3391 #13 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #14 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #15 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175 #16 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223 #17 0x0059a280 in gimp_tool_compass_update_angle (compass=compass@entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip@entry=0) at gimptoolcompass.c:1172 #18 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460 #19 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbf800a30, invocation_hint=0xbf8009d4) at ../../../../gobject/gclosure.c:804 ... #67339 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffdf30, invocation_hint=0xbfffded4) at ../../../../gobject/gclosure.c:804 #67340 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffdf30) at ../../../../gobject/gsignal.c:3565 #67341 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe09c "M5[") at ../../../../gobject/gsignal.c:3391 #67342 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #67343 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #67344 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175 #67345 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223 #67346 0x0059a280 in gimp_tool_compass_update_angle (compass=compass@entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip@entry=0) at gimptoolcompass.c:1172 #67347 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460 #67348 0xb7099be7 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe390, invocation_hint=0xbfffe334) at ../../../../gobject/gclosure.c:804 #67349 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe390) at ../../../../gobject/gsignal.c:3565 #67350 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe4fc "M5[") at ../../../../gobject/gsignal.c:3391 #67351 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #67352 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #67353 0xb70a03c7 in g_object_notify_by_spec_internal (pspec=0x2cc5a68, object=0x2cd11a8) at ../../../../gobject/gobject.c:1175 #67354 g_object_notify (object=0x2cd11a8, property_name=0x8b565d "unit-angle") at ../../../../gobject/gobject.c:1223 #67355 0x0059a280 in gimp_tool_compass_update_angle (compass=compass@entry=0x2cd11a8, orientation=GIMP_COMPASS_ORIENTATION_AUTO, flip=flip@entry=0) at gimptoolcompass.c:1172 #67356 0x0059afaf in gimp_tool_compass_changed (widget=0x2cd11a8) at gimptoolcompass.c:460 #67357 0xb7099cc8 in g_closure_invoke (closure=0x259ffe0, return_value=0x0, n_param_values=1, param_values=0xbfffe7f0, invocation_hint=0xbfffe794) at ../../../../gobject/gclosure.c:804 #67358 0xb70ad04d in signal_emit_unlocked_R (node=node@entry=0x2452f30, detail=detail@entry=0, instance=instance@entry=0x2cd11a8, emission_return=0x0, instance_and_params=0xbfffe7f0) at ../../../../gobject/gsignal.c:3565 #67359 0xb70b59a3 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbfffe95c "M5[") at ../../../../gobject/gsignal.c:3391 #67360 0xb70b6155 in g_signal_emit (instance=0x2cd11a8, signal_id=567, detail=0) at ../../../../gobject/gsignal.c:3447 #67361 0x005b3579 in gimp_tool_widget_changed (widget=0x2cd11a8) at gimptoolwidget.c:372 #67362 0xb709d79d in g_object_notify_queue_thaw (object=object@entry=0x2cd11a8, nqueue=<optimized out>) at ../../../../gobject/gobject.c:296 #67363 0xb709f3fe in g_object_new_internal (class=class@entry=0x2286560, params=params@entry=0xbfffec5c, n_params=n_params@entry=7) at ../../../../gobject/gobject.c:1856 #67364 0xb70a1010 in g_object_new_valist (object_type=<optimized out>, first_property_name=<optimized out>, var_args=<optimized out>) at ../../../../gobject/gobject.c:2122 #67365 0xb70a10c9 in g_object_new (object_type=40330576, first_property_name=0x8c26e1 "shell") at ../../../../gobject/gobject.c:1642 #67366 0x0059b953 in gimp_tool_compass_new (shell=0x2824060, orientation=GIMP_COMPASS_ORIENTATION_AUTO, n_points=1, x1=896, y1=904, x2=0, y2=0, x3=0, y3=0) at gimptoolcompass.c:1192 #67367 0x0051e88a in gimp_measure_tool_start (coords=0xbfffef38, display=0x22dcf28, measure=0xd3ba60) at gimpmeasuretool.c:454 #67368 gimp_measure_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimpmeasuretool.c:250 #67369 0x0053f2f8 in gimp_tool_button_press (tool=0xd3ba60, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at gimptool.c:710 #67370 0x004f13a2 in tool_manager_button_press_active (gimp=0xd240a8, coords=0xbfffef38, time=836017, state=GDK_BUTTON1_MASK, press_type=GIMP_BUTTON_PRESS_NORMAL, display=0x22dcf28) at tool_manager.c:287 #67371 0x0058915a in gimp_display_shell_canvas_tool_events_internal (canvas=canvas@entry=0x280db90, event=event@entry=0x6b38b20, shell=shell@entry=0x2824060, next_event=0xbffff048) at gimpdisplayshell-tool-events.c:776 #67372 0x00589503 in gimp_display_shell_canvas_tool_events (canvas=0x280db90, event=0x6b38b20, shell=0x2824060) at gimpdisplayshell-tool-events.c:307 #67373 0xb7b4c6e7 in _gtk_marshal_BOOLEAN__BOXED (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4, marshal_data=0x0) at ./gtk/gtkmarshalers.c:84 #67374 0xb7099cc8 in g_closure_invoke (closure=0x282c1e0, return_value=0xbffff1d8, n_param_values=2, param_values=0xbffff220, invocation_hint=0xbffff1c4) at ../../../../gobject/gclosure.c:804 #67375 0xb70acf62 in signal_emit_unlocked_R (node=node@entry=0xeb03e0, detail=detail@entry=0, instance=instance@entry=0x280db90, emission_return=0xbffff2f8, instance_and_params=0xbffff220) at ../../../../gobject/gsignal.c:3635 #67376 0xb70b56c9 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=0xbffff3a0 "\310\363\377\277\220\264", <incomplete sequence \356>) at ../../../../gobject/gsignal.c:3401 #67377 0xb70b6155 in g_signal_emit (instance=0x280db90, signal_id=133, detail=0) at ../../../../gobject/gsignal.c:3447 #67378 0xb7c6e4d4 in gtk_widget_event_internal (widget=widget@entry=0x280db90, event=event@entry=0x6b38b20) at ./gtk/gtkwidget.c:5010 #67379 0xb7c6e779 in IA__gtk_widget_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkwidget.c:4807 #67380 0xb7b4a459 in IA__gtk_propagate_event (widget=0x280db90, event=0x6b38b20) at ./gtk/gtkmain.c:2503 #67381 0xb7b4a8ad in IA__gtk_main_do_event (event=0x6b38b20) at ./gtk/gtkmain.c:1698 #67382 0xb79bb629 in gdk_event_dispatch (source=0xd02870, callback=0x0, user_data=0x0) at ./gdk/x11/gdkevents-x11.c:2425 #67383 0xb6fa4f30 in g_main_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3177 #67384 g_main_context_dispatch (context=0xd02950) at ../../../../glib/gmain.c:3830 #67385 0xb6fa51a9 in g_main_context_iterate (context=0xd02950, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3903 #67386 0xb6fa5559 in g_main_loop_run (loop=0x26b89f0) at ../../../../glib/gmain.c:4099 #67387 0x0048fc3d in app_run (full_prog_name=0xc74510 "/usr/bin/gimp", filenames=<optimized out>, alternate_system_gimprc=0x0, alternate_gimprc=0x0, session_name=0x0, batch_interpreter=0x0, batch_commands=0x0, as_new=0, no_interface=0, no_data=0, no_fonts=0, no_splash=0, be_verbose=0, use_shm=1, use_cpu_accel=1, console_messages=0, use_debug_handler=0, show_playground=0, show_debug_menu=0, stack_trace_mode=GIMP_STACK_TRACE_NEVER, pdb_compat_mode=GIMP_PDB_COMPAT_ON, backtrace_file=0xc73a70 "/home/benutzer/.config/GIMP/2.10/CrashLog/GIMP-crash-20565434526299610.txt") at app.c:433 #67388 0x0048f429 in main (argc=<optimized out>, argv=<optimized out>) at main.c:524 (gdb) list gimp_tool_widget_changed 367 void 368 gimp_tool_widget_changed (GimpToolWidget *widget) 369 { 370 g_return_if_fail (GIMP_IS_TOOL_WIDGET (widget)); 371 372 g_signal_emit (widget, widget_signals[CHANGED], 0); 373 } (gdb) list gimp_tool_compass_changed 447 static void 448 gimp_tool_compass_changed (GimpToolWidget *widget) 449 { 450 GimpToolCompass *compass = GIMP_TOOL_COMPASS (widget); 451 GimpToolCompassPrivate *private = compass->private; 452 GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget); 453 gdouble angle1; 454 gdouble angle2; 455 gint draw_arc = 0; 456 gboolean draw_arc_line = FALSE; 457 gdouble arc_line_display_length; 458 gdouble arc_line_length; 459 460 gimp_tool_compass_update_angle (compass, private->orientation, FALSE); <<<<<<<<<<<<<<< 461 462 angle1 = -atan2 (private->radius1.y * shell->scale_y, 463 private->radius1.x * shell->scale_x); 464 angle2 = -private->display_angle; 465 466 gimp_canvas_line_set (private->line1, 467 private->x[0], 468 private->y[0], 469 private->x[1], 470 private->y[1]); 471 gimp_canvas_item_set_visible (private->line1, private->n_points > 1); 472 if (private->n_points > 1 && 473 gimp_canvas_item_transform_distance (private->line1, 474 private->x[0], 475 private->y[0], 476 private->x[1], 477 private->y[1]) > ARC_RADIUS) 478 { 479 draw_arc++; 480 } 481 482 483 arc_line_display_length = ARC_RADIUS + 484 (GIMP_CANVAS_HANDLE_SIZE_CROSS >> 1) + 485 ARC_GAP; 486 arc_line_length = arc_line_display_length / 487 hypot (private->radius2.x * shell->scale_x, 488 private->radius2.y * shell->scale_y); 489 490 if (private->n_points > 2) 491 { 492 gdouble length = gimp_canvas_item_transform_distance (private->line2, 493 private->x[0], 494 private->y[0], 495 private->x[2], 496 private->y[2]); 497 498 if (length > ARC_RADIUS) 499 { 500 draw_arc++; 501 draw_arc_line = TRUE; 502 503 if (length > arc_line_display_length) 504 { 505 gimp_canvas_line_set ( 506 private->line2, 507 private->x[0] + private->radius2.x * arc_line_length, 508 private->y[0] + private->radius2.y * arc_line_length, 509 private->x[2], 510 private->y[2]); 511 gimp_canvas_item_set_visible (private->line2, TRUE); 512 } 513 else 514 { 515 gimp_canvas_item_set_visible (private->line2, FALSE); 516 } 517 } 518 else 519 { 520 gimp_canvas_line_set (private->line2, 521 private->x[0], 522 private->y[0], 523 private->x[2], 524 private->y[2]); 525 gimp_canvas_item_set_visible (private->line2, TRUE); 526 } 527 } 528 else 529 { 530 gimp_canvas_item_set_visible (private->line2, FALSE); 531 } 532 533 gimp_canvas_handle_set_position (private->arc, 534 private->x[0], private->y[0]); 535 gimp_canvas_handle_set_angles (private->arc, angle1, angle2); 536 gimp_canvas_item_set_visible (private->arc, 537 private->n_points > 1 && 538 draw_arc == private->n_points - 1 && 539 fabs (angle2) > EPSILON); 540 541 arc_line_length = (ARC_RADIUS + (GIMP_CANVAS_HANDLE_SIZE_CROSS >> 1)) / 542 hypot (private->radius2.x * shell->scale_x, 543 private->radius2.y * shell->scale_y); 544 545 gimp_canvas_line_set (private->arc_line, 546 private->x[0], 547 private->y[0], 548 private->x[0] + private->radius2.x * arc_line_length, 549 private->y[0] + private->radius2.y * arc_line_length); 550 gimp_canvas_item_set_visible (private->arc_line, 551 (private->n_points == 2 || draw_arc_line) && 552 fabs (angle2) > EPSILON); 553 554 gimp_canvas_handle_set_position (private->handles[0], 555 private->x[0], private->y[0]); 556 gimp_canvas_item_set_visible (private->handles[0], 557 private->n_points > 0); 558 559 gimp_canvas_handle_set_position (private->handles[1], 560 private->x[1], private->y[1]); 561 gimp_canvas_item_set_visible (private->handles[1], 562 private->n_points > 1); 563 564 gimp_canvas_handle_set_position (private->handles[2], 565 private->x[2], private->y[2]); 566 gimp_canvas_item_set_visible (private->handles[2], 567 private->n_points > 2); 568 569 gimp_tool_compass_update_hilight (compass); 570 } (gdb) list gimp_tool_compass_update_angle 1069 static void 1070 gimp_tool_compass_update_angle (GimpToolCompass *compass, 1071 GimpCompassOrientation orientation, 1072 gboolean flip) 1073 { 1074 GimpToolWidget *widget = GIMP_TOOL_WIDGET (compass); 1075 GimpToolCompassPrivate *private = compass->private; 1076 GimpDisplayShell *shell = gimp_tool_widget_get_shell (widget); 1077 GimpImage *image = gimp_display_get_image (shell->display); 1078 GimpVector2 radius1; 1079 GimpVector2 radius2; 1080 gdouble pixel_angle; 1081 gdouble unit_angle; 1082 gdouble xres; 1083 gdouble yres; 1084 1085 gimp_image_get_resolution (image, &xres, &yres); 1086 1087 private->radius1.x = private->x[1] - private->x[0]; 1088 private->radius1.y = private->y[1] - private->y[0]; 1089 1090 if (private->n_points == 3) 1091 { 1092 private->radius2.x = private->x[2] - private->x[0]; 1093 private->radius2.y = private->y[2] - private->y[0]; 1094 } 1095 else 1096 { 1097 gdouble angle = -shell->rotate_angle * G_PI / 180.0; 1098 1099 if (orientation == GIMP_COMPASS_ORIENTATION_VERTICAL) 1100 angle -= G_PI / 2.0; 1101 1102 if (flip) 1103 angle += G_PI; 1104 1105 if (shell->flip_horizontally) 1106 angle = G_PI - angle; 1107 if (shell->flip_vertically) 1108 angle = -angle; 1109 1110 private->radius2.x = cos (angle); 1111 private->radius2.y = sin (angle); 1112 1113 if (! shell->dot_for_dot) 1114 { 1115 private->radius2.x *= xres; 1116 private->radius2.y *= yres; 1117 1118 gimp_vector2_normalize (&private->radius2); 1119 } 1120 } 1121 1122 radius1 = private->radius1; 1123 radius2 = private->radius2; 1124 1125 pixel_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x, 1126 gimp_vector2_inner_product (&radius1, &radius2)); 1127 1128 radius1.x /= xres; 1129 radius1.y /= yres; 1130 1131 radius2.x /= xres; 1132 radius2.y /= yres; 1133 1134 unit_angle = atan2 (gimp_vector2_cross_product (&radius1, &radius2).x, 1135 gimp_vector2_inner_product (&radius1, &radius2)); 1136 1137 if (shell->dot_for_dot) 1138 private->display_angle = pixel_angle; 1139 else 1140 private->display_angle = unit_angle; 1141 1142 if (private->n_points == 2) 1143 { 1144 if (! flip && fabs (private->display_angle) > G_PI / 2.0 + EPSILON) 1145 { 1146 gimp_tool_compass_update_angle (compass, orientation, TRUE); 1147 1148 return; 1149 } 1150 else if (orientation == GIMP_COMPASS_ORIENTATION_AUTO && 1151 fabs (private->display_angle) > G_PI / 4.0 + EPSILON) 1152 { 1153 gimp_tool_compass_update_angle (compass, 1154 GIMP_COMPASS_ORIENTATION_VERTICAL, 1155 FALSE); 1156 1157 return; 1158 } 1159 } 1160 1161 if (pixel_angle != private->pixel_angle) 1162 { 1163 private->pixel_angle = pixel_angle; 1164 1165 g_object_notify (G_OBJECT (compass), "pixel-angle"); 1166 } 1167 1168 if (unit_angle != private->unit_angle) 1169 { 1170 private->unit_angle = unit_angle; 1171 1172 g_object_notify (G_OBJECT (compass), "unit-angle"); <<<<<<<<<<<<<<< 1173 } 1174 } (gdb) print unit_angle $1 = <optimized out> (gdb) print private->unit_angle $2 = 2.3517500750113856 (gdb) print private $3 = (GimpToolCompassPrivate *) 0x22838e0 (gdb) disassemble 0x59a0ff,0x59a0ff+0x60 Dump of assembler code from 0x59a0ff to 0x59a15f: 0x0059a0ff <gimp_tool_compass_update_angle+511>: pop %ecx 0x0059a100 <gimp_tool_compass_update_angle+512>: fldl 0x20(%esp) 0x0059a104 <gimp_tool_compass_update_angle+516>: fstpl (%esp) 0x0059a107 <gimp_tool_compass_update_angle+519>: pushl 0x94(%esp) 0x0059a10e <gimp_tool_compass_update_angle+526>: pushl 0x94(%esp) => 0x0059a115 <gimp_tool_compass_update_angle+533>: call 0x487650 <atan2@plt> 0x0059a11a <gimp_tool_compass_update_angle+538>: add $0x10,%esp 0x0059a11d <gimp_tool_compass_update_angle+541>: mov 0xa8(%edi),%esi 0x0059a123 <gimp_tool_compass_update_angle+547>: fld %st(0) 0x0059a125 <gimp_tool_compass_update_angle+549>: fldl 0x20(%esp) 0x0059a129 <gimp_tool_compass_update_angle+553>: fxch %st(1) 0x0059a12b <gimp_tool_compass_update_angle+555>: test %esi,%esi 0x0059a12d <gimp_tool_compass_update_angle+557>: fcmovne %st(1),%st 0x0059a12f <gimp_tool_compass_update_angle+559>: cmpl $0x2,0x4(%ebp) 0x0059a133 <gimp_tool_compass_update_angle+563>: fstl 0x40(%ebp) 0x0059a136 <gimp_tool_compass_update_angle+566>: je 0x59a1d8 <gimp_tool_compass_update_angle+728> 0x0059a13c <gimp_tool_compass_update_angle+572>: fstp %st(0) 0x0059a13e <gimp_tool_compass_update_angle+574>: jmp 0x59a148 <gimp_tool_compass_update_angle+584> 0x0059a140 <gimp_tool_compass_update_angle+576>: fstp %st(0) 0x0059a142 <gimp_tool_compass_update_angle+578>: lea 0x0(%esi),%esi 0x0059a148 <gimp_tool_compass_update_angle+584>: fldl 0x48(%ebp) 0x0059a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st 0x0059a14d <gimp_tool_compass_update_angle+589>: jp 0x59a288 <gimp_tool_compass_update_angle+904> 0x0059a153 <gimp_tool_compass_update_angle+595>: jne 0x59a290 <gimp_tool_compass_update_angle+912> 0x0059a159 <gimp_tool_compass_update_angle+601>: fstp %st(0) 0x0059a15b <gimp_tool_compass_update_angle+603>: fldl 0x50(%ebp) 0x0059a15e <gimp_tool_compass_update_angle+606>: fucomip %st(1),%st End of assembler dump. (gdb) nexti 0x0059a14b 1161 if (pixel_angle != private->pixel_angle) 1: unit_angle = <optimized out> 2: x/i $pc => 0x59a14b <gimp_tool_compass_update_angle+587>: fucomip %st(1),%st 3: private->unit_angle = 2.188940552730084 (gdb) info float R7: Valid 0x40008c179a1db749b5de +2.188940552730083914 R6: Valid 0x40008c179a1db749b800 +2.188940552730084033 =>R5: Valid 0x40008c179a1db749b800 +2.188940552730084033 R4: Empty 0x00000000000000000000 R3: Empty 0x4006b100000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 R0: Empty 0x00000000000000000000 Status Word: 0x2837 IE DE ZE UE PE TOP: 5 Control Word: 0x037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest Tag Word: 0x03ff Instruction Pointer: 0x00:0x00000000 Operand Pointer: 0x00:0x00000000 Opcode: 0x0000 (gdb) nexti 0x0059a14d 1161 if (pixel_angle != private->pixel_angle) 1: unit_angle = <optimized out> 2: x/i $pc => 0x59a14d <gimp_tool_compass_update_angle+589>: jp 0x59a288 <gimp_tool_compass_update_angle+904> 3: private->unit_angle = 2.188940552730084 (gdb) info float R7: Valid 0x40008c179a1db749b5de +2.188940552730083914 =>R6: Valid 0x40008c179a1db749b800 +2.188940552730084033 R5: Empty 0x40008c179a1db749b800 R4: Empty 0x00000000000000000000 R3: Empty 0x4006b100000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 R0: Empty 0x00000000000000000000 Status Word: 0x3037 IE DE ZE UE PE TOP: 6 Control Word: 0x037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest Tag Word: 0x0fff Instruction Pointer: 0x00:0x00000000 Operand Pointer: 0x00:0x00000000 Opcode: 0x0000 (gdb) info reg eax 0x0 0 ecx 0xb6f5a000 -1225416704 edx 0x0 0 ebx 0xc55ee0 12934880 esp 0xbfffdc70 0xbfffdc70 ebp 0x22838e0 0x22838e0 esi 0x1 1 edi 0x28380e0 42172640 eip 0x59a14d 0x59a14d <gimp_tool_compass_update_angle+589> eflags 0x200242 [ ZF IF ID ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 (gdb) list 89 89 struct _GimpToolCompassPrivate 90 { 99 gdouble pixel_angle; 114 }; 1080 gdouble pixel_angle; https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html -ffloat-store Do not store floating-point variables in registers, and inhibit other options that might change whether a floating-point value is taken from a register or memory. This option prevents undesirable excess precision on machines such as the 68000 where the floating registers (of the 68881) keep more precision than a double is supposed to have. Similarly for the x86 architecture. For most programs, the excess precision does only good, but a few programs rely on the precise definition of IEEE floating point. Use -ffloat-store for such programs, after modifying them to store all pertinent intermediate computations into variables. gdb -q --args gimp set height 0 set width 0 set pagination off directory /home/benutzer/gimp/orig/gimp-2.10.6/app/display run