Seer: Linux के लिए GDB का GUI फ्रंट एंड
(github.com/epasveer)- Seer Linux पर GDB को GUI से चलाने के लिए एक फ्रंटएंड है, और GDB के लिए सरल व आकर्षक GUI देने के लक्ष्य के साथ सक्रिय रूप से विकसित हो रहा है
- इंस्टॉलेशन पैकेज मैनेजर या source build से किया जा सकता है, और आवश्यकताएँ हैं Linux, C++17, MI interpreter support वाला GDB, CMake 3.5.0 या उससे ऊपर, Qt6
- Qt5 अब नवीनतम source tree में compile नहीं होता; 2.3 source tree Qt5 से compile हो सकने वाला आखिरी tree है और v1.17 आखिरी Qt5 release है
- Seer GUI में source navigation, variable/register display, breakpoint/watchpoint/catchpoint/printpoint management, stack/thread view, और GDB reverse debugging देता है
- अतिरिक्त features के रूप में assembly view, memory/array/struct/image visualization, और executable program input/output console देता है, जिससे GDB debugging कार्यों को visually handle किया जा सकता है
प्रोजेक्ट का अवलोकन
- Seer Linux के लिए GDB GUI frontend है
- लक्ष्य GDB के लिए सरल और दिखने में अच्छा GUI प्रदान करना है
- प्रोजेक्ट सक्रिय रूप से विकसित हो रहा है, और bugs या मनचाहे features ईमेल या GitHub issues के जरिए भेजे जा सकते हैं
इंस्टॉलेशन और आवश्यकताएँ
- Seer को package manager या source build से install किया जा सकता है
- आवश्यकताएँ:
- Linux
- C++17
miinterpreter को support करने वाला GDB- जाँच command:
gdb --interpreter=mi
- जाँच command:
- CMake 3.5.0 या उससे ऊपर
- Qt6
- source से build करते समय distribution के अनुसार Qt6 development packages चाहिए
- आवश्यक Qt6 modules हैं Core, Gui, Widgets, PrintSupport, Charts, Svg
- Qt6 build guide: Building Seer - Qt6
- Qt5 से जुड़ी सीमाएँ:
-
Seer अब Qt5 से compile नहीं होता
- 2.3 source tree Qt5 से compile हो सकने वाला आखिरी tree है
- Qt5 build guide: Building Seer - Qt5
-
पैकेज इंस्टॉलेशन के रास्ते
- Manjaro का Pamac:
pamac install seer
- openSUSE Tumbleweed का zypper:
zypper install seergdb
- Flathub:
- io.github.epasveer.seer
flatpak install flathub io.github.epasveer.seer
- Flatpak beta version:
- Seer release page
seer.flatpakडाउनलोड करके install करेंGDB Launcherमें GDB चलाने के लिएflatpak-spawn --hostकी जरूरत होती है
Releases और Qt transition
- नई जानकारी Seer Wiki पर देखी जा सकती है
- v1.17 आखिरी Qt5 release है
- अगला release v2.0 है और Qt6 आधारित है
- कुछ समय तक Qt5 से भी compile किया जा सकेगा, लेकिन अगर latest stable Qt5 source चाहिए तो v1.17 इस्तेमाल करना होगा
चलाने का तरीका
- Seer command line से debug किए जाने वाले program को आसानी से शुरू करने के लिए बनाया गया है
- चूँकि GDB program debugging को कई तरीकों से support करता है, Seer भी कई launch methods देता है
- चलाने का तरीका Starting Seer wiki में देखा जा सकता है
Main GUI structure
-
Source/Function/Types/Variables/Libraries
- program में इस्तेमाल source और header files की सूची दिखाता है
- functions, types, static variables को search किया जा सकता है
- double-click करने पर source file खोली जा सकती है
- program जिन shared libraries को refer करता है उनकी सूची दिखाता है
- source/header files की सूची search से दिखने वाले items कम किए जा सकते हैं
-
Variable/Register Info
- variables और registers की values दिखाता है
- Logger variable values को record करता है
- Tracker हर बार GDB के step, next, finish जैसे stop points पर पहुँचने पर specified variables की values दिखाता है
- Registers सभी CPU registers की values दिखाता है
-
Code Manager
- Seer GUI के केंद्र में बड़ा area है और source files को tabs में दिखाता है
^Fसे file के अंदर text search किया जा सकता है- variable name पर double-click करके उसे Logger में जोड़ा जा सकता है
CTRLdouble-click variable के आगे*जोड़ता हैSHIFTdouble-click variable के आगे&जोड़ता हैCTRL+SHIFTdouble-click variable के आगे*&जोड़ता है
- right-click menu से variable को Tracker या Memory Visualizer में जोड़ा जा सकता है
- किसी खास line पर breakpoint या printpoint बनाया जा सकता है
- किसी खास line तक execution किया जा सकता है
- tabs को double-click से अलग किया जा सकता है
Debugging control और execution state view
- नीचे वाला area breakpoints, watchpoints, catchpoints, printpoints, manual GDB commands, logs को handle करता है
- manual command tab में GDB या GDB/MI commands सीधे enter किए जा सकते हैं
- enter की गई commands Seer के अगले उपयोग के लिए याद रखी जाती हैं
- Breakpoint manager breakpoints बनाता और manage करता है
- Watchpoint manager variable access को monitor करता है
- read, write, read/write को monitor किया जा सकता है
- Catchpoint manager C++ के throw, rethrow, catch calls पर execution रोकता है
- Printpoint manager GDB के
dprintfकी तरह किसी खास point पर variables print कर सकता है - GDB output GDB program के अपने output को record करता है
- Seer output Seer program के diagnostic output को record करता है
- Stack frame जानकारी:
- frame list पर double-click करके current function scope बदला जा सकता है
- हर frame के function arguments दिखाता है
- current function के local variable values दिखाता है
- Thread जानकारी:
- सभी thread IDs की सूची दिखाता है
- thread ID पर double-click करके current thread scope बदला जा सकता है
- हर thread के stack frames list करता है
- GDB के Reverse Debugging mode को support करता है
- command recording को on या off किया जा सकता है
- replay direction को forward या reverse पर set किया जा सकता है
Console और assembly view
- Seer Console executable file के सभी text output दिखाता है
- executable file के लिए text input भी console में enter किया जा सकता है
- Assembly View source code tabs के पास current running assembly दिखाने वाला tab जोड़ता है
View->Assembly Viewसे activate करें- assembly tab में भी breakpoints set किए जा सकते हैं
- current instruction highlighted होती है
- Breakpoints tab या Stack frames tab items पर double-click करने से उस address की assembly दिखाई जाती है
Nexti,Stepishortcuts support करता है और default आम तौर परCtrl+F5,CTRL+F6होते हैं- assembly tab में
^Fइस्तेमाल करने पर search bar दिखता है - यह assembly feature नया है और बदलावों व feature suggestions के लिए खुला है
Visualization tools
-
Memory Visualizer
- raw memory contents देखे जा सकते हैं
- memory और disassembly forms में देखा जा सकता है
-
Array Visualizer
- array contents को visualize करता है
- Normal, Spline, Scatter display methods देता है
- दो arrays को X-Y plot के रूप में इस्तेमाल किया जा सकता है
- example
pointsarray X-Y contour form बनाता है
-
Struct Visualizer
- C/C++ struct या C++ class contents दिखाता है
- example current C++ class के
*thiscontents दिखाता है - basic type वाले struct members edit किए जा सकते हैं
- Basic Struct Visualizer भी है, जो हल्का है लेकिन pointer follow नहीं कर सकता और editing भी नहीं कर सकता
-
Image Visualizer
- image वाली raw memory contents देखने के लिए इस्तेमाल किया जा सकता है
Support और संपर्क
- bugs या feature requests
epasveer@att.netपर भेजे जा सकते हैं या GitHub issues में दर्ज किए जा सकते हैं - issue दर्ज करें: GitHub issues
1 टिप्पणियां
Hacker News की राय
Linux पर Godot के साथ build करके थोड़ा इस्तेमाल किया। कुल मिलाकर ठीक है, लेकिन UI में widgets कुछ ज़्यादा ठूँसे हुए लगते हैं और यह थोड़ा कम polished दिखता है
editor font बदलना काम नहीं कर रहा था, और किसी variable पर mouse ले जाकर value देखने की कोशिश करने पर या तो कुछ नहीं होता था, या बहुत थोड़ी देर के लिए cursor बदलता था और फिर GDB यह error देता था कि उसने type/keyword वाले expression का इस्तेमाल करने की कोशिश की
variable पर double-click करने से current value और timestamp किसी panel में जुड़ जाते हैं, इसलिए UI में value/expression पढ़ने की क्षमता तो मौजूद है, लेकिन tooltip वाली implementation टूटी हुई लगती है
थोड़ा polish कर दिया जाए तो यह उपयोगी हो सकता है, लेकिन अब तक जिन front-end को आज़माया है उनमें मुझे सबसे कम नापसंद Gede लगा। UI सरल और सहज है, और features बहुत ज़्यादा नहीं हैं फिर भी जो features exposed हैं वे आम तौर पर बिना bug के अच्छी तरह काम करते हैं: https://gede.dexar.se/
settings को permanent save करने के लिए “Save Configuration...” करना पड़ता है। variable value की mouse-over display भी test करूँगा, और bugs या feature requests GitHub issues में डाल दें तो अच्छा रहेगा
GDB में हैरानी की बात है कि इस्तेमाल में आसान built-in text user interface (TUI) भी है। यह mouse interaction तक support करता है: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI.h...
.gdbinitमें इस तरह डाल सकते हैंtui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1tui layout defaulttui enableकई GDB front-end इस्तेमाल करने के बाद मुझे लगता है कि TUI सबसे अच्छा है। जब program output print करके interface बिगाड़ दे, तो redraw करने के लिए बस
Ctrl + Lजानना काफी है$XDG_CONFIG_HOME/gdb/gdbinitमें मैं बस नीचे वाला डालता हूँlayout srcset confirm offset prompt \001\033[01;36m\002(gdb)\001\033[0m\002history ऐसे save करता हूँ
set history save onset history size 500000set history filename ~/.cache/gdb/historygdb-dashboardकाफी इस्तेमाल किया है और recommend करता हूँ। यह TUI जैसा है, लेकिन दिखाने वाली जानकारी को अलग-अलग तरह से चुनकर रख सकते हैं, और colors की वजह से output बहुत ज़्यादा readable हो जाता हैdashboard को किसी दूसरे terminal में या कई terminals में बाँटकर भी दिखा सकते हैं, जिससे बेहतर window layout बन सकता है। पहले मैंने tmux से terminal layout auto-generate करने और GDB से connect कराने के लिए script लिखी थी; मेहनत काफी लगती है, लेकिन काफी अच्छा layout बन सकता था
Ctrl + LTUI जैसी चीज़ों में ज़रूर पता होना चाहिए, इसमें Vim screen टूटने की स्थिति भी शामिल है। यह जानने के बाद मेरी कई रहस्यमयी “crashes” solve हो गईंWindows से Linux से connect किए हों या WSL इस्तेमाल कर रहे हों, तब भी WinDBG/VisualStudio से Linux process को remote debug किया जा सकता है
यह GDB के लिए Qt UI है
मेरी जानकारी में GDB के लिए web-based UI gdbgui भी है: https://www.gdbgui.com/
debugging tools के क्षेत्र में और movement होना हमेशा अच्छा है
इसमें अभी भी ऐसी कई चीज़ें missing हैं जो कुछ use cases के लिए जरूरी हो सकती हैं। वजह यह है कि मेरा usage मुख्य रूप से assembly-level debugging है, इसलिए मुझे बहुत fancy features की ज़रूरत नहीं पड़ी
2 साल पहले भी मध्यम आकार की चर्चा हुई थी: https://news.ycombinator.com/item?id=33044885
अगर आप Emacs यूज़र हैं, तो GUD काफ़ी बढ़िया GDB इंटीग्रेशन है
सिर्फ़ इसलिए इस महीने के नए editor को आज़माते रहने की वजह नहीं कि उसने कुछ खिलौना-जैसे फीचर जोड़ दिए हैं। Emacs में एक plugin डालो, वही फीचर मिल जाता है और बाकी सब मेरी पसंद के तरीके से वैसा ही रहता है
Atom के दौर में मैं coding में सच में गहराई से उतरा था, और Atom के गायब होकर VS Code बन जाने का मुझे काफ़ी अफ़सोस हुआ। VS Code अच्छा है, लेकिन वह Atom जैसी philosophy follow नहीं करता
करीब 4 साल पहले Emacs सीखने के बाद से किसी नए tool ने मुझे यह नहीं समझाया कि “यह पुरानी technology है, इसलिए switch कर लेना चाहिए।” यह अचानक लंबा भाषण हो गया, लेकिन Emacs के लगातार ज़िंदा बने रहने के लिए मैं सच में आभारी हूँ
M-x gud-gdbकी तुलना में मुझे Emacs का GDB Graphical Interface, यानीM-x gdb, ज़्यादा पसंद हैहाल में lldb चलाने के लिए मुझे GUD पर switch करना पड़ा, और breakpoints, threads, current stack वगैरह दिखाने वाली dedicated windows की कमी महसूस हुई
GUD की अच्छी बात यह है कि debugger अलग होने पर भी interface consistent रहता है। इसलिए pdb से Python debug करने के बाद lldb से C++ debug करते समय keyboard shortcuts फिर से सीखने की ज़रूरत नहीं पड़ती
https://www.gnu.org/software/emacs/manual/html_node/emacs/GD...
https://www.gnu.org/software/emacs/manual/html_node/emacs/St...
debugpy के साथ इस्तेमाल करने पर मैंने
M-x pdbइस्तेमाल करना छोड़ दिया, और UI भीM-x gdbसे बहुत मिलता-जुलता हैlsp-mode+dap-modeभी अच्छी तरह काम करता है, लेकिनlaunch.jsonfile को कुछ हद तक खुद edit करना पड़ता हैअच्छा है। पहली बार देखने पर जादू जैसा लगा था, वही DDD याद आ गया। हैरानी है कि DDD अब भी maintain हो रहा है
https://en.wikipedia.org/wiki/Data_Display_Debugger
https://www.gnu.org/software/ddd/
सालों की बातचीत को देखें तो DDD विरोधाभासी ढंग से एक बेहतरीन anti-marketing tool था, जिसने developers को उनके पसंदीदा IDE के built-in debugger UI की तरफ धकेल दिया। यह सच है कि DDD खुद बहुत powerful है, लेकिन “usefulness aesthetics से ज़्यादा important है” की भी एक सीमा होती है
article लिखने के बाद maintainers ने मेरे बताए issues ठीक कर दिए, इसलिए अब कई workarounds की ज़रूरत नहीं रहती। 3.4.0 और 3.4.1 काफ़ी बड़े releases हैं
पहले GTK3 में port करने की एक project थी, लेकिन लगता है वह गायब हो गई। फिर भी अच्छा है कि mainline project जारी है
फिर भी लगता है किसी ने इसे GitHub पर ले जाकर revive किया और थोड़ा काम किया है: https://github.com/antony-jr/insight
पुराने Sun Microsystems machines पर इस्तेमाल किए जाने वाले dbxtool जैसा कुछ ढूँढते हुए मुझे DDD मिला था। आजकल लोगों को source-level debugging जैसी चीज़ों की वजह से काफ़ी luxury मिली हुई है
GNU project और RMS का meme की तरह काफ़ी मज़ाक उड़ाया जाता है, लेकिन GDB एक powerful tool है। मैंने खुद इसे थोड़ा ही छुआ है, लेकिन लगता है कि इसने सालों तक developers के काम पर जबरदस्त असर डाला है
10 साल से ज़्यादा पहले Linux पर C++ लिखते समय मैं built-in debugger वाले Qt Creator का इस्तेमाल करता था। यह GDB frontend है, बहुत अच्छे से काम करता था, और C++ व Qt के लिए मुझे कुछ और इस्तेमाल करने की वजह नहीं लगी