ForDebug: A Fortran library designed for debugging Fortran code, especially within pure procedures.
If you want to use ForDebug
as a dependency in your own fpm project,
you can easily include it by adding the following line to your fpm.toml
file:
[dependencies]
fordebug = {git="https://github.com/gha3mi/fordebug.git"}
use fordebug, only: debug
type(debug) :: err
call err%set(&
severity = 1, &
code = 100, &
category = "math", &
message = "division by zero", &
location = my_module.f90:11, &
suggestion = "Check denominator for zero." )
call err%print()
call err%reset()
- Define
FOR_DEBUG
preprocessor directive to enable error/warning/info control.
To enable printing or writing within a pure procedure in Fortran, use the fordebug module.
use fordebug, only: pwrite
! within pure procedures
call pwrite(message='hello!')
call pwrite(R0i32=n)
call pwrite(message='x = ', R0r32=10.0, format='(a,f7.3)', file='example/demo.txt', access='append')
- All arguments of
pwrite
are optional. - Data types are represented using the following conventions:
R0i32
,R0i64
,R0r32
,R0r64
,R0c32
,R0c64
for Rank 0 integer, real, and complex types.R1i32
,R1i64
,R1r32
,R1r64
,R1c32
,R1c64
for Rank 1 integer, real, and complex types.R2i32
,R2i64
,R2r32
,R2r64
,R2c32
,R2c64
for Rank 2 integer, real, and complex types.R0ch
for Rank 0 character.
ForDebug uses ForTmie as dependency. For measuring elapsed time within a pure procedure, utilize the fordebug module with time derived type.
use fordebug, only: timer, ptimer_start, ptimer_stop
type(timer) :: t
call ptimer_start(t)
! Perform your operations here
call ptimer_stop(t) ! Output: Elapsed time: 0.000 [s]
Clone the repository:
Clone the ForDebug
repository from GitHub using the following command:
git clone https://github.com/gha3mi/fordebug.git
Navigate to the cloned directory:
cd fordebug
To run all examples, execute the following command:
fpm run --example --all --flag "-DFOR_DEBUG"
Compiler | macos | ubuntu | windows |
---|---|---|---|
flang-new |
- | fpm ❌ cmake ✅ | fpm ❌ cmake ❌ |
gfortran |
fpm ✅ cmake ✅ | fpm ✅ cmake ✅ | fpm ✅ cmake ✅ |
ifx |
- | fpm ✅ cmake ✅ | fpm ✅ cmake ❌ |
lfortran |
fpm ❌ cmake ❌ | fpm ❌ cmake ❌ | fpm ❌ cmake ❌ |
nvfortran |
- | fpm ✅ cmake ✅ | - |
The most up-to-date API documentation for the master branch is available
here.
To generate the API documentation for ForDebug
using
ford run the following
command:
ford README.yml
Contributions to ForDebug
are welcome!
If you find any issues or would like to suggest improvements, please open an issue.