This commit is contained in:
Chad Smith 2019-07-25 15:30:15 -07:00 committed by GitHub
parent 5b7d36aff8
commit e96821932b
28 changed files with 2094 additions and 1839 deletions

5
.gitignore vendored
View file

@ -13,4 +13,7 @@ gdbgui.spec
yarn-error.log
venv
.vscode
site
site
build.js
build.js.map
__pycache__

View file

@ -10,7 +10,6 @@ language: python
sudo: required
python:
- "2.7"
- "3.4"
- "3.5"
- "3.6"
- "3.7-dev"

View file

@ -1,5 +1,26 @@
include README.rst
include README.md
include LICENSE
include gdbgui/VERSION.txt
recursive-include gdbgui/static *
recursive-include gdbgui/templates *
graft gdbgui
prune examples
prune downloads
prune screenshots
prune tests
prune docs
prune docker
prune images
prune gdbgui/__pycache__
exclude makefile
exclude .eslintrc.json
exclude .flake8
exclude .prettierrc.js
exclude jest.config.js
exclude make_executable.py
exclude mkdocs.yml
exclude package.json
exclude requirements.txt
exclude tsconfig.json
exclude tslint.json
exclude webpack.config.js
exclude yarn.lock

View file

@ -11,7 +11,7 @@ A modern, browser-based frontend to gdb (gnu debugger)
<img src="https://travis-ci.org/cs01/gdbgui.svg?branch=master" alt="image" /></a>
<a href="https://pypi.python.org/pypi/gdbgui/">
<img src="https://img.shields.io/badge/pypi-0.13.1.2-blue.svg" alt="image" />
<img src="https://img.shields.io/badge/pypi-0.13.2.0-blue.svg" alt="image" />
</a>
<img src="https://pepy.tech/badge/gdbgui" alt="image" />
@ -23,4 +23,3 @@ A modern, browser-based frontend to gdb (gnu debugger)
**Documentation**: https://gdbgui.com
**Source Code**: https://github.com/cs01/gdbgui/

View file

