Commit Graph

5600 Commits

Author SHA1 Message Date
Zephyr Lykos
ae8a12fa27 impr: Show external frames when using std::stacktrace backend (#2302)
<!--
Please provide as much information as possible about what your PR aims
to do.
PRs with no description will most likely be closed until more
information is provided.
If you're planing on changing fundamental behaviour or add big new
features, please open a GitHub Issue first before starting to work on
it.
If it's not something big and you still want to contact us about it,
feel free to do so !
-->

### Problem description
`std::stacktrace` backend in `hex::trace` does not show frames for
external libraries.

### Implementation description
If `dlfcn.h` is available, use `dladdr` to retrieve external symbol
information.

### Screenshots
Before:
```
[02:33:46] [FATAL] [main | Main]               Printing stacktrace using implementation 'std::stacktrace'
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/lib/trace/source/stacktrace.cpp:34) | hex::trace::getStackTrace()
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:75) | printStackTrace
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:125) | hex::crash::handleCrash(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:211) | operator()
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/lib/third_party/imgui/backend/source/imgui_impl_glfw.cpp:844) | ImGui_ImplGlfw_UpdateMouseData
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:353) | hex::Window::frameBegin()
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:241) | hex::Window::fullFrame()
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:297) | hex::Window::loop()
[02:33:46] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/init/run/native.cpp:43) | hex::init::runImHex()
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:46] [FATAL] [main | Main]                 () | ??
[02:33:47] [FATAL] [main | Main]                 () | ??
[02:33:47] [FATAL] [main | Main]                 () | ??
```

After:
```
[02:30:19] [FATAL] [main | Main]               Printing stacktrace using implementation 'std::stacktrace'
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/lib/trace/source/stacktrace.cpp:41) | hex::trace::getStackTrace()
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:75) | printStackTrace
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:125) | hex::crash::handleCrash(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/crash_handlers.cpp:211) | operator()
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | libc.so.6+0x00019bef
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | libc.so.6+0x00073c2c
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | gsignal+0x1d
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | abort+0x25
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | libc.so.6+0x00001638
[02:30:19] [FATAL] [main | Main]                 (/lib64/libglfw.so.3) | libglfw.so.3+0x00002275
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/lib/third_party/imgui/backend/source/imgui_impl_glfw.cpp:844) | ImGui_ImplGlfw_UpdateMouseData
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:353) | hex::Window::frameBegin()
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:241) | hex::Window::fullFrame()
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/window/window.cpp:297) | hex::Window::loop()
[02:30:19] [FATAL] [main | Main]                 (/home/mochaa/ghq/github.com/WerWolv/ImHex/main/gui/source/init/run/native.cpp:43) | hex::init::runImHex()
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | libc.so.6+0x000035b4
[02:30:19] [FATAL] [main | Main]                 (/lib64/libc.so.6) | __libc_start_main+0x87
[02:30:19] [FATAL] [main | Main]                 (./build/imhex) | imhex+0x0000cd94
[02:30:19] [FATAL] [main | Main]                 (??) | +0xffffffffffffffff
```

### Additional things
None
2025-08-09 19:46:01 +02:00
Artem Garmash
de7d549fc6 feat: Added skipping sequences of repeating bytes (#2228)
This PR implements a neat little feature I missed - the ability to jump
to the next/previous differing byte, skipping the chunk of repeating
bytes. Very useful when you analyze a raw flash dump and want to skip
the large sections of `0x00`s/`0xFF`s.

Some implementation details worth validating:
- I wasn't sure what is the correct place to put the new menu entries
into. The possible candidates were `File -> Go to address...` and `Edit
-> Follow selection`. I chose the former, although the latter may be a
better fit since it already states that the action is related to the
selection. Overall, it may be a good moment to refine these menu entries
in general.
- I didn't add any tests since I'm not sure what is the project's policy
for those. Please let me know if I need to add some!
- I added the machine-generated translations for the new menu entries
which may be considered a questionable thing. Please let me know if
you're unhappy with those, I'll drop the commit.
 
Also, thanks for such a nice tool, I use it a lot and was glad to build
a new feature for it!
2025-08-09 19:40:04 +02:00
WerWolv
d925c8216d impr: Allow ImHex to be used without subpixel rendering on Windows if only OpenGL 3 is available 2025-08-09 19:13:45 +02:00
WerWolv
e6f46747b6 fix: Add missing Updates path to About screen 2025-08-09 17:59:01 +02:00
WerWolv
c30830a8ff impr: Added Tabler Icons font 2025-08-09 17:55:39 +02:00
WerWolv
45b08b6010 impr: Enable some of the new ImGui configs 2025-08-09 16:22:07 +02:00
WerWolv
c88fc43032 fix: Crash on exit if update folder doesn't exist 2025-08-09 16:21:51 +02:00
Artem Garmash
08a08c2b3a impr: Better "File too large" banner wording (#2394)
Improve the wording of the localized string
2025-08-09 15:08:05 +02:00
WerWolv
411e971ba7 impr: Properly delete old update files 2025-08-09 14:28:48 +02:00
WerWolv
dbc5819bc4 fix: Handling of unchanged shortcut keys 2025-08-09 14:23:36 +02:00
Ivor Wanders
93a71120d4 fix: Initialise splash window with correct size (#2390)
With an initial Window size of 1 by 1, the program aborts during launch
on my Debian 12 (bookworm) system running the Mate Desktop environment
on X11.


The exception from X is the following:
```
$ ./imhex
[18:36:33] [INFO]  [main | Main]                Welcome to ImHex 1.38.0.WIP!
[18:36:33] [INFO]  [main | Main]                Compiled using commit master@59c6d30
[18:36:33] [INFO]  [main | Main]                Running on Linux 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) (x86_64)
[18:36:33] [INFO]  [main | Main]                Linux distribution: Debian GNU/Linux 12 (bookworm). Version: 12
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  18 (X_ChangeProperty)
  Resource id in failed request:  0x5400009
  Serial number of failed request:  152
  Current serial number in output stream:  163
```

The culprit is in `hex::init::WindowSplash::initGLFW()`, specifically
the `glfwCreateWindow` call with a window size of 1 by 1, that's the
last call in the ImHex codebase, after that it's libglfw and libX11.

The issue can be worked around by inhibiting the splash screen using the
`IMHEX_SKIP_SPLASH_SCREEN=1` environment variable, setting the window to
be a size larger than 1 by 1 also seems to resolve the situation.

My hunch is that an underflow occurs somewhere with the smaller values,
but I did no further investigation into analysing the root cause.

----
Above the line is the commit message.

### Problem description
See https://github.com/WerWolv/ImHex/issues/2215, which I think is the
same problem, and commit description above. Edit; I did another search
in the issues, I wouldn't be surprised if #2233 is a duplicate of the
2215 issue.

### Implementation description
Please see the commit message.

Analysis was done by setting an X11 error handler, making that throw and
running it in a debugger. This is available in this dev commit;
4a24e16a2ef100a9417e572f6b16c4a95711e94e.

### Screenshots
No apparent glitches if I make the splash window stick around with
`return std::nullopt;` in the `loop()` function. I don't know if there's
an issue at the beginning, but given that the window is set to
transparent before it is created and resized I don't expect any.

Here's a compulsory screenshot of the splash screen over an editor;

<img width="1247" height="666" alt="image"
src="https://github.com/user-attachments/assets/8ce05565-f207-4134-892d-9c074c4c840c"
/>


### Additional things
> Anything else you would like to say

Yes! I don't use ImHex often, but it's really useful when I do, thank
you!
2025-08-09 14:12:22 +02:00
WerWolv
d683c04519 fix: ID and layout issues with static array members in the pattern data view
Fixes #2393
2025-08-09 14:09:32 +02:00
WerWolv
a403980976 feat: Added update to Nighly/Stable release option 2025-08-09 12:25:22 +02:00
WerWolv
5c3dfa08b2 impr: Open correct release page in browser if updater fails 2025-08-09 12:15:40 +02:00
WerWolv
fd2d50508b fix: Update nightly update detection logic to work with release changes 2025-08-09 12:10:25 +02:00
paxcut
14ee688629 fix: fixes for issues #2388 and #2389. (#2392)
Tab insertion was not being recorded for undoing and the shift-backspace
shortcut did not exist. This PR addresses both issues directly.
2025-08-09 03:03:08 -07:00
WerWolv
9e4557d90d git: Rename snap artifacts to match the naming of all other artifacts 2025-08-09 11:31:11 +02:00
WerWolv
d9810982ad git: Don't pull all submodules 2025-08-09 11:10:46 +02:00
WerWolv
282d950423 git: Move into correct folder to do git operations 2025-08-09 11:01:15 +02:00
WerWolv
cd5b16cce5 fix: Another missing include 2025-08-09 10:34:09 +02:00
WerWolv
cc1ac95af6 fix: Missing include 2025-08-09 10:23:35 +02:00
WerWolv
b14fa24836 git: Don't always create a new release for every nightly 2025-08-09 10:22:22 +02:00
WerWolv
59c6d3090b fix: Clang doesn't support std::chrono::parse() yet 2025-08-08 23:32:07 +02:00
WerWolv
1e809214b2 git: Updated readme 2025-08-08 23:07:10 +02:00
WerWolv
56ec07e316 build: Improve LTO and PCHs 2025-08-08 22:56:50 +02:00
WerWolv
ce66f3a98a build: Fix remaining missing includes 2025-08-08 22:56:21 +02:00
WerWolv
5d180bdbfb build: Fix multiple missing includes 2025-08-08 22:48:31 +02:00
WerWolv
d922dbe04c impr: Make Bold and Italic button icons configurable though localizations 2025-08-08 22:46:47 +02:00
WerWolv
1fc6ec28c2 impr: Added search icon to the search bar button 2025-08-08 22:37:51 +02:00
WerWolv
ec6ff1d7d5 impr: More consistent look for the bookmark view 2025-08-08 22:36:58 +02:00
WerWolv
ad87f005fe feat: Added command line palette option to open/focus views 2025-08-08 22:36:46 +02:00
paxcut
df1e97af0a improv: further reformatting of text editor in an effort to bring it into the ui plugin. (#2385)
Added the ui namespace and broke the main rendering function into a set
of smaller functions. Reorganized the header code separating functions
into rough groups that eventually will be in separate files.
2025-08-08 12:47:52 -07:00
WerWolv
82ceb2e11f impr: Better auto updater, added support for updating nightlies 2025-08-08 21:25:52 +02:00
WerWolv
9698232f69 git: Fix nightly release notes generation 2025-08-08 19:09:41 +02:00
WerWolv
b1867aac92 build: Fixed precompiled header build 2025-08-08 17:47:48 +02:00
WerWolv
09bc5b92f6 impr: Make font bold icon look more bold 2025-08-08 17:47:24 +02:00
WerWolv
725462b222 fix: Diffing task not being properly cancelable
Fixes #2383
2025-08-08 17:47:15 +02:00
WerWolv
a9faba5cec git: Properly set version variable in nightly release CI 2025-08-08 17:46:11 +02:00
WerWolv
5a318da8ca git: Fix nightly release action file paths 2025-08-07 23:53:12 +02:00
WerWolv
5bc8366749 git: Checkout repo properly in nightly release CI 2025-08-07 23:46:54 +02:00
WerWolv
6200036014 git: Don't fail if artifacts.tar doesn't exist 2025-08-07 23:43:28 +02:00
WerWolv
38b891bd62 git: Added nightly release CI 2025-08-07 23:40:15 +02:00
WerWolv
a22c606e42 impr: Swap byte distribution graph X and Y axis, remove mouse text 2025-08-07 21:48:37 +02:00
WerWolv
dc0473e48d impr: Replace mentions of "Providers" with "Data Sources" for clarity 2025-08-07 21:30:16 +02:00
WerWolv
71f5373ea8 impr: Added recent entry tooltips 2025-08-07 21:29:58 +02:00
WerWolv
bd4ce72800 impr: Replace store buttons with icon buttons 2025-08-07 17:09:29 +02:00
WerWolv
d39d33de32 fix: Inconsistent look of welcome screen hyperlinks 2025-08-07 17:09:07 +02:00
WerWolv
7c07f70afd fix: AlmaLinux doesn't seem to support fmt::println yet 2025-08-07 17:08:38 +02:00
WerWolv
de67d5942b fix: Broken formatting in unit tests 2025-08-07 08:26:35 +02:00
WerWolv
f358069cc1 feat: Allow plugins to add their own welcome screen quick settings, improve UI 2025-08-06 22:51:59 +02:00