3 पॉइंट द्वारा GN⁺ 2024-11-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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
    • mi interpreter को support करने वाला GDB
      • जाँच command: gdb --interpreter=mi
    • 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:
  • 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 में जोड़ा जा सकता है
      • CTRL double-click variable के आगे * जोड़ता है
      • SHIFT double-click variable के आगे & जोड़ता है
      • CTRL+SHIFT double-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, Stepi shortcuts 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 points array X-Y contour form बनाता है
  • Struct Visualizer

    • C/C++ struct या C++ class contents दिखाता है
    • example current C++ class के *this contents दिखाता है
    • 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 टिप्पणियां

 
GN⁺ 2024-11-16
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/

    • मैं Seergdb का author हूँ। editor font setting काम नहीं कर रही, इस बारे में थोड़ा और समझा सकें तो अच्छा होगा; tests में यह काम करती दिख रही है
      settings को permanent save करने के लिए “Save Configuration...” करना पड़ता है। variable value की mouse-over display भी test करूँगा, और bugs या feature requests GitHub issues में डाल दें तो अच्छा रहेगा
    • अपने code के bugs ढूँढते समय मैं debugging tool के bugs से भी नहीं जूझना चाहता, इसलिए अगली बार debugging की ज़रूरत पड़े तो Gede आज़माने के लिए note कर लिया है
  • GDB में हैरानी की बात है कि इस्तेमाल में आसान built-in text user interface (TUI) भी है। यह mouse interaction तक support करता है: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI.h...

    • निजी तौर पर मैं TUI के बजाय command line पसंद करता हूँ, लेकिन .gdbinit में इस तरह डाल सकते हैं
      tui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1
      tui layout default
      tui enable
    • Neovim + nvim-dap + nvim-dap-ui + gdb का combination इससे कहीं बेहतर लगा
    • अफसोस, यह तभी काम करता है जब GDB को TUI support के साथ build किया गया हो
  • कई GDB front-end इस्तेमाल करने के बाद मुझे लगता है कि TUI सबसे अच्छा है। जब program output print करके interface बिगाड़ दे, तो redraw करने के लिए बस Ctrl + L जानना काफी है
    $XDG_CONFIG_HOME/gdb/gdbinit में मैं बस नीचे वाला डालता हूँ
    layout src
    set confirm off

    • color prompt के लिए मुझे इसे इस्तेमाल करना पसंद है
      set prompt \001\033[01;36m\002(gdb)\001\033[0m\002
      history ऐसे save करता हूँ
      set history save on
      set history size 500000
      set history filename ~/.cache/gdb/history
    • मैंने gdb-dashboard काफी इस्तेमाल किया है और recommend करता हूँ। यह TUI जैसा है, लेकिन दिखाने वाली जानकारी को अलग-अलग तरह से चुनकर रख सकते हैं, और colors की वजह से output बहुत ज़्यादा readable हो जाता है
      dashboard को किसी दूसरे terminal में या कई terminals में बाँटकर भी दिखा सकते हैं, जिससे बेहतर window layout बन सकता है। पहले मैंने tmux से terminal layout auto-generate करने और GDB से connect कराने के लिए script लिखी थी; मेहनत काफी लगती है, लेकिन काफी अच्छा layout बन सकता था
    • Ctrl + L TUI जैसी चीज़ों में ज़रूर पता होना चाहिए, इसमें Vim screen टूटने की स्थिति भी शामिल है। यह जानने के बाद मेरी कई रहस्यमयी “crashes” solve हो गईं
    • gef tmux support करता है, इसलिए program output किसी दूसरे tmux panel में जाता है
    • Emacs के अंदर gud-gdb front-end काफी सुविधाजनक और इस्तेमाल में आसान है
  • Windows से Linux से connect किए हों या WSL इस्तेमाल कर रहे हों, तब भी WinDBG/VisualStudio से Linux process को remote debug किया जा सकता है

    • remote side पर gdbserver चल रहा हो तो काफी नहीं है क्या?
  • यह GDB के लिए Qt UI है
    मेरी जानकारी में GDB के लिए web-based UI gdbgui भी है: https://www.gdbgui.com/
    debugging tools के क्षेत्र में और movement होना हमेशा अच्छा है

    • Qt Creator में GDB का बिना जटिल setup के काम करना मुझे अच्छा लगता है। कुछ breakpoints लगाइए और run दबाइए, IDE बाकी संभाल लेता है
    • GDB GUI की list में एक और जोड़ना हो तो मेरा बनाया हुआ भी है: https://github.com/dzaima/grr
      इसमें अभी भी ऐसी कई चीज़ें missing हैं जो कुछ use cases के लिए जरूरी हो सकती हैं। वजह यह है कि मेरा usage मुख्य रूप से assembly-level debugging है, इसलिए मुझे बहुत fancy features की ज़रूरत नहीं पड़ी
    • DDD भी है। यह Motif front-end है
    • VS Code में भी अच्छा GDB front-end है, और embedded microcontroller debug करते समय खासकर अच्छा है
    • web-based debugger की बात चली है तो, हाल ही में मैंने x86-64 assembly debugging पर focused एक similar project बनाया है: https://github.com/robalb/x86-64-playground
  • 2 साल पहले भी मध्यम आकार की चर्चा हुई थी: https://news.ycombinator.com/item?id=33044885

  • अगर आप Emacs यूज़र हैं, तो GUD काफ़ी बढ़िया GDB इंटीग्रेशन है

    • LSP आने के बाद से Emacs मुझे बाकी हर चीज़ से बेहतर लगने लगा है। छोड़ने की कोई वजह नहीं। खासकर native compilation से तेज़ होने के बाद तो और भी नहीं
      सिर्फ़ इसलिए इस महीने के नए editor को आज़माते रहने की वजह नहीं कि उसने कुछ खिलौना-जैसे फीचर जोड़ दिए हैं। Emacs में एक plugin डालो, वही फीचर मिल जाता है और बाकी सब मेरी पसंद के तरीके से वैसा ही रहता है
      Atom के दौर में मैं coding में सच में गहराई से उतरा था, और Atom के गायब होकर VS Code बन जाने का मुझे काफ़ी अफ़सोस हुआ। VS Code अच्छा है, लेकिन वह Atom जैसी philosophy follow नहीं करता
      करीब 4 साल पहले Emacs सीखने के बाद से किसी नए tool ने मुझे यह नहीं समझाया कि “यह पुरानी technology है, इसलिए switch कर लेना चाहिए।” यह अचानक लंबा भाषण हो गया, लेकिन Emacs के लगातार ज़िंदा बने रहने के लिए मैं सच में आभारी हूँ
    • GUD के ज़रिए मिलने वाले basic integration 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...
    • dape(https://github.com/svaante/dape#) उन languages के लिए अच्छा विकल्प है जिनके पास Debug Adapter Protocol implement करने वाला debugger है
      debugpy के साथ इस्तेमाल करने पर मैंने M-x pdb इस्तेमाल करना छोड़ दिया, और UI भी M-x gdb से बहुत मिलता-जुलता है
    • lsp-mode + dap-mode भी अच्छी तरह काम करता है, लेकिन launch.json file को कुछ हद तक खुद edit करना पड़ता है
  • अच्छा है। पहली बार देखने पर जादू जैसा लगा था, वही DDD याद आ गया। हैरानी है कि DDD अब भी maintain हो रहा है
    https://en.wikipedia.org/wiki/Data_Display_Debugger
    https://www.gnu.org/software/ddd/

    • 20 साल पहले university में DDD सीखा था, और तब भी वह पहले से ही भद्दा/कच्चा-सा लगता था। अब मैं उसे कहीं ज़्यादा उदार नज़र से देखता हूँ, लेकिन Motif अब भी आँखों को खटकता है
      सालों की बातचीत को देखें तो DDD विरोधाभासी ढंग से एक बेहतरीन anti-marketing tool था, जिसने developers को उनके पसंदीदा IDE के built-in debugger UI की तरफ धकेल दिया। यह सच है कि DDD खुद बहुत powerful है, लेकिन “usefulness aesthetics से ज़्यादा important है” की भी एक सीमा होती है
    • बेशक DDD maintain हो रहा है। इसके features के बारे में मैंने यहाँ लिखा था: https://begriffs.com/posts/2022-07-17-debugging-gdb-ddd.html
      article लिखने के बाद maintainers ने मेरे बताए issues ठीक कर दिए, इसलिए अब कई workarounds की ज़रूरत नहीं रहती। 3.4.0 और 3.4.1 काफ़ी बड़े releases हैं
    • DDD में अलग-अलग तरह की graphical visualizations built-in होना मुझे पसंद है। खासकर data structures visualize करने वाला feature मुझे हमेशा शानदार लगा
      पहले GTK3 में port करने की एक project थी, लेकिन लगता है वह गायब हो गई। फिर भी अच्छा है कि mainline project जारी है
    • मुझे अपना पसंदीदा GDB frontend Insight याद आता है, जो cygwin के दिनों में Windows पर अच्छे से काम करता था। दुर्भाग्य से यह पक्का है कि अब maintain नहीं होता: https://sourceware.org/insight/screenshots.php
      फिर भी लगता है किसी ने इसे GitHub पर ले जाकर revive किया और थोड़ा काम किया है: https://github.com/antony-jr/insight
    • DDD शानदार है। मैं अब भी इसे इस्तेमाल करता हूँ, लेकिन मैं fossil जैसा इंसान हूँ
      पुराने Sun Microsystems machines पर इस्तेमाल किए जाने वाले dbxtool जैसा कुछ ढूँढते हुए मुझे DDD मिला था। आजकल लोगों को source-level debugging जैसी चीज़ों की वजह से काफ़ी luxury मिली हुई है
  • GNU project और RMS का meme की तरह काफ़ी मज़ाक उड़ाया जाता है, लेकिन GDB एक powerful tool है। मैंने खुद इसे थोड़ा ही छुआ है, लेकिन लगता है कि इसने सालों तक developers के काम पर जबरदस्त असर डाला है

    • सच में जानना चाहता हूँ, GNU का मज़ाक किस वजह से उड़ाया जाता है?
  • 10 साल से ज़्यादा पहले Linux पर C++ लिखते समय मैं built-in debugger वाले Qt Creator का इस्तेमाल करता था। यह GDB frontend है, बहुत अच्छे से काम करता था, और C++ व Qt के लिए मुझे कुछ और इस्तेमाल करने की वजह नहीं लगी