Как отловить и устранить ошибку времени выполнения Fortran 90 в GDB?

Что выдает free -m? Объем вашей оперативной памяти не имеет смысла, если мы не знаем, сколько вы используете. Это, и мне интересно узнать, сколько места подкачки используется.

Я думаю, вы сами ответили на свой вопрос. Открытие «множества вкладок» в вашем браузере может определенно замедлить работу вашей системы, если вы никогда их не закрываете, поскольку они будут продолжать потреблять память в любом случае; когда ваша система зависает, сколько у вас открыто одновременно?

Это также имеет смысл, если ваша система зависает из-за других -ресурсоемких задач, таких как "создание очень большого графа из очень сложной диаграммы UML". Это абсолютно замедлит вашу систему, поскольку она генерирует график, так что это неудивительно.

Похоже, именно так должна вести себя ваша система. Либо так, либо я что-то пропустил здесь.

Между прочим, статистика жесткого диска не имеет значения, когда ваша система перестает отвечать на запросы, так как почти всегда причиной является нехватка памяти.

1
19.08.2021, 18:47
1 ответ

Я понятия не имею, можно ли это сделать с помощью catch, но вы можете попробовать установить разрыв на _gfortran_runtime_error_at, затем определить виновную строку из трассировки (, затем установить там точку останова и т. д.):

$ gdb -q./test.x
Reading symbols from./test.x...done.
(gdb) br _gfortran_runtime_error_at
Breakpoint 1 at 0x1030
(gdb) r
Starting program: /tmp/test.x

Breakpoint 1, 0x00007ffff7d5e670 in _gfortran_runtime_error_at ()
   from /lib/x86_64-linux-gnu/libgfortran.so.5
(gdb) bt
#0  0x00007ffff7d5e670 in _gfortran_runtime_error_at ()
   from /lib/x86_64-linux-gnu/libgfortran.so.5
#1  0x00005555555551fa in MAIN__ () at test.f90:11
(gdb) fram 1
#1  0x00005555555551fa in MAIN__ () at test.f90:11
11        B = A(npt+1)
0
20.08.2021, 10:26

Теги

Похожие вопросы