@ -1,13 +1,11 @@
This is the command line help output of gdbgui.
```
gdbgui --help
usage: gdbgui [-h] [-g GDB] [--gdb-args GDB_ARGS] [--rr] [-p PORT]
[--host HOST] [-r] [--auth-file AUTH_FILE] [--user USER]
[--password PASSWORD] [--key KEY] [--cert CERT]
[--remap-sources REMAP_SOURCES] [--project PROJECT] [-v]
[--hide-gdbgui-upgrades] [-n] [-b BROWSER]
[--license LICENSE] [--debug] [--args ...]
[-n] [-b BROWSER] [--debug] [--args ...]
[cmd]
A server that provides a graphical user interface to the gnu debugger (gdb).
@ -69,16 +67,12 @@ other settings:
--project PROJECT Set the project directory. When viewing the "folders"
pane, paths are shown relative to this directory.
-v, --version Print version
--hide-gdbgui-upgrades
Hide messages regarding newer version of gdbgui.
Default: False.
-n, --no-browser By default, the browser will open with gdbgui. Pass
this flag so the browser does not open.
-b BROWSER, --browser BROWSER
Use the given browser executable instead of the system
default.
--license LICENSE Store gdbgui ad-free license key.
--debug The debug flag of this Flask application. Pass this
flag when debugging gdbgui itself to automatically
reload the server when changes are detected
```
```

View file

@ -1,7 +1,16 @@
# gdbgui release history
## 0.13.2.0
* Print number of times a breakpoint was hit (@MatthiasKreileder).
* Publish sdist to PyPI (this was overlooked in previous release).
* Do not notify users of gdbgui upgrades (deprecate `--hide-gdbgui-upgrades` flag)
* Drop support for Python 3.4
* [dev] Some infrastructure changes to gdbgui. End users should not be affected.
* [dev] Fix build error due to webpack bug (https://github.com/webpack/webpack/issues/8082).
## 0.13.1.2
* Exclude "tests" directory from Python package
* Remove analytics from documentation
## 0.13.1.1
* Add `__main__` entrypoint

View file

@ -37,7 +37,7 @@ Note that `yarn` can be replaced with `npm`:
```bash
yarn install
yarn watch
yarn start
```
Now every JavaScript source file you change will trigger a recompilation. Refresh your browser to see the changes.

View file

@ -11,7 +11,7 @@ A modern, browser-based frontend to gdb (gnu debugger)
<img src="https://travis-ci.org/cs01/gdbgui.svg?branch=master" alt="image" /></a>
<a href="https://pypi.python.org/pypi/gdbgui/">
<img src="https://img.shields.io/badge/pypi-0.13.1.2-blue.svg" alt="image" />
<img src="https://img.shields.io/badge/pypi-0.13.2.0-blue.svg" alt="image" />
</a>
<img src="https://pepy.tech/badge/gdbgui" alt="image" />
@ -80,7 +80,7 @@ gdbgui is distributed through
## Donate
Please consider donating to support continued development of gdbgui: [Paypal](https://www.paypal.me/grassfedcode/20)
[Paypal](https://www.paypal.me/grassfedcode/20)
## Contact

View file

@ -1,29 +0,0 @@
gdbgui was started and developed by me in my spare time. It has grown in scope, and gotten more users than I ever expected from all over the world, which is very exciting. It has been really fun and rewarding to make, and I'm proud of how many developers it has helped to understand and develop their application. College professors list it in tools to learn in class syllabi, engineers are using at companies like Google, and the Rust language even distributes a [`rust-gdbgui` script](https://github.com/rust-lang/rust/blob/79d8a0fcefa5134db2a94739b1d18daa01fc6e9f/src/etc/rust-gdbgui).
I have had some help from the community to iron out bugs and some corner cases, but the majority of workload and features have been added by me. And the reality is this is a non-trivial application that has taken a lot of work and focus to get to where it's at. Nevertheless it is a side-project that provides little incentive for me to spend my nights and weekends working on it.
It is stable and useful to a wide range of gdb users. That said, I am still interested in it, and have thoughts about what would make it better. I have laid them out here, and may or may not implement them someday.
If you have interest in making any of these happen, please reach out and get the ball rolling! I, and many users, would appreciate your help :raised_hands:. gdbgui is a full stack application, but don't be afraid to help if you are only comfortable with one part of the stack. For the most part, the abstractions allow you to work in one part of the code without needing to understand others.
I will update this task with updates as they occur.
## Near term
- Typescript support. It's almost there thanks to @bcherny (https://github.com/cs01/gdbgui/pull/256)
- Use mkdocs+GitHub pages for documentation and improve docs (similar to [TermPair docs](https://cs01.github.io/termpair/))
- Use bootstrap 4 (or 5?) and add button to toggle light/dark theme
## Medium term
- Get paid sponsors/ads (similar to codesandbox.io) which will help development continue for gdbgui. Contact grassfedcode@gmail.com if interested.
- Find volunteer to own support/bugfixes/testing for Windows
- Replace splitjs library with css grid
- Replace awesomeplete with CTRL+P file search similar to chrome devtools, VSCode, Atom, etc.
- Spawn three pty's on backend instead of running gdb as a subprocess under pygdbmi and trying to emulate terminal output. The benefit of this is the gdb terminal will behave *exactly* as if you ran it from the terminal, including interacting with the process being debugged (like inputting text), displaying newlines. It behaves the same as if you ran it, because it will be running identically. (Currently it runs as a subprocess and doesn't handle I/O exactly same as if you ran from a terminal. gdbgui has several imperfect hacks to workaround this)
pty 1: a gdb subprocess.
pty 2: the gdb machine interface interpreter, connected to pty 1 by using the [`new-ui`](https://sourceware.org/gdb/onlinedocs/gdb/Interpreters.html).
pty 3: This will be in a separate tab at the bottom of the gdbgui ui; a shell for the user to interact with (see [pyxtermjs](https://github.com/cs01/pyxterm.js/tree/master/pyxtermjs) and [TermPair](https://github.com/cs01/termpair)) . Similar to how VSCode has a terminal at the bottom of the VSCode window.
**This would possibly result in dropping support for Windows** (I am not certain if `pty` works on windows or not)
## Long term
- Use asyncio on backend so that pygbmi is event-based rather than running in a loop and pausing for a short period of time. **This would result in dropping support for older python versions**
- Use Microsoft's [Monaco](https://microsoft.github.io/monaco-editor/) as a text editor instead of hand-made React component. This essentially enables all of VSCode's language service capabilities in the browser, such jump to defintion, language-specific semantic understanding of variables for things like hover. Adds ability to edit+save files. Also must support inline disassembly display.

View file

@ -1,101 +0,0 @@
<!--
Copyright (c) 2016-2019 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
{% import "partials/language.html" as lang with context %}
<!-- Application footer -->
<footer class="md-footer">
<!-- Link to previous and/or next page -->
{% if page.previous_page or page.next_page %}
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<!-- Link to previous page -->
{% if page.previous_page %}
<a href="{{ page.previous_page.url | url }}"
title="{{ page.previous_page.title }}"
class="md-flex md-footer-nav__link md-footer-nav__link--prev"
rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back
md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch
md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
{{ lang.t("footer.previous") }}
</span>
{{ page.previous_page.title }}
</span>
</div>
</a>
{% endif %}
<!-- Link to next page -->
{% if page.next_page %}
<a href="{{ page.next_page.url | url }}"
title="{{ page.next_page.title }}"
class="md-flex md-footer-nav__link md-footer-nav__link--next"
rel="next">
<div class="md-flex__cell md-flex__cell--stretch
md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
{{ lang.t("footer.next") }}
</span>
{{ page.next_page.title }}
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward
md-footer-nav__button"></i>
</div>
</a>
{% endif %}
</nav>
</div>
{% endif %}
<!-- Further information -->
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<!-- Copyright and theme information -->
<div class="md-footer-copyright">
{% if config.copyright %}
<div class="md-footer-copyright__highlight">
{{ config.copyright }}
</div>
{% endif %}
powered by
<a href="https://www.mkdocs.org">MkDocs</a>
and
<a href="https://squidfunk.github.io/mkdocs-material/">
Material for MkDocs</a>
</div>
<!-- Social links -->
{% include "partials/social.html" %}
</div>
</div>
</footer>

View file

@ -1,33 +0,0 @@
{% set analytics = config.google_analytics %}
<script>
window.ga = window.ga || function() {
(ga.q = ga.q || []).push(arguments)
}
ga.l = +new Date
/* Setup integration and send page view */
ga("create", "{{ analytics[0] }}", "{{ analytics[1] }}")
ga("set", "anonymizeIp", true)
ga("send", "pageview")
/* Register handler to log search on blur */
document.addEventListener("DOMContentLoaded", () => {
if (document.forms.search) {
var query = document.forms.search.query
query.addEventListener("blur", function() {
if (this.value) {
var path = document.location.pathname;
ga("send", "pageview", path + "?q=" + this.value)
}
})
}
})
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<!-- add in adsense (hack)-->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-9016047663812570",
enable_page_level_ads: true
});
</script>

View file

@ -1,34 +0,0 @@
<nav class="md-nav md-nav--primary" data-md-level="0">
<label class="md-nav__title md-nav__title--site" for="__drawer">
<a href="{{ config.site_url | default(nav.homepage.url, true) | url }}" title="{{ config.site_name }}" class="md-nav__button md-logo">
{% if config.theme.logo.icon %}
<i class="md-icon">{{ config.theme.logo.icon }}</i>
{% else %}
<img src="{{ config.theme.logo | url }}" width="48" height="48">
{% endif %}
</a>
{{ config.site_name }}
</label>
{% if config.repo_url %}
<div class="md-nav__source">
{% include "partials/source.html" %}
</div>
{% endif %}
<ul class="md-nav__list" data-md-scrollfix>
{% for nav_item in nav %}
{% set path = "nav-" + loop.index | string %}
{% set level = 1 %}
{% include "partials/nav-item.html" %}
{% endfor %}
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- gdbgui -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9016047663812570"
data-ad-slot="3732200413"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</nav>

View file

@ -1 +1 @@
0.13.1.2
0.13.2.0

View file

@ -7,35 +7,37 @@ https://github.com/cs01/gdbgui
import argparse
import binascii
from distutils.spawn import find_executable
from flask import (
Flask,
session,
request,
Response,
render_template,
jsonify,
redirect,
abort,
)
from flask_socketio import SocketIO, emit
from flask_compress import Compress
from functools import wraps
import json
import logging
import os
import platform
import pygdbmi
from pygments.lexers import get_lexer_for_filename
from pygdbmi.gdbcontroller import NoGdbProcessError
import re
import signal
import shlex
import sys
import signal
import socket
import sys
import traceback
import webbrowser
from werkzeug.security import pbkdf2_hex
from distutils.spawn import find_executable
from functools import wraps
import pygdbmi
from flask import (
Flask,
Response,
abort,
jsonify,
redirect,
render_template,
request,
session,
)
from flask_compress import Compress
from flask_socketio import SocketIO, emit
from gdbgui import __version__, htmllistformatter # noqa
from gdbgui.statemanager import StateManager # noqa
from pygdbmi.gdbcontroller import NoGdbProcessError
from pygments.lexers import get_lexer_for_filename
pyinstaller_env_var_base_dir = "_MEIPASS"
@ -48,8 +50,6 @@ else:
PARENTDIR = os.path.dirname(BASE_PATH)
sys.path.append(PARENTDIR)
from gdbgui import htmllistformatter, __version__ # noqa
from gdbgui.statemanager import StateManager # noqa
try:
from gdbgui.SSLify import SSLify, get_ssl_context # noqa
@ -62,7 +62,6 @@ except ImportError:
USING_WINDOWS = os.name == "nt"
TEMPLATE_DIR = os.path.join(BASE_PATH, "templates")
GDBGUI_PREF_DIR = os.path.join(os.path.expanduser("~"), ".gdbgui")
STATIC_DIR = os.path.join(BASE_PATH, "static")
DEFAULT_HOST = "127.0.0.1"
DEFAULT_PORT = 5000
@ -103,7 +102,6 @@ Compress(
app.config["initial_binary_and_args"] = []
app.config["gdb_path"] = DEFAULT_GDB_EXECUTABLE
app.config["gdb_cmd_file"] = None
app.config["show_gdbgui_upgrades"] = True
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config["LLDB"] = False # assume false, okay to change later
app.config["project_home"] = None
@ -539,13 +537,9 @@ def gdbgui():
"initial_gdb_user_command": initial_gdb_user_command,
"interpreter": interpreter,
"initial_binary_and_args": app.config["initial_binary_and_args"],
"p": pbkdf2_hex(str(app.config.get("l")), "Feo8CJol")
if app.config.get("l")
else "",
"project_home": app.config["project_home"],
"remap_sources": app.config["remap_sources"],
"rr": app.config["rr"],
"show_gdbgui_upgrades": app.config["show_gdbgui_upgrades"],
"themes": THEMES,
"signals": SIGNAL_NAME_TO_OBJ,
"using_windows": USING_WINDOWS,
@ -623,7 +617,7 @@ def dashboard():
def shutdown_webview():
add_csrf_token_to_session()
return render_template(
"donate.html", debug=app.debug, csrf_token=session["csrf_token"]
"shutdown.html", debug=app.debug, csrf_token=session["csrf_token"]
)
@ -770,22 +764,6 @@ def get_gdbgui_auth_user_credentials(auth_file, user, password):
return None
def initialize_preferences():
if not os.path.exists(GDBGUI_PREF_DIR):
os.makedirs(GDBGUI_PREF_DIR)
app.config["l"] = None
if os.path.exists(os.path.join(GDBGUI_PREF_DIR, "license")):
with open(os.path.join(GDBGUI_PREF_DIR, "license")) as f:
app.config["l"] = f.read().strip()
def save_license(license):
with open(os.path.join(GDBGUI_PREF_DIR, "license"), "w") as f:
f.write(license)
app.config["l"] = license
print("saved license information")
def get_parser():
parser = argparse.ArgumentParser(description=__doc__)
@ -877,9 +855,10 @@ def get_parser():
help='Set the project directory. When viewing the "folders" pane, paths are shown relative to this directory.',
)
other.add_argument("-v", "--version", help="Print version", action="store_true")
other.add_argument(
"--hide-gdbgui-upgrades",
help="Hide messages regarding newer version of gdbgui. Default: False.",
help=argparse.SUPPRESS, # deprecated. left so calls to gdbgui don't break
action="store_true",
)
other.add_argument(
@ -894,7 +873,6 @@ def get_parser():
help="Use the given browser executable instead of the system default.",
default=None,
)
other.add_argument("--license", help="Store gdbgui ad-free license key.")
other.add_argument(
"--debug",
help="The debug flag of this Flask application. "
@ -932,8 +910,6 @@ def main():
if args.debug:
logger.setLevel(logging.NOTSET)
initialize_preferences()
if args.version:
print(__version__)
return
@ -948,7 +924,6 @@ def main():
app.config["gdb_args"] = shlex.split(args.gdb_args)
app.config["rr"] = args.rr
app.config["gdb_path"] = args.gdb
app.config["show_gdbgui_upgrades"] = not args.hide_gdbgui_upgrades
app.config["gdbgui_auth_user_credentials"] = get_gdbgui_auth_user_credentials(
args.auth_file, args.user, args.password
)
@ -963,10 +938,6 @@ def main():
print(e)
exit(1)
if args.license:
print("saving license information")
save_license(args.license)
verify_gdb_exists(app.config["gdb_path"])
if args.remote:
args.host = "0.0.0.0"

View file

@ -66,6 +66,17 @@ class Breakpoint extends React.Component {
</div>
);
}
get_num_times_hit(bkpt){
if ((bkpt.times === undefined) // E.g. 'bkpt' is a child breakpoint
||
(bkpt.times == 0)) {
return ""
} else if (bkpt.times == 1) {
return "1 hit"
} else {
return `${bkpt.times} hits`;
}
}
render() {
let b = this.props.bkpt,
checked = b.enabled === "y" ? "checked" : "",
@ -111,6 +122,7 @@ class Breakpoint extends React.Component {
} else {
let func = b.func === undefined ? "(unknown function)" : b.func;
const times_hit = this.get_num_times_hit(b);
function_jsx = (
<div style={{ display: "inline" }}>
<span className="monospace" style={{ paddingRight: "5px" }}>
@ -119,6 +131,9 @@ class Breakpoint extends React.Component {
<span style={{ color: "#bbbbbb", fontStyle: "italic" }}>
thread groups: {b["thread-groups"]}
</span>
<span style={{ color: "#bbbbbb", fontStyle: "italic", paddingLeft: "5px"}}>
{times_hit}
</span>
</div>
);
}

View file

@ -107,52 +107,6 @@ class GdbConsole extends React.Component {
</div>
);
}
case constants.console_entry_type.UPGRADE_GDBGUI: {
return (
<div
key={index}
style={{
color: "white",
minHeight: "1em",
margin: "2px",
whiteSpace: "pre",
fontFamily: "arial",
fontSize: "1.2em"
}}
>
<span style={{ fontWeight: "bold" }}>
Enter gdbgui ad-free license key to support the project and remove this
message.{" "}
</span>
<a
className="btn btn-default btn-xs"
style={{ color: "black" }}
href={constants.gdbgui_upgrade_url}
>
upgrade now.
</a>
<span> or </span>
<a
className="btn btn-default btn-xs"
style={{ color: "black" }}
href={constants.gdbgui_donate_url}
>
{" "}
donate now.
</a>
{/* <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins className="adsbygoogle"
style={{display: 'block'}}
data-ad-client="ca-pub-9016047663812570"
data-ad-slot="3732200413"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script> */}
</div>
);
}
}
});
}

View file

@ -32,7 +32,7 @@ export class FileLink extends React.Component<Props> {
clipboard_content = (this.props.fullname || this.props.file) + sep + line;
}
return (
<div style={{ display: "inline-block", whitespace: "nowrap" }}>
<div style={{ display: "inline-block", whiteSpace: "nowrap" }}>
<span
onClick={onclick}
className={cls}

View file

@ -63,10 +63,7 @@ let About = {
Actions.show_modal(
"About gdbgui",
<React.Fragment>
A <a href="http://grassfedcode.com">grassfedcode</a> project to make the easiest
to use and most accessible gdb frontend.
<p />
Copyright © Chad Smith
Copyright © Chad Smith, grassfedcode.com
</React.Fragment>
);
}
@ -133,16 +130,6 @@ const menu = (
</li>
<li role="separator" className="divider" />
<li>
<a href={constants.gdbgui_donate_url} className="pointer">
Donate
</a>
</li>
<li>
<a href="https://gitter.im/gdbgui/Lobby" className="pointer">
Chat room
</a>
</li>
<li>
<a href="https://github.com/cs01/gdbgui" className="pointer">
GitHub

View file

@ -22,7 +22,6 @@ let constants = {
GDBGUI_OUTPUT: "GDBGUI_OUTPUT",
GDBGUI_OUTPUT_RAW: "GDBGUI_OUTPUT_RAW",
AUTOCOMPLETE_OPTION: "AUTOCOMPLETE_OPTION",
UPGRADE_GDBGUI: "UPGRADE_GDBGUI"
},
source_code_selection_states: {
@ -51,8 +50,6 @@ let constants = {
tree_component_id: "tree",
default_max_lines_of_code_to_fetch: 500,
gdbgui_upgrade_url: "https://grassfedcode.onfastspring.com/gdbgui-premium",
gdbgui_donate_url: "https://www.paypal.me/grassfedcode",
keys_to_not_log_changes_in_console: ["gdb_mi_output", "gdb_console_entries"]
};

View file

@ -156,12 +156,6 @@ class Gdbgui extends React.PureComponent {
method: "GET",
success: data => {
store.set("latest_gdbgui_version", _.trim(data));
if (
initial_data.show_gdbgui_upgrades &&
TopBar.needs_to_update_gdbgui_version()
) {
Actions.show_modal(`Update Available`, TopBar.get_upgrade_text());
}
},
error: data => {
void data;

View file

@ -1 +0,0 @@
*.map

View file

@ -1,10 +1,12 @@
# run pip install -e .[dev] before running make test
.PHONY: test publish executable build
test:
check-manifest --ignore build.js,gdbgui/static/js,gdbgui/static/js/build.js.map
python setup.py checkdocs
python -m tests
yarn install
yarn test
yarn build
python setup.py checkdocs
clean:
rm -rf dist build

View file

@ -3,10 +3,6 @@ site_description: A modern, browser-based frontend to gdb (gnu debugger)
theme:
name: "material"
custom_dir: 'docs/theme'
google_analytics:
- 'UA-90243909-2'
- 'auto'
repo_name: cs01/gdbgui
repo_url: https://github.com/cs01/gdbgui
@ -22,7 +18,6 @@ nav:
- Contributing: "contributing.md"
- How it Works: "howitworks.md"
- Contact: "contact.md"
- Roadmap: "roadmap.md"
- Changelog: "changelog.md"
markdown_extensions:

View file

@ -10,10 +10,10 @@
},
"dependencies": {
"prettier": "^1.12.0",
"react": "^16.4",
"react": "^16.8",
"react-dom": "^16.4",
"statorgfc": "^0.1.6",
"webpack": "^4.5.0",
"webpack": "4.19.0",
"webpack-cli": "^2.0.14"
},
"devDependencies": {

View file

@ -67,6 +67,7 @@ setup(
"mkdocs-material",
"collective.checkdocs==0.2",
"PyInstaller==3.3.1",
"check-manifest==0.39",
]
},
zip_safe=False,
@ -79,7 +80,6 @@ setup(
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: Implementation :: PyPy",

View file

@ -3,6 +3,7 @@ const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports = {
entry: './gdbgui/src/js/gdbgui.jsx',
devtool: 'source-map',
output: {
path: path.resolve(__dirname, 'gdbgui/static/js/'),
filename: 'build.js'

3488
yarn.lock

File diff suppressed because it is too large Load diff