mirror of
https://github.com/cs01/gdbgui
synced 2024-11-17 07:48:57 +01:00
0.13.2.0 (#279)
This commit is contained in:
parent
5b7d36aff8
commit
e96821932b
28 changed files with 2094 additions and 1839 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -14,3 +14,6 @@ yarn-error.log
|
|||
venv
|
||||
.vscode
|
||||
site
|
||||
build.js
|
||||
build.js.map
|
||||
__pycache__
|
||||
|
|
|
@ -10,7 +10,6 @@ language: python
|
|||
sudo: required
|
||||
python:
|
||||
- "2.7"
|
||||
- "3.4"
|
||||
- "3.5"
|
||||
- "3.6"
|
||||
- "3.7-dev"
|
||||
|
|
29
MANIFEST.in
29
MANIFEST.in
|
@ -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
|
||||
|
|
|
@ -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/
|
||||
|
||||
|
|
|
@ -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,15 +67,11 @@ 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
101
docs/theme/partials/footer.html
vendored
101
docs/theme/partials/footer.html
vendored
|
@ -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>
|
33
docs/theme/partials/integrations/analytics.html
vendored
33
docs/theme/partials/integrations/analytics.html
vendored
|
@ -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>
|
34
docs/theme/partials/nav.html
vendored
34
docs/theme/partials/nav.html
vendored
|
@ -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>
|
|
@ -1 +1 @@
|
|||
0.13.1.2
|
||||
0.13.2.0
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"]
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
1
gdbgui/static/js/.gitignore
vendored
1
gdbgui/static/js/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
*.map
|
4
makefile
4
makefile
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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": {
|
||||
|
|
2
setup.py
2
setup.py
|
@ -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",
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in a new issue