360_debugging_tools.doxy 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /* StarPU --- Runtime system for heterogeneous multicore architectures.
  2. *
  3. * Copyright (C) 2010-2017 CNRS
  4. * Copyright (C) 2009-2011,2014,2016 Université de Bordeaux
  5. * Copyright (C) 2011-2012 Inria
  6. *
  7. * StarPU is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU Lesser General Public License as published by
  9. * the Free Software Foundation; either version 2.1 of the License, or (at
  10. * your option) any later version.
  11. *
  12. * StarPU is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. *
  16. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  17. */
  18. /*! \page DebuggingTools Debugging Tools
  19. StarPU provides several tools to help debugging applications. Execution traces
  20. can be generated and displayed graphically, see \ref GeneratingTracesWithFxT.
  21. \section DebuggingInGeneral TroubleShooting In General
  22. Generally-speaking, if you have troubles, pass \ref enable-debug "--enable-debug" to
  23. <c>./configure</c> to enable some checks which impact performance, but will
  24. catch common issues, possibly earlier than the actual problem you are observing,
  25. which may just be a consequence of a bug that happened earlier. Also, make sure
  26. not to have the \ref enable-fast "--enable-fast" option which drops very useful
  27. catchup assertions. If your program is valgrind-safe, you can use it, see \ref
  28. UsingOtherDebugger.
  29. Depending on your toolchain, it might happen that you get
  30. <c>undefined reference to `__stack_chk_guard'</c> errors. In that case, use the
  31. <c>--disable-fstack-protector-all</c> option to avoid the issue.
  32. Then, if your program crashes with an assertion error, a segfault, etc. you can send us the result of
  33. \verbatim
  34. thread apply all bt
  35. \endverbatim
  36. run in <c>gdb</c> at the point of the crash.
  37. In case your program just hangs, but it may also be useful in case of a crash
  38. too, it helps to source <c>gdbinit</c> as described in the next section to be
  39. able to run and send us the output of the following commands:
  40. \verbatim
  41. starpu-workers
  42. starpu-tasks
  43. starpu-print-requests
  44. starpu-print-prequests
  45. starpu-print-frrequests
  46. starpu-print-irrequests
  47. \endverbatim
  48. To give us an idea of what is happening within StarPU. If the outputs are not too long, you can even run
  49. \verbatim
  50. starpu-all-tasks
  51. starpu-print-all-tasks
  52. starpu-print-datas-summary
  53. starpu-print-datas
  54. \endverbatim
  55. \section UsingGdb Using The Gdb Debugger
  56. Some <c>gdb</c> helpers are provided to show the whole StarPU state:
  57. \verbatim
  58. (gdb) source tools/gdbinit
  59. (gdb) help starpu
  60. \endverbatim
  61. For instance,
  62. <ul>
  63. <li> one can print all tasks with <c>starpu-print-all-tasks</c>, </li>
  64. <li> print all datas with <c>starpu-print-datas</c>, </li>
  65. <li> print all pending data transfers with <c>starpu-print-prequests</c>, <c>starpu-print-requests</c>, <c>starpu-print-frequests</c>, <c>starpu-print-irequests</c>,</li>
  66. <li> print pending MPI requests with <c>starpu-mpi-print-detached-requests</c></li>
  67. </ul>
  68. Some functions can only work if \ref enable-debug "--enable-debug"
  69. was passed to <c>./configure</c>
  70. (because they impact performance)
  71. \section UsingOtherDebugger Using Other Debugging Tools
  72. Valgrind can be used on StarPU: valgrind.h just needs to be found at <c>./configure</c>
  73. time, to tell valgrind about some known false positives and disable host memory
  74. pinning. Other known false positives can be suppressed by giving the suppression
  75. files in <c>tools/valgrind/*.suppr</c> to valgrind's <c>--suppressions</c> option.
  76. The environment variable \ref STARPU_DISABLE_KERNELS can also be set to <c>1</c> to make
  77. StarPU does everything (schedule tasks, transfer memory, etc.) except actually
  78. calling the application-provided kernel functions, i.e. the computation will not
  79. happen. This permits to quickly check that the task scheme is working properly.
  80. \section UsingTheTemanejoTaskDebugger Using The Temanejo Task Debugger
  81. StarPU can connect to Temanejo >= 1.0rc2 (see
  82. http://www.hlrs.de/temanejo), to permit
  83. nice visual task debugging. To do so, build Temanejo's <c>libayudame.so</c>,
  84. install <c>Ayudame.h</c> to e.g. <c>/usr/local/include</c>, apply the
  85. <c>tools/patch-ayudame</c> to it to fix C build, re-<c>./configure</c>, make
  86. sure that it found it, rebuild StarPU. Run the Temanejo GUI, give it the path
  87. to your application, any options you want to pass it, the path to <c>libayudame.so</c>.
  88. It permits to visualize the task graph, add breakpoints, continue execution
  89. task-by-task, and run <c>gdb</c> on a given task, etc.
  90. \image html temanejo.png
  91. \image latex temanejo.png "" width=\textwidth
  92. Make sure to specify at least the same number of CPUs in the dialog box as your
  93. machine has, otherwise an error will happen during execution. Future versions
  94. of Temanejo should be able to tell StarPU the number of CPUs to use.
  95. Tag numbers have to be below <c>4000000000000000000ULL</c> to be usable for
  96. Temanejo (so as to distinguish them from tasks).
  97. */