# \[ANN\] Juno 0.8

**URL:** <https://discourse.julialang.org/t/ann-juno-0-8/22157>\
**Category:** Juno\
**Tags:** announcement, juno\
**Created:** [March 21, 2019, 5:46pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157 "2019-03-21T17:46:59Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [March 21, 2019, 5:46pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/1 "2019-03-21T17:46:59Z")

</div>

Hey folks,

Juno 0.8 is out – get it while it’s fresh!  
While there of course have been loads of small bugfixes, the three stand-out features of this release are:

## Debugger Integration

 ![image](https://global.discourse-cdn.com/julialang/original/3X/7/3/73ea4f55c63ce4cde24ef924abb109ad8b731696.png)  
Juno now provides a fairly complete debugging experience, thanks to all the recent work on [JuliaInterpreter.jl](https://github.com/JuliaDebug/JuliaInterpreter.jl). Also see [the recent blog post](https://discourse.julialang.org/t/debugging-julia/22147).

The API to access the debugger consists of

- `Juno.@run` to run an expression and stop at any breakpoints, and
- `Juno.@enter` to step into the function and start stepping on the first line.

There are UI elements for setting breakpoints

- in files, by clicking the empty space left of the line numbers, or
- when entering a function/method , by using the `Break on...` text box on the right – either enter a function name (e.g. `sin`) to set breakpoints for all methods of that function, or specify the argument types (e.g. `sin(Int)`).

These breakpoints are unconditional by default, but can be switched to conditional breakpints with the button on the right.

**Important** : If you want to set breakpoints in files you need to have loaded Revise.jl _and_ Revise needs to be [aware of the file in question](https://timholy.github.io/Revise.jl/stable/#What-Revise-can-track-1). This means that you can only set breakpoints in your own scripts (that are not part of a package) if you have `includet` them.

## Traceur.jl integration

 ![image](https://global.discourse-cdn.com/julialang/original/3X/7/7/77e01c9a53464ea277c2f9a46c25d5cda53f0d38.png)  
This has been in Juno for a while now, but mostly hidden. Use `Juno.@trace` to get inline performance annotations for your functions, provided by [Traceur.jl](https://github.com/JunoLab/Traceur.jl).

## Weave.jl Integration

 ![image](https://global.discourse-cdn.com/julialang/original/3X/e/9/e9bb291ce51ebbadd90439ab83485a128e9093f7.png)

If you have [Weave.jl](https://github.com/mpastell/Weave.jl) and [language-weave](https://github.com/JunoLab/language-weave) (as well as [pdf-view](https://atom.io/packages/pdf-view) for pdf previews) installed, you can weave a file to pdf or html with a single button press.

## Installation

**Important** : Restart Atom before updating `julia-client` or `ink` and do _not_ start a Julia session.  
If that does not work, close all Atom instances and type

```julia-auto
apm uninstall ink
apm install ink
apm uninstall julia-client
apm install julia-client

```

into a terminal.

As always, make sure all Julia and Atom packages are up-to-date.

---

<div class="post-metadata">

**Author:** ![davidanthoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davidanthoff/32/223493_2.png) [@davidanthoff](https://discourse.julialang.org/u/davidanthoff)\
**Post date:** [March 21, 2019, 7:27pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/2 "2019-03-21T19:27:13Z")

</div>

Awesome!!

---

<div class="post-metadata">

**Author:** ![essenciary](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/essenciary/32/210469_2.png) [@essenciary](https://discourse.julialang.org/u/essenciary)\
**Post date:** [March 22, 2019, 8:30am UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/3 "2019-03-22T08:30:35Z")

</div>

This is extraordinary, thank you!

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [March 22, 2019, 12:16pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/4 "2019-03-22T12:16:48Z")

</div>

Great!

---

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [March 22, 2019, 3:01pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/5 "2019-03-22T15:01:29Z")

</div>

This is amazing, thank you! The debugging interface is really slick.

I’m having an error setting breakpoints, and _think_ I followed the installation instructions correctly. Updating packages within atom never works for me, so I closed Atom, used the command line to `apm uninstall` and `apm install` ink/julia-client, then started Atom, updated packages (Atom/Juno included), restarted Atom.

In this fresh session, I do `using Revise; includet("my/file.jl")`. When I try to set a breakpoint with alt-x, I get an `Error in Debugger` popup:

```julia
MethodError: no method matching haskey(::String, ::String)
Closest candidates are:
  haskey(!Matched::Base.Iterators.Pairs, ::Any) at iterators.jl:247
  haskey(!Matched::Dict, ::Any) at dict.jl:546
  haskey(!Matched::Base.ImmutableDict, ::Any) at dict.jl:731
  ...

```

Interestingly, actually setting a breakpoint and hitting it with `Juno.@run` seems to work just fine.  
Did I mess up the install somehow?

---

<div class="post-metadata">

**Author:** ![bplcn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bplcn/32/7552_2.png) [@bplcn](https://discourse.julialang.org/u/bplcn)\
**Post date:** [March 22, 2019, 3:15pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/6 "2019-03-22T15:15:12Z")

</div>

The debugging interface is quite helpful for me. But I have faced a problem when I want to set a breakpoint in Atom:

> Error in Debugger  
> no signatures found at …  
> Restarting and `using Revise` and the relevant package may fix this problem.

In fact, I do `using Revise` and use includet. Is there anything wrong with my Juno setting?

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [March 22, 2019, 3:23pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/7 "2019-03-22T15:23:33Z")

</div>

I’d bet you’re running into a problem with mismatched package versions – you need to be on julia-client v0.8.1 and Atom.jl v0.8.2 for things to work. Also make sure you have saved your file before setting breakpoints.

> In fact, I do `using Revise` and use includet. Is there anything wrong with my Juno setting?

Probably not. For some reason Revise doesn’t seem to know about the file you’re trying to set the breakpoint in. No idea why though.

---

<div class="post-metadata">

**Author:** ![IljaK91](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iljak91/32/44301_2.png) [@IljaK91](https://discourse.julialang.org/u/IljaK91)\
**Post date:** [March 22, 2019, 4:11pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/8 "2019-03-22T16:11:08Z")

</div>

I had the same problem and I think, if I am not mistaken, that Revise does not work on functions that were defined inside a script/global scope. The same worked when I set a breakpoint for a function inside a package.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [March 22, 2019, 6:29pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/9 "2019-03-22T18:29:10Z")

</div>

You need to use `includet` (note the t in the end) for Revise to track the file. This also enables line breakpoints in the file.

---

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [March 22, 2019, 9:38pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/10 "2019-03-22T21:38:18Z")

</div>

I am really confused.

To use breakpoint in a julia sourcecode, do I need to open revise.jl in Juno together with my source code? It says

**Important** : If you want to set breakpoints in files you need to have loaded Revise.jl _and_ Revise needs to be [aware of the file in question](https://timholy.github.io/Revise.jl/stable/#What-Revise-can-track-1). This means that you can only set breakpoints in your own scripts (that are not part of a package) if you have `includet` them.

Please note: you need to have loaded Revise.jl

Where can I find the file Revise.jl on my file system?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [March 22, 2019, 9:52pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/11 "2019-03-22T21:52:51Z")

</div>

Revise.jl is a package ([https://github.com/timholy/Revise.jl](https://github.com/timholy/Revise.jl)). Add it with the package manager and load it.

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [March 23, 2019, 10:56pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/12 "2019-03-23T22:56:19Z")

</div>

the weave plugin works with .jl files? or only works with .jmd?

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [March 24, 2019, 8:38pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/13 "2019-03-24T20:38:28Z")

</div>

Thanks to @tim.holy we now have some [fairly comprehensive docs for debugging in Juno](http://docs.junolab.org/latest/man/debugging/):

 ![](https://global.discourse-cdn.com/julialang/original/3X/2/4/241c5c8973e655cca6ce8672f0be3c26b815688a.png)

Those should hopefully clear up some of the confusion about breakpoints etc.

> the weave plugin works with .jl files? or only works with .jmd?

Weave definitely doesn’t work with .jl files, no. Take a look at the [docs](http://weavejl.mpastell.com/stable/) for more info.

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [March 24, 2019, 8:56pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/14 "2019-03-24T20:56:36Z")

</div>

> [@pfitzseb](#):
>
> Weave definitely doesn’t work with .jl files, no. Take a look at the [docs](http://weavejl.mpastell.com/stable/) for more info.

Actually, weave itself works like a charm with .jl files (with extra syntax) like this: [https://github.com/mpastell/Weave.jl/blob/master/examples/FIR\_design.jl](https://github.com/mpastell/Weave.jl/blob/master/examples/FIR_design.jl)  
Its not very well documented though.  
I successfully used it in [ParameterJuMP](https://github.com/JuliaStochOpt/ParameterJuMP.jl/tree/master/examples)!  
Just wanted to know if Juno could do the conversion from a properly written .jl file.

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [March 24, 2019, 9:01pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/15 "2019-03-24T21:01:30Z")

</div>

Ah, I see. It should work, and if it doesn’t then please open an issue.

---

<div class="post-metadata">

**Author:** ![stillyslalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stillyslalom/32/45687_2.png) [@stillyslalom](https://discourse.julialang.org/u/stillyslalom)\
**Post date:** [March 24, 2019, 11:59pm UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/16 "2019-03-24T23:59:25Z")

</div>

Seems as if it’d be worth automatically calling `includet` when a breakpoint is set outside of a module with Revise loaded.

---

<div class="post-metadata">

**Author:** ![sairus7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sairus7/32/10816_2.png) [@sairus7](https://discourse.julialang.org/u/sairus7)\
**Post date:** [March 25, 2019, 12:02am UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/17 "2019-03-25T00:02:54Z")

</div>

Can we use graphical breakpoints with debugger?

I’ve just created a file with a simple example:

```julia
using JuliaInterpreter
using Revise

x = [1,2,3,4,5]

function foo(x)
    x = abs(x)
    Main.JuliaInterpreter.@bp
    y = 3 *x + 1
    return y
end

Juno.@run foo(3)

```

And this works fine, but when I paste graphical breakpoint, I get error message:

```julia
no signatures found at ...\test.jl, 7.
Restarting and `using Revise` and the relevant package may fix this problem.

```

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [March 25, 2019, 1:30am UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/18 "2019-03-25T01:30:54Z")

</div>

Don’t get it but my Atom seems to be always (half)broken. I have `Uber-Juno` installed and .jl files are rcognised as Julia files but there is no “Packages-\>Julia”, nor `Ctrl-j, Ctrl-o` open any console.

---

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [March 25, 2019, 1:38am UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/19 "2019-03-25T01:38:00Z")

</div>

The easiest way to make sure Revise is running is to put `using Revise` in your `.julia/config/startup.jl` file. More information can found in the [Revise docs](https://timholy.github.io/Revise.jl/stable/config/). Revise typically runs in the background—you do should _not_ say `using Revise` in ordinary packages.

Once you have this setup, you should not generally need `@bp`; instead, just click in the leftmost column of the source display, as those docs that @pfitzseb linked explain.

---

<div class="post-metadata">

**Author:** ![sairus7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sairus7/32/10816_2.png) [@sairus7](https://discourse.julialang.org/u/sairus7)\
**Post date:** [March 25, 2019, 3:10am UTC](https://discourse.julialang.org/t/ann-juno-0-8/22157/20 "2019-03-25T03:10:40Z")

</div>

Thanks, I’ve added `using Revise` to my `startup.jl`  
The debug example from docs is working.  
If I just create a .jl file with a function, then run it, then using `Juno.@enter`, debugger buttons, etc. - it works just like in the docs.  
But trying to set a breakpoint at the next row still throws that error message.

UPD: Problem solved - I had to I `includet` that file in the console to get working graphical breakpoints.

[Next page](https://discourse.julialang.org/t/ann-juno-0-8/22157.md?page=2)
