Skip to content

heckendorfc/lldbR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fc9a76f · Mar 10, 2020

History

68 Commits
Mar 10, 2020
Mar 10, 2020
Mar 10, 2020
Aug 16, 2016
Aug 14, 2016
Mar 10, 2020
Aug 11, 2016
Mar 10, 2020
Mar 10, 2020
Aug 15, 2016
Aug 19, 2016
Aug 19, 2016
Aug 15, 2016

Repository files navigation

lldbR

lldbR is an R package for using R as a debugger interface via the LLDB API. It is not a debugger for R; it allows you to use R as a debugger for another program. See the examples below for more information.

Installation

The package requires an installation of LLDB. By default, the package will look for this in /usr/local. If your installation is elsewhere, you can specify it via the configure argument --with-lldb-home.

You can install the package from R using any of the packages which can install from GitHub (provided you set lldbhome appropraitely; see below for examples)

lldbhome <- "--with-lldb-home='/PATH/TO/LLDB'"
remotes::install_github("heckendorfc/lldbR", configure.args=lldbhome)

Stable releases are published on the hpcran. You can install them via

install.packages("fmlr", configure.args=lldbhome, repos=c("https://hpcran.org", "https://cran.rstudio.com"))

Alternatively, you can download the latest here and install it from the command line as follows:

wget https://github.com/heckendorfc/lldbR/archive/master.zip
unzip master
R CMD build lldbR-master

R CMD INSTALL lldbR_1.0.tar.gz --configure-args="--with-lldb-home='/PATH/TO/LLDB'"

FreeBSD

Install devel/llvm38 (or other version) with the LLDB knob enabled using ports or pkg. You may then follow the instructions above using /usr/local/llvm38 for the lldb-home path.

Ubuntu 16.04

Because we can't have nice things, out of the box liblldb is not set up correctly. You'll need to link liblldb.so to the appropriate liblldb-VERSION.so. Here's an example of what you might do:

sudo apt-get install lldb liblldb-3.8-dev
sudo ln -f -s /usr/lib/x86_64-linux-gnu/liblldb-3.8.so /usr/lib/llvm-3.8/lib/liblldb.so

If you wish to install from R, then your lldbhome variable (as in the above) would be:

lldbhome <- "--with-lldb-home='/usr/lib/llvm-3.8/'"

Or if you're installing from the command line:

R CMD INSTALL lldbR_1.0.tar.gz --configure-args="--with-lldb-home='/usr/lib/llvm-3.8/'"

Other NIX Platforms

The installation should go similarly to the examples above. If you can provide more explicit details for one now shown here, please consider submitting a pull request.

Package Use

Say we have a file /tmp/test.c that looks like:

#include <stdlib.h>

int main(){
  int i;
  double *x = malloc(10 * sizeof(*x));
  
  for (i=1; i<10; i++){ // oopsie!
    x[i] = 15.0;
  }
  
  // imagine we do things here
  
  free(x);
  return 0;
}

If we build this as usual with something like clang -g -o test /tmp/test.c, then we can debug this from R using lldbR:

library(lldbR)
lldb.load("/tmp/test")
lldb.breakline("/tmp/test.c", 10)
lldb.run()

lldb.expr("x", 0)
## [1] 0
lldb.expr("x", 1)
## [1] 15
lldb.expr("x[1]") # same as above
## [1] 15

We can also do more interesting things, like take a histogram of the first 10 elements of the array:

vals <- lldb.expr("x", 0, 10)
hist(vals)

Which gives the expected histogram:

Generated histogram