{"id":32156959,"url":"https://github.com/juliadebug/debugger.jl","last_synced_at":"2026-02-19T07:02:05.857Z","repository":{"id":43040254,"uuid":"169093524","full_name":"JuliaDebug/Debugger.jl","owner":"JuliaDebug","description":"Julia debugger","archived":false,"fork":false,"pushed_at":"2025-11-26T17:42:31.000Z","size":410,"stargazers_count":501,"open_issues_count":57,"forks_count":47,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-11-29T14:35:11.562Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaDebug.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-02-04T14:47:53.000Z","updated_at":"2025-11-26T17:42:26.000Z","dependencies_parsed_at":"2024-01-06T12:03:07.720Z","dependency_job_id":"dcb9db7f-661d-4fa5-bca3-e56f749a4597","html_url":"https://github.com/JuliaDebug/Debugger.jl","commit_stats":{"total_commits":225,"total_committers":23,"mean_commits":9.782608695652174,"dds":0.5955555555555556,"last_synced_commit":"86a11701a17343ba3b0446e6f2053cdc33bb7e19"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/JuliaDebug/Debugger.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaDebug%2FDebugger.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaDebug%2FDebugger.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaDebug%2FDebugger.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaDebug%2FDebugger.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaDebug","download_url":"https://codeload.github.com/JuliaDebug/Debugger.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaDebug%2FDebugger.jl/sbom","scorecard":{"id":75417,"data":{"date":"2025-08-11","repo":{"name":"github.com/JuliaDebug/Debugger.jl","commit":"f82cb3c31b0f8a9fdb1cde5b217b2681745de78f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Code-Review","score":5,"reason":"Found 15/29 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":8,"reason":"8 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/CI.yml:1","Warn: no topLevel permission defined: .github/workflows/CompatHelper.yml:1","Warn: no topLevel permission defined: .github/workflows/TagBot.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/CI.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/CI.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/TagBot.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/JuliaDebug/Debugger.jl/TagBot.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 20 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T04:42:03.440Z","repository_id":43040254,"created_at":"2025-08-15T04:42:03.440Z","updated_at":"2025-08-15T04:42:03.440Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29605799,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T06:47:36.664Z","status":"ssl_error","status_checked_at":"2026-02-19T06:45:47.551Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-21T12:41:04.793Z","updated_at":"2026-02-19T07:02:05.849Z","avatar_url":"https://github.com/JuliaDebug.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Debugger\n\n*A Julia debugger.*\n\n**Build Status**                                                                                |\n|:-----------------------------------------------------------------------------------------------:|\n| [![][travis-img]][travis-url]  [![][codecov-img]][codecov-url] |\n\n**Note**: If you are looking for the docs for the Julia VSCode debugger, see [this link instead](https://www.julia-vscode.org/docs/stable/userguide/debugging/)\n\n## Installation\n\nInstall Debugger using [Pkg](https://docs.julialang.org/en/v1/stdlib/Pkg/):\n\n```julia\njulia\u003e import Pkg; Pkg.add(\"Debugger\")\n```\n\n# Usage\n\n## Starting the debugger interface\n\nThe debug interface is entered using the `@enter` macro:\n\n```julia\nusing Debugger\n\nfunction foo(n)\n    x = n+1\n    ((BigInt[1 1; 1 0])^x)[2,1]\nend\n\n@enter foo(20)\n```\n\nThis interface allows for manipulating program execution, such as stepping in and\nout of functions, line stepping, showing local variables, setting breakpoints and evaluating code in\nthe context of functions.\n\n## Debugger commands\n\nBelow, square brackets denote optional arguments.\n\nAll of the following commands work when the prompt is `1|debug\u003e`:\n\nMisc:\n- `o`: open the current line in an editor\n- `q`: quit the debugger, returning `nothing`\n- `C`: toggle compiled mode\n- `L`: toggle showing lowered code instead of source code\n- `+`/`-`: increase / decrease the number of lines of source code shown\n\nStepping (basic):\n- `n`: step to the next line\n- `u [i::Int]`: step until line `i` or the next line past the current line\n- `s`: step into the next call\n- `so`: step out of the current call\n- `sl`: step into the last call on the current line (e.g. steps into `f` if the line is `f(g(h(x)))`).\n- `sr`: step until next `return`.\n- `c`: continue execution until a breakpoint is hit\n- `f [i::Int]`: go to the `i`-th function in the call stack (stepping is only possible in the function at the top of the call stack)\n- `up/down [i::Int]` go up or down one or `i` functions in the call stack\n\nStepping (advanced):\n- `nc`: step to the next call\n- `se`: step one expression step\n- `si`: same as `se` but step into a call if a call is the next expression\n- `sg`: step into a generated function\n\nQuerying:\n- `st`: show the \"status\" (current function, source code and current expression to run)\n- `bt`: show a backtrace\n- `fr [i::Int]`: show all variables in the current or `i`th frame\n\nEvaluation:\n- `w`\n    - `w add expr`: add an expression to the watch list\n    - `w`: show all watch expressions evaluated in the current function's context\n    - `w rm [i::Int]`: remove all or the `i`:th watch expression\n\nBreakpoints:\n- `bp`\n    - `bp add`\n        - `bp add \"file.jl\":line [cond]`: add a breakpoint att file `file.jl` on line `line` with condition `cond`\n        - `bp add func [:line] [cond]`: add a breakpoint to function `func` at line `line` (defaulting to first line)  with condition `cond`\n        - `bp add func(::Float64, Int)[:line] [cond]`: add a breakpoint to methods matching the signature at line `line` (defaulting to first line)  with condition `cond`\n        - `bp add func(x, y)[:line] [cond]`: add a breakpoint to the method matching the types of the local variable `x`, `y` etc with condition `cond`\n        - `bp add line [cond]` add a breakpoint to `line` of the file of the current function  with condition `cond`\n    - `bp` show all breakpoints\n    - `bp rm [i::Int]`: remove all or the `i`:th breakpoint\n    - `bp toggle [i::Int]`: toggle all or the `i`:th breakpoint\n    - `bp disable [i::Int]`: disable all or the `i`:th breakpoint\n    - `bp enable [i::Int]`: enable all or the `i`:th breakpoint\n    - `bp on/off`\n      - `bp on/off error` - turn on or off break on error\n      - `bp on/off throw` - turn on or off break on throw\n\nAn empty command will execute the previous command.\n\nChanging frames with `f i::Int` will change the prompt to `$i|debug\u003e`.\nStepping commands will not work until you return to `f 1`, but a subset of normal commands will continue to work.\n\nIn addition to these debugging commands, you can type `` ` `` to enter \"evaluation mode\" indicated by a prompt `$i|julia\u003e`.\nIn evaluation mode, any expression you type is executed in the debug context.\nFor example, if you have a local variable named `n`, then once in evaluation mode typing `n` will show you the value of `n` rather than advancing to the next line.\n\nHit backspace as the first character of the line to return to \"debug mode.\"\n\n### Breakpoints\n\nTo add and manipulate breakpoints, either the `bp add` command in the debug interface or the JuliaInterpreter breakpoint API, documented [here](https://juliadebug.github.io/JuliaInterpreter.jl/latest/dev_reference/#Breakpoints-1)\ncan be used.\n\nIt is common to want to run a function until a breakpoint is hit. Therefore, the \"shortcut macro\" `@run` is provided which is equivalent\nof starting the debug mode with `@enter` and then executing the continue command (`c`):\n\n```jl\njulia\u003e using Debugger\n\njulia\u003e breakpoint(abs);\n\njulia\u003e @run sin(2.0)\nHit breakpoint:\nIn abs(x) at float.jl:522\n\u003e522  abs(x::Float64) = abs_float(x)\n\nAbout to run: (abs_float)(2.0)\n1|debug\u003e bt\n[1] abs(x) at float.jl:522\n  | x::Float64 = 2.0\n[2] sin(x) at special/trig.jl:30\n  | x::Float64 = 2.0\n  | T::DataType = Float64\n```\n\n#### Breakpoint on error\n\nIt is possible to halt execution when an error is thrown. This is done by calling the exported function `break_on(:error)`.\n\n```jl\njulia\u003e using Debugger\n\njulia\u003e break_on(:error)\n\njulia\u003e f() = \"αβ\"[2];\n\njulia\u003e @run f()\nBreaking for error:\nERROR: StringIndexError(\"αβ\", 2)\nIn string_index_err(s, i) at strings/string.jl:12\n\u003e12  @noinline string_index_err(s::AbstractString, i::Integer) =\n\nAbout to run: (throw)(StringIndexError(\"αβ\", 2))\n1|debug\u003e bt\n[1] string_index_err(s, i) at strings/string.jl:12\n  | s::String = \"αβ\"\n  | i::Int64 = 2\n[2] getindex_continued(s, i, u) at strings/string.jl:218\n  | s::String = \"αβ\"\n  | i::Int64 = 2\n  | u::UInt32 = 0xb1000000\n  | val::Bool = false\n[3] getindex(s, i) at strings/string.jl:211\n  | s::String = \"αβ\"\n  | i::Int64 = 2\n  | b::UInt8 = 0xb1\n  | u::UInt32 = 0xb1000000\n[4] f() at REPL[5]:1\n\njulia\u003e JuliaInterpreter.break_off(:error)\n\njulia\u003e @run f()\nERROR: StringIndexError(\"αβ\", 2)\nStacktrace:\n[...]\n```\n\n### Place breakpoints in source code\nIt is sometimes more convenient to choose in the source code when to break. This is done for instance in Matlab/Octave with `keyboard`, and in R with `browser()`. You can use the `@bp` macro to do this:\n\n```jl\njulia\u003e using Debugger\n\njulia\u003e function f(x)\n           if x \u003c 0\n               @bp\n           else\n               println(\"All good!\")\n           end\n       end\nf (generic function with 1 method)\n\njulia\u003e @run f(2)\nAll good!\n\njulia\u003e @run f(-2)\nHit breakpoint:\nIn f(x) at REPL[6]:2\n 1  function f(x)\n 2      if x \u003c 0\n\u003e3          @bp\n 4      else\n 5          println(\"All good!\")\n 6      end\n 7  end\n\nAbout to run: return\n1|debug\u003e bt\n[1] f(x) at REPL[6]:3\n  | x::Int64 = -2\n```\n\n### Compiled mode\n\nIn order to fully support breakpoints, the debugger interprets all code, even code that is stepped over.\nCurrently, there are cases where the interpreter is too slow for this to be feasible.\nA workaround is to use \"compiled mode\" which is toggled by pressing `C` in the debug REPL mode (note the change of prompt color).\nWhen using compiled mode, code that is stepped over will be executed\nby the normal julia compiler and run just as fast as normally.\nThe drawback is that breakpoints in compiled code that is stepped over are missed.\n\nTo split the difference between these two extremes, one can fine tune which modules are compiled and which are not.\nFor example, to compile all code in Base, even when not in `C` mode, and hence break on all specified points in user code,\nissue the following commands on the REPL *before* `@enter`:\n\n```jl\nusing JuliaInterpreter, MethodAnalysis\nunion!(JuliaInterpreter.compiled_modules, child_modules(Base))\n```\n\nAdditional imported modules can also always be compiled with:\n\n```jl\nunion!(JuliaInterpreter.compiled_modules, SomePackage)\n```\n\n\n### Syntax highlighting\n\nThe source code preview is syntax highlighted and this highlighting has some options.\nThe theme can be set by calling `Debugger.set_theme(theme)` where `theme` is a [Highlights.jl theme](https://juliadocs.github.io/Highlights.jl/stable/demo/themes/).\nIt can be completely turned off or alternatively, different quality settings for the colors might be chosen by calling `Debugger.set_highlight(opt)` where `opt` is a `Debugger.HighlightOption` enum.\nThe choices are `HIGHLIGHT_OFF` `HIGHLIGHT_SYSTEM_COLORS`, `HIGHLIGHT_256_COLORS`, `HIGHLIGHT_24_BIT`. System colors works in pretty much all terminals, 256 in most terminals (with the exception of Windows)\nand 24 bit in some terminals.\n\n\n[travis-img]: https://travis-ci.org/JuliaDebug/Debugger.jl.svg?branch=master\n[travis-url]: https://travis-ci.org/JuliaDebug/Debugger.jl\n\n[codecov-img]: https://codecov.io/gh/JuliaDebug/Debugger.jl/branch/master/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/JuliaDebug/Debugger.jl\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliadebug%2Fdebugger.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliadebug%2Fdebugger.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliadebug%2Fdebugger.jl/lists"}