segfault only when NOT using debugger

前端 未结 5 1795
隐瞒了意图╮
隐瞒了意图╮ 2020-12-04 09:17

I have a multithreaded C program, which consistently generates a segmentation fault at a specific point in the program. When I run it with gdb, no fault is shown. Can you th

5条回答
  •  暖寄归人
    2020-12-04 09:38

    Classic Heisenbug. From Wikipedia:

    Time can also be a factor in heisenbugs. Executing a program under control of a debugger can change the execution timing of the program as compared to normal execution. Time-sensitive bugs such as race conditions may not reproduce when the program is slowed down by single-stepping source lines in the debugger. This is particularly true when the behavior involves interaction with an entity not under the control of a debugger, such as when debugging network packet processing between two machines and only one is under debugger control.

    The debugger may be changing timing, and hiding a race condition.

    On Linux, GDB also disables address space randomization, and your crash may be specific to address space layout. Try (gdb) set disable-randomization off.

    Finally, ulimit -c unlimited and post-mortem debugging (already suggested by Robie) may work.

提交回复
热议问题