百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
N

nidhugg

> 编程语言
开源

Nidhugg是一个查找bug的工具,它针对的是同时程序中由货币和放松内存一致性引起的bug. 这对Prog特别有用

99 stars0 点赞0 次浏览
访问官网GitHub

工具介绍

Nidhugg是一个查找bug的工具,它针对的是同时程序中由货币和放松内存一致性引起的bug. 这对Prog特别有用

Nidhugg is a bug-finding tool which targets bugs caused by concurrency and relaxed memory consistency in concurrent programs. It works on the level of LLVM internal representation, which means that it can be used for programs written in languages such as C or C++.

Currently Nidhugg supports the SC, TSO, PSO, POWER and ARM memory models. Target programs should use pthreads for concurrency, and each thread should be deterministic when run in isolation.

Documentation


The main documentation can be found in the git repository at https://github.com/nidhugg/nidhugg/blob/master/doc/manual.pdf , or in the source at doc/manual.pdf, or if installed at PREFIX/share/doc/nidhugg/manual.pdf .

Installation


Nidhugg can be compiled and installed on UNIX-like systems.

Requirements

  1. A C++ compiler supporting C++17. For example g++ version 8 or higher, or clang++ version 8 or higher. (For compiling the tool Nidhugg.)

  2. The C compiler clang. (For use by Nidhugg as a frontend for C compilation.)

  3. Standard C/C++ libraries.

  4. GNU Autotools (autoconf & automake).

  5. Python version 3.0 or higher.

  6. The LLVM library and headers; supported versions are 8 to 19. The ARM and POWER memory models are not supported when using LLVM version 15 and higher. If you are compiling the LLVM library from sources, see Compiling LLVM below.

  7. Foreign Function Interface (libffi) library and headers.

  8. Boost Unit Test Framework, version 1.65 or higher.

(9). pkg-config, for generating a fully-featured configure script, capable of autodetecting the flags needed for libffi. Optional, but recommended.

(10). Optional: Valgrind

(11). Optional: For documentation: pdflatex (with packages article, inputenc, amssymb)

For Users of Debian-like Systems

On a Debian-like Linux distribution (such as e.g. Ubuntu), satisfy the requirements by installing the following packages:

Mandatory: autoconf, automake, clang, libc6, libc6-dev, libstdc++6, python3, llvm, llvm-dev, libboost-dev, libboost-system-dev, libboost-test-dev, libffi-dev, pkg-config

Optional: pkg-config, texlive-base, texlive-latex-base, valgrind

Getting Nidhugg

Git users can clone Nidhugg as follows:

$ git clone https://github.com/nidhugg/nidhugg.git

Non git users may find it easier to download the latest revision as a zip archive:

https://github.com/nidhugg/nidhugg/archive/master.zip

Basic Installation

The following assumes that you are in a shell in the main directory of Nidhugg.

  1. Use GNU Autotools to generate the configure script:

    $ autoreconf --install

  2. Build as usual. See Installation Options below for options about e.g. installation location.

    $ ./configure $ make

  3. Install:

    $ make install

  4. Optionally run test suite (Boost Unit Test Framework required):

    $ make test

    or (Valgrind required)

    $ make valtest

Installation Options

The configure script is built with GNU autotools, and should accept the usual options and environment variables. This section outlines some of the typical use cases.

Changing Installation Directory

The command 'make install' will install Nidhugg and its documentation in the directories which are standard on your system. To override this behavior add the switch --prefix to the './configure' command:

$ ./configure --prefix=/your/desired/install/path

Specifying Compiler

When the configure script is invoked, it will by GNU autotools magic determine which C++ compiler will be used during compilation. In case e.g. your default compiler does not support C++17, but you have the compiler g++-12 installed at a non-standard location you may want to override this. In order to do so, specify the path to g++-12 in CXX when invoking the './configure' command:

$ ./configure CXX='/path/to/g++-12'

Specifying LLVM Installation

If the configure script does not find your LLVM installation, or does not find the installation which you want to use (see output from configure), you may specify the installation location of LLVM with the --with-llvm switch. Below, /path/to/llvm should be the path to the root of the LLVM installation, i.e. the directory which contains bin/llvm-config and lib/libllvm.a .

$ ./configure --with-llvm='/path/to/llvm'

(Re)building PDF Documentation

By default, make will not rebuild the documentation from LaTeX sources. This allows the typical user to simply use the latest PDF pushed to the git repository. In order to force (re)building of the documentation, configure with the switch --enable-build-documentation . This requires LaTeX to be installed.

$ ./configure --enable-build-documentation

Compiling LLVM

If you are a user of Nidhugg, we recommend you use a release build of LLVM. You can also speed up the build by disabling all the backends.

$ cd llvm-*.src $ mkdir build && cd build $ cmake -DCMAKE_INSTALL_PREFIX=/your/llvm/install/path
-DCMAKE_BUILD_TYPE=Release
-DLLVM_TARGETS_TO_BUILD="" -DLLVM_LINK_LLVM_DYLIB=ON .. $ make $ make install

Compiling LLVM for Debugging or Developing Nidhugg


If you are developing Nidhugg or are troubleshooting a bug in Nidhugg, we recommend you use a debug build of LLVM, as this will allow you to build an assertions-enabled build of Nidhugg.

$ cd llvm-*.src $ mkdir build && cd build $ cmake -DCMAKE_INSTALL_PREFIX=/your/llvm/install/path
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DLLVM_ENABLE_ASSERTIONS=ON
-DLLVM_TARGETS_TO_BUILD="" -DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_OPTIMIZED_TABLEGEN=ON .. $ make $ make install

License


Nidhugg is licensed under GPLv3. See COPYING.

Nidhugg is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Nidhugg is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

LLVM License

Part of the code in the files listed below originate in the LLVM Compiler Framework (http://llvm.org, version 3.4.1). Those parts are licensed under the University of Illinois/NCSA Open Source License as well as under GPLv3. See LLVMLICENSE.TXT.

src/Interpreter.h src/Interpreter.cpp src/Execution.cpp src/ExternalFunctions.cpp

Contact / Bug Report


Feedback, questions or bug reports should be reported as issues on Github.

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月18日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言