kdbg-2.5.5/000077500000000000000000000000001247243200200124265ustar00rootroot00000000000000kdbg-2.5.5/BUGS000066400000000000000000000002751247243200200131150ustar00rootroot00000000000000Here is an unsorted list of known deficiencies of kdbg. - Handles only C and C++ - Cannot handle source file names which contain new-lines or a sequence of the form :[0-9]+:[0-9]+:beg kdbg-2.5.5/CMakeLists.txt000066400000000000000000000006241247243200200151700ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.6) set(KDBG_VERSION 2.5.5) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kdbg/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kdbg/version.h) find_package(KDE4 REQUIRED) add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) include(KDE4Defaults) include(MacroLibrary) #include(ManualStuff.cmake) #include(ConfigureChecks.cmake) add_subdirectory(kdbg) add_subdirectory(po) kdbg-2.5.5/COPYING000066400000000000000000000354511247243200200134710ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS kdbg-2.5.5/ChangeLog-pre-2.2.0000066400000000000000000000271771247243200200154370ustar00rootroot00000000000000Later versions Please use the gitweb log at http://repo.or.cz/w/kdbg.git to browse the changes. Version 2.0.4 Fixed encoding of the Czech translation thanks to Jakub Galgonek. Added support for QString in Qt4's debug libraries. Fixed that the debugger window really comes to the foreground and receives the focus when the debuggee stops at a breakpoint, when this option is on (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=171845). Added a filter edit box to the Attach to Process dialog to improve usability. Version 2.0.3 Fixed parsing of gdb output that mentions "operator<<", "operator>>", "operator<", and "operator>" within text delimited by angle brackets <>. This fixes a crash when any such function is disassembled and other misbehaviors. Fixed parsing stack frames that mention "operator<<" or "operator<". Thanks to Charles Samuels, who pointed out the problem and provided an initial fix. Version 2.0.2 Fixed stack display for functions in an anonymous namespace and for functions whose names involve template parameter lists (thanks to Andr矇 W繹bbeking). Fixed environment list which would add back the entry from the edit box even if it was just deleted. Fixed that the Run/Continue button was enabled while the program was running. Fixed parsing of NaN (Not a Number) floating point values. Version 2.0.1 Updated Hungarian translation (thanks to Tamas Szanto). Worked around gdb 6.3 crashes at "info line main" command (thanks to Stefan Taferner). Updated XSLT debugger parser for xsldbg >= 3.4.0 (by Keith Isdale). Version 2.0.0 References and const types are treated like the base type (thanks to Shaheed). Fixed parsing of large arrays with many different values, which were terminated by "...". Fixed the kdbg.desktop file: Encoding is UTF-8, install in XDG menu location. Fixed PS_COMMAND detection for Solaris' /bin/sh. Version 1.9.7 Added a new animated button in the toolbar. Fixed Norwegian translation file names. Version 1.9.6 "" in register dumps was not parsed correctly. Fixed that variable popup location was computed incorrectly if tab width is not 0. Updated the manual. Implemented printing of Qt4's QStrings. Version 1.9.5 Fixed some issues when the items in the environment variable list are selected. Added a command line option to attach to a process (thanks to Matthew Allen for the initial code). Fixed the "Using host libthread_db" error message properly. Fixed inappropriate icon sizes. Version 1.9.4 Updated the build system to the latest auto* tools. Worked around the problem that gdb reports "Using host libthread_db" on Fedora Core when it processes the file command. Version 1.9.3 Improved editing of values; it is now possible to edit variables also in the watch window. Version 1.9.2 The previous security fix only protects against accidents, not attacks, as Matt Zimmerman pointed out. Did it right this time. Basic editing of values in the local variables window is available. More refinements are still necessary. Version 1.9.1 Fixed security flaw regarding the program specific debugger command. Configurable key bindings. Version 1.9.0 Program arguments that are file names can be browsed for. Added XSLT debugging (using xsldbg) by Keith Isdale. The program counter can be changed via point and click. Improved register formating by Daniel Kristjansson. "Orphaned breakpoints", i.e. breakpoints that gdb cannot set immediately, can be set. This helps debug shared libraries and dynamically loaded modules. Version 1.2.10 Fixed the "Using host libthread_db" error message. Fixed inappropriate icon sizes. Version 1.2.9 The previous security fix only protects against accidents, not attacks, as Matt Zimmerman pointed out. Did it right this time. Version 1.2.8 Fixed security flaw regarding the program specific debugger command. Version 1.2.7 Fixed parsing of stack frames for recent gdbs. Support vector registers (thanks to Daniel Thor Kristjansson for initial code). Work around bug in some gdbs which inhibits printing of QString values. Version 1.2.6 Opening the Find dialog no longer toggles a breakpoint. Make mouse wheel work (again) in source, variables, and watch windows. When a pointer to a struct is expanded the struct is also expanded. Improved toolbar and application icons. Version 1.2.5 Now compiles for KDE 3. Fixed make install for builddir != srcdir. Fixed status bar flicker. This gives a nice speed-up by a factor of 4 when the contents of an array of 50 QStrings are displayed! Version 1.2.4 Now compiles for KDE 3 (Beta1). Support QString of Qt 3.x. Improved (and fixed) the display of arrays with repeated values. Fixed crash when a file is reloaded while disassembled code is displayed. Fixed parsing of stack frames involving signal handler invocations. Version 1.2.3 Fixed invisible toolbar under KDE 2.x (really, this time, I promise). Fixed crash when no line has the cursor (empty files). Don't display a blank page when a non-existing file was tried to open. Version 1.2.2 Fixed a special, but common case where removing a breakpoint didn't work but add more on the same line instead (thanks to Ron Lerech). Fixed invisible toolbar under KDE 2.1.2 (thanks to Neil Butterworth). Fixed compilation for gcc 3.0 (thanks to Ben Burton): Fixed make install if srcdir != builddir. Changed encoding of German translations (and also Danish, Italian, Norwegian, Romanian, Slovak, Swedish) to UTF-8, which fixes message strings under KDE2 (at least for German - couldn't test the others). Version 1.2.1 Working directory can be browsed for. Added context menu to move the selected expression from the local variables window to the watch window. Fixed crash when environment variables are removed. Fixed problems with trailing backslashes in watched expressions. Fixed compilation on FreeBSD (openpty). Version 1.2.0 Translations for: Hungarian, Japanese, Norwegian (Nynorsk), Serbian, Turkish Updated the User's Manual (English, Russian (thanks, Ilmar!), German). Version 1.1.7beta1 Improved the program icon; made the installation more KDE2 compliant. Enabled mouse wheel scrolling at various places. Version 1.1.6 Added memory display. Single-stepping by instruction. Watchpoints. Finally! (On Linux/i386 works best with gdb 5!) Version 1.1.5 Made Delete key work in the watch window. Breakpoints can be enabled and disabled in the breakpoint list. Detach from debugged program on exit (and when new program is debugged). Added a list of recently opened executables (thanks to Thomas Sparr ). Version 1.1.4 Fixed endless loop on shutdown. Brought in line with KDE 1.91 (KDE 2 beta). Version 1.1.3 Debugging of multi-threaded programs. Requires a gdb that supports multi-threaded programs, like gdb 5. Debugger window pops into the foreground when the program stops. Made tab width a user-settable option. Version 1.1.2 Display disassembled code. Version 1.1.1 Use the KDE system fixed font for the source code window. By default, do not log communication with gdb. Added an integrated output window (based on code by Judin Max). Program specific settings can be set. In particular: the debugger command (required if you are debugging remote devices), the terminal emulation needed for the program. Verison 1.1.0 Use docking windows thanks to Judin Max . Added a register dump window. Based on code by Judin Max. Implemented "balloons" (tool tips) that show variable values. ./configure fix for NetBSD thanks to Berndt Josef Wulf . There's now a Swedish translation thanks to 琀jan Lindbergh . Version 1.0.2 Save and restore watched expressions. More adjustments for the KRASH release. Show count in QStrings like in normal C strings instead of repeating the characters. Use QListView instead of KTabListBox. Version 1.0.1 Added a hack to set a remote target. Thanks to Johnny Chan . Display function arguments. Based on suggestions by Johnny Chan. KDE 2 fixes. Support builddir != srcdir. Version 1.0.0 Brought up-to-date for latest KDE 2. Version 1.0beta3 Removal of minor misfeatures. Prepared for KDE 2 and Qt 2 (it's a configure option: --with-kde-version=2). Added Russian documentation (thanks to Ilmar S. Habibulin ) and German documentation. There is now a Spanish translation thanks to Manuel Soriano . Version 1.0beta2 Recognize strings with repeated characters: 'x' . Fix structs with no (additional) data members and other fixes for gdb 4.18. Save window size across sessions. There is now an Italian translation thanks to Massimo Morin . Version 1.0beta1 Fixed non-displaying QString (Qt2) with certain gdb 4.17's (at least mine here, of SuSE 6.1, had a problem :-) Fixed cases where gdb commands where executed after debuggee has exited. Do not execute gdb commands after an interrupt. Updated some translations. Still most are incomplete. Please help! There is now a Polish translation thanks to Jacek Wojdel . Version 0.3.1 The working directory for the program being debugged can be set (Execution|Arguments). There's now a global options dialog in place (File|Global Options). At the moment the debugger program (which must be gdb, but it could be an experimental gdb version, for example) and the terminal for program output can be specified. Fixed Makefiles to support make DESTDIR=/tmp/foo install (which is needed by packagers and to create relocatable RPMs). There's now a Danish translation thanks to Steen Rabol . Version 0.3.0 Starting with this version, Qt 1.42 and KDE 1.1 is required. Ported to Qt 2.0 and KDE post-1.1! KDbg now runs with both KDE 1.1 (using Qt 1.42) and the latest experimental KDE. You can of course run one version and debug programs written for the other version. KDbg can now display Qt 2.0's QString values (which are Unicode strings)! Environment variables can be set. Changes become effective the next time the program being debugged is run. The breakpoint list has been improved. It disables command buttons at times when it is not possible to change breakpoints. The icons that show the breakpoint status are now the same as those in the source window. Popup menus (context menus) for frequently used commands have been added to the source code window (thanks to Tom Nguyen ) There's now a Russian translation thanks to Ilmar Habibulin . Internal restructuring. These changes are invisible. They just make future extensions less cumbersome. Version 0.2.5 This is the last version that supports Qt 1.33 and KDE 1.0. There's now a Czech translation thanks to Martin Spirk . Recognize and report when gdb dies unexpectedly. This happens commonly when writing CORBA programs since gdb obviously has problems in debugging C++ classes with virtual base classes. Added conditional breakpoints and ignore counts. Version 0.2.4 Added a toolbar button to load the executable. The button to open a source file is still there. I hope it's clear which one does what. Attaching to a running process is now possible (Execution|Attach). Made more visible when gdb is busy using a gear wheel in the upper right corner of the window like kfm. Made the KTreeView widget more flexible by adding a bunch of virtual keywords. (No, this doesn't have any influence on the look and feel of KDbg.) While doing that, I fixed a small repainting bug. ChangeLog starts here. kdbg-2.5.5/README000066400000000000000000000010141247243200200133020ustar00rootroot00000000000000This is KDbg, a graphical user interface around gdb using KDE, the K Desktop Environment. To install: cmake -DCMAKE_INSTALL_PREFIX=/opt/kde4 . make sudo make install (Make sure your KDE is installed in /opt/kde4; adjust the path to suit your system. On some systems it is /usr.) Problem reports as well as success stories are welcome! The homepage is at http://www.kdbg.org/ You'll find the most recent version of KDbg there as well as other useful information concerning debugging. Johannes Sixt kdbg-2.5.5/ReleaseNotes-2.2.0000066400000000000000000000021331247243200200153760ustar00rootroot00000000000000KDbg Release Notes for version 2.2.0 ==================================== The 2.2.x series is still based on Qt 3 and KDE 3. Changes since 2.1.1 ------------------- Features: - Source code windows have now a tab attached, which makes switching source files much easier. - Source code windows now show line numbers at the left. - There are now "Find Next" and "Find Previous" commands with shortcuts F3 and Shift+F3. - Improved support of template types in the type tables (which are used to show structure members next to a structure variable). Notably, the number of elements in STL and Qt collection classes are shown. - Arguments for the debugged program can be passed on KDbg's command line. Bug fixes - An incorrect terminal command string setting could crash KDbg if it contained format specifiers other than exactly one '%s'. - The format specifier in the memory dump window was not correctly preserved when the expression is changed. - Setting a conditional breakpoint could crash KDbg. - Using Attach on systems that use the simplified Attach to Process dialog could crash KDbg. kdbg-2.5.5/ReleaseNotes-2.2.1000066400000000000000000000011041247243200200153740ustar00rootroot00000000000000KDbg Release Notes for version 2.2.1 ==================================== The 2.2.x series is still based on Qt 3 and KDE 3. Changes since 2.2.0 ------------------- Bug fixes - Compilation with newer glibc failed. - A crash could occur when the variable window was updated. - A crash when command line switch -a was used together with a non-existing executable name. - Syntax highlighting was applied to all files, not just C/C++. - The display was incorrect when a file was reloaded that had disassembly lines visible. There are also some minor documentation fixes. kdbg-2.5.5/ReleaseNotes-2.2.2000066400000000000000000000004221247243200200153770ustar00rootroot00000000000000KDbg Release Notes for version 2.2.2 ==================================== The 2.2.x series is still based on Qt 3 and KDE 3. Changes since 2.2.1 ------------------- There is only one bug fix: - An error message was shown instead of assembler code when gdb 7.1 was used. kdbg-2.5.5/ReleaseNotes-2.5.0000066400000000000000000000014571247243200200154110ustar00rootroot00000000000000KDbg Release Notes for version 2.5.0 ==================================== This release is based on KDE4 and Qt4. Changes since 2.2.2 ------------------- - A number of icons were exchanged with Oxygen icons. These are not part of KDbg's source code. - Session state per debugged program is now stored in a section in $KDEHOME rather than in a .kdbgrc file in the program's directory. This allows to debug programs that are located in unwritable directories. But this also means that earlier session information is disregarded. - More accurate parsing of GDB responses of various commands fixed bugs in certain areas, in particular, temporary breakpoints, register values, truncated struct values, disassembly (again). - "View Code" from the breakpoint list can open the source code in more cases. kdbg-2.5.5/ReleaseNotes-2.5.1000066400000000000000000000010401247243200200153760ustar00rootroot00000000000000KDbg Release Notes for version 2.5.1 ==================================== Changes since 2.5.0 ------------------- Minor feature enhancements - .hpp files undergo syntax highlighting. - Keys j and k can be used to move the cursor position in the source code. Bug fixes - Cooperation with newer GDB (7.2 and 7.3) is improved: . wchar_t strings as printed by GDB 7.2 are recognized; . the thread list was missing with GDB 7.3; . program exit was not detected (also GDB 7.3). - Enum values in anonymous namespaces are now recognized. kdbg-2.5.5/ReleaseNotes-2.5.2000066400000000000000000000004701247243200200154050ustar00rootroot00000000000000KDbg Release Notes for version 2.5.2 ==================================== Changes since 2.5.1 ------------------- Bug fixes - Support for GDB 7.5. - More of GDB's output is recognized in some corner cases - The thread list parser introduced in 2.5.1 sometimes stripped two letters from the function name. kdbg-2.5.5/ReleaseNotes-2.5.3000066400000000000000000000010671247243200200154110ustar00rootroot00000000000000KDbg Release Notes for version 2.5.3 ==================================== Changes since 2.5.2 ------------------- Bug fixes - Duplicated and breakpoints do not increase the list of breakpoints each time a session is started - Communication with a localized GDB works; this is achieved by setting LC_ALL=C, which is also propagated to the program being debugged. If The program needs a different locale, set it in Execution->Arguments, page Environment. - Fixed a crash in the memory window - Updates of the Russian and Croatian translations. kdbg-2.5.5/ReleaseNotes-2.5.4000066400000000000000000000011031247243200200154010ustar00rootroot00000000000000KDbg Release Notes for version 2.5.4 ==================================== Changes since 2.5.3 ------------------- Bug fixes - Source file names with international characters are handled better. - When an executable is loaded, GDBs of different vintage print different text, some of which were treated as error text incorrectly, leading to failed debugging sessions. More of these texts are now ignored. - Variables pointing to some global variable lacked the ability to be expanded with recent GDBs. - Parsing of string values residing in global variables was fixed. kdbg-2.5.5/ReleaseNotes-2.5.5000066400000000000000000000010211247243200200154010ustar00rootroot00000000000000KDbg Release Notes for version 2.5.5 ==================================== Changes since 2.5.4 ------------------- Bug fixes - A crash when the hotkey settings are changed was fixed. - The animation button was regenerated to avoid a crash with modern Qt. Thanks to Armin Felder for the initial fix. - Pretty-printers and GDB Python extensions were disabled, because they would interfere with the output parser. - Recent GDBs do not terminate on receipt of SIGTERM, keeping KDbg running for 20 seconds. This was fixed. kdbg-2.5.5/TODO000066400000000000000000000027561247243200200131300ustar00rootroot000000000000007. Show a list of files for the executable. 9. Use gnuclient to show source code in emacs. 10. Provide formatting options in watch window via mouse, not /FMT. 13. Remember which subtrees have been expanded even when function is left and reentered. 14. Speed up direct members by reusing values that are already available in members. 19. Improve support of breakpoints in source files having directories in their names. 22. Allow to change whether signals are handled or ignored. 24. Allow to view fewer or more bytes in the memory dump. Beautify the display. 25. Automatic single-stepping by instruction when a source line is disassembled. 26. Let the user hide some members of certain structures (on a per-type basis). The parent indicates whether all members are visible. Provide a context menu to display the hidden entries. Save the settings somewhere. 28. Better support for remote debugging and special versions of gdb, e.g. "target pilot localhost:2000". 29. "Crash report" function: Stack trace with excerpts of the source code and variable dumps for every frame. 30. Grey out watch window expressions if there are variables that are not in scope. 31. Show the memory dump in a combined ASCII and hex view. 32. Allow to manipulate memory in the memory dump window 33. Clear the status bar when the program is (re-)started (because if this takes some time, you don't know whether KDbg does something.) 35. Allow to copy variable values to the clipboard. 36. kdbg-2.5.5/kdbg.spec000066400000000000000000000030421247243200200142100ustar00rootroot00000000000000%define name kdbg %define version 2.5.4 %define release 1.kde4 %define prefix /usr %define src_dir %{name}-%{version} %define builddir $RPM_BUILD_DIR/%{name}-%{version} Summary: KDbg - KDE Debugging GUI around gdb Name: %{name} Version: %{version} Release: %{release} Prefix: %{prefix} Group: X11/KDE/Development License: GPL Distribution: RedHat 7.0 Vendor: Johannes Sixt Packager: Ullrich von Bassewitz Source: %{name}-%{version}.tar.gz URL: http://www.kdbg.org/ Requires: kdelibs >= 2.0 BuildRoot: /tmp/build-%{name}-%{version} %description KDbg is a graphical user interface to gdb, the GNU debugger. It provides an intuitive interface for setting breakpoints, inspecting variables, and stepping through code. %prep rm -rf $RPM_BUILD_ROOT rm -rf %{builddir} %setup touch `find . -type f` %build rm -f CMakeCache.txt cmake . -DCMAKE_INSTALL_PREFIX=/usr make -j4 %install if [ -z "$KDEDIR" ]; then export KDEDIR=%{prefix} fi rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install cd $RPM_BUILD_ROOT find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \ $RPM_BUILD_DIR/file.list.%{name} find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ -e '/\/config\//s|^|%config|' >> \ $RPM_BUILD_DIR/file.list.%{name} find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \ $RPM_BUILD_DIR/file.list.%{name} echo "%docdir $KDEDIR/share/doc/HTML" >> $RPM_BUILD_DIR/file.list.%{name} %clean rm -rf $RPM_BUILD_ROOT rm -rf %{builddir} rm -f $RPM_BUILD_DIR/file.list.%{name} %files -f ../file.list.%{name} kdbg-2.5.5/kdbg/000077500000000000000000000000001247243200200133355ustar00rootroot00000000000000kdbg-2.5.5/kdbg/CMakeLists.txt000066400000000000000000000051651247243200200161040ustar00rootroot00000000000000add_subdirectory(doc) add_subdirectory(pics) add_subdirectory(typetables) include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) include(CheckFunctionExists) CHECK_INCLUDE_FILES(pty.h HAVE_PTY_H) CHECK_INCLUDE_FILES(libutil.h HAVE_LIBUTIL_H) CHECK_INCLUDE_FILES(util.h HAVE_UTIL_H) CHECK_LIBRARY_EXISTS(util openpty "" HAVE_LIB_UTIL) if (HAVE_LIB_UTIL) set(CMAKE_REQUIRED_LIBRARIES util) endif (HAVE_LIB_UTIL) CHECK_FUNCTION_EXISTS(openpty HAVE_FUNC_OPENPTY) message("-- Looking for a suitable 'ps' invocation") FIND_PROGRAM(PROG_PS ps) IF (PROG_PS) set(PS_ARGS -eo pid,ppid,uid,vsz,etime,time,args) execute_process(COMMAND ${PROG_PS} ${PS_ARGS} RESULT_VARIABLE PS_FAILED OUTPUT_QUIET ERROR_QUIET) IF (NOT PS_FAILED) execute_process( COMMAND ${PROG_PS} ${PS_ARGS} COMMAND sed -e "s/ */ /g" -e 1q OUTPUT_VARIABLE PS_HEADER) string(STRIP "${PS_HEADER}" PS_HEADER) IF (PS_HEADER STREQUAL "PID PPID UID VSZ ELAPSED TIME COMMAND") # enclose arguments in double-quotes set(PS_COMMAND \"${PROG_PS}\") set(PS_MSG ${PROG_PS}) foreach (I ${PS_ARGS}) set(PS_COMMAND ${PS_COMMAND},\"${I}\") set(PS_MSG "${PS_MSG} ${I}") endforeach (I) message("-- Found 'ps' command: ${PS_MSG}") ENDIF (PS_HEADER STREQUAL "PID PPID UID VSZ ELAPSED TIME COMMAND") ENDIF (NOT PS_FAILED) ENDIF (PROG_PS) IF (NOT PS_COMMAND) message("-- Looking for a suitable 'ps' invocation - not found") ENDIF (NOT PS_COMMAND) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(kdbg_SRCS pgmargs.cpp procattach.cpp debugger.cpp dbgdriver.cpp gdbdriver.cpp xsldbgdriver.cpp brkpt.cpp exprwnd.cpp regwnd.cpp memwindow.cpp threadlist.cpp sourcewnd.cpp winstack.cpp ttywnd.cpp typetable.cpp prefdebugger.cpp prefmisc.cpp pgmsettings.cpp watchwindow.cpp dbgmainwnd.cpp main.cpp ) set(kdbg_UI brkptbase.ui brkptcondition.ui pgmargsbase.ui procattachbase.ui ) kde4_add_ui_files(kdbg_SRCS ${kdbg_UI}) kde4_add_app_icon(kdbg_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/hi*-app-kdbg.png") kde4_add_app_icon(kdbg_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/lo*-app-kdbg.png") kde4_add_executable(kdbg ${kdbg_SRCS}) IF (HAVE_LIB_UTIL) set(LIB_UTIL util) ENDIF (HAVE_LIB_UTIL) target_link_libraries(kdbg ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS} ${LIB_UTIL}) install(TARGETS kdbg ${INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES kdbg.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) install(FILES kdbgrc DESTINATION ${CONFIG_INSTALL_DIR}) install(FILES kdbgui.rc DESTINATION ${DATA_INSTALL_DIR}/kdbg) kdbg-2.5.5/kdbg/brkpt.cpp000066400000000000000000000224131247243200200151650ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include #include /* i18n */ #include #include #include #include #include #include #include #include #include #include "debugger.h" #include "brkpt.h" #include "dbgdriver.h" #include #include #include "mydebug.h" #include "ui_brkptcondition.h" class BreakpointItem : public QTreeWidgetItem, public Breakpoint { public: BreakpointItem(QTreeWidget* list, const Breakpoint& bp); void updateFrom(const Breakpoint& bp); void display(); /* sets icon and visible texts */ bool enabled() const { return Breakpoint::enabled; } }; BreakpointTable::BreakpointTable(QWidget* parent) : QWidget(parent), m_debugger(0) { m_ui.setupUi(this); connect(m_ui.bpEdit, SIGNAL(returnPressed()), this, SLOT(on_btAddBP_clicked())); initListAndIcons(); connect(m_ui.bpList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateUI())); // double click on item is same as View code connect(m_ui.bpList,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(on_btViewCode_clicked())); // need mouse button events m_ui.bpList->viewport()->installEventFilter(this); } BreakpointTable::~BreakpointTable() { } void BreakpointTable::updateBreakList() { std::list deletedItems; for (int i = 0 ; i < m_ui.bpList->topLevelItemCount(); i++) { deletedItems.push_back(static_cast(m_ui.bpList->topLevelItem(i))); } // get the new list for (KDebugger::BrkptROIterator bp = m_debugger->breakpointsBegin(); bp != m_debugger->breakpointsEnd(); ++bp) { // look up this item for (std::list::iterator o = deletedItems.begin(); o != deletedItems.end(); ++o) { if ((*o)->id == bp->id) { (*o)->updateFrom(*bp); deletedItems.erase(o); /* don't delete */ goto nextItem; } } // not in the list; add it new BreakpointItem(m_ui.bpList,*bp); nextItem:; } // delete all untouched breakpoints while (!deletedItems.empty()) { delete deletedItems.front(); deletedItems.pop_front(); } } BreakpointItem::BreakpointItem(QTreeWidget* list, const Breakpoint& bp) : QTreeWidgetItem(list), Breakpoint(bp) { display(); } void BreakpointItem::updateFrom(const Breakpoint& bp) { Breakpoint::operator=(bp); /* assign new values */ display(); } void BreakpointTable::on_btAddBP_clicked() { // set a breakpoint at the specified text QString bpText = m_ui.bpEdit->text(); bpText = bpText.trimmed(); if (m_debugger->isReady()) { Breakpoint* bp = new Breakpoint; bp->text = bpText; m_debugger->setBreakpoint(bp, false); } } void BreakpointTable::on_btAddWP_clicked() { // set a watchpoint for the specified expression QString wpExpr = m_ui.bpEdit->text(); wpExpr = wpExpr.trimmed(); if (m_debugger->isReady()) { Breakpoint* bp = new Breakpoint; bp->type = Breakpoint::watchpoint; bp->text = wpExpr; m_debugger->setBreakpoint(bp, false); } } void BreakpointTable::on_btRemove_clicked() { BreakpointItem* bp = static_cast(m_ui.bpList->currentItem()); if (bp != 0) { m_debugger->deleteBreakpoint(bp->id); // note that bp may be deleted by now // (if bp was an orphaned breakpoint) } } void BreakpointTable::on_btEnaDis_clicked() { BreakpointItem* bp = static_cast(m_ui.bpList->currentItem()); if (bp != 0) { m_debugger->enableDisableBreakpoint(bp->id); } } void BreakpointTable::on_btViewCode_clicked() { BreakpointItem* bp = static_cast(m_ui.bpList->currentItem()); if (bp == 0) return; if (!m_debugger->infoLine(bp->fileName, bp->lineNo, bp->address)) emit activateFileLine(bp->fileName, bp->lineNo, bp->address); } void BreakpointTable::updateUI() { bool enableChkpt = m_debugger->canChangeBreakpoints(); m_ui.btAddBP->setEnabled(enableChkpt); m_ui.btAddWP->setEnabled(enableChkpt); BreakpointItem* bp = static_cast(m_ui.bpList->currentItem()); m_ui.btViewCode->setEnabled(bp != 0); if (bp == 0) { enableChkpt = false; } else { if (bp->enabled()) { m_ui.btEnaDis->setText(i18n("&Disable")); } else { m_ui.btEnaDis->setText(i18n("&Enable")); } } m_ui.btRemove->setEnabled(enableChkpt); m_ui.btEnaDis->setEnabled(enableChkpt); m_ui.btConditional->setEnabled(enableChkpt); } bool BreakpointTable::eventFilter(QObject* ob, QEvent* ev) { if (ev->type() == QEvent::MouseButtonPress) { QMouseEvent* mev = static_cast(ev); if (mev->button() == Qt::MidButton) { // enable or disable the clicked-on item BreakpointItem* bp = static_cast(m_ui.bpList->itemAt(mev->pos())); if (bp != 0) { m_debugger->enableDisableBreakpoint(bp->id); } return true; } } return QWidget::eventFilter(ob, ev); } class ConditionalDlg : public QDialog { private: Ui::BrkPtCondition m_ui; public: ConditionalDlg(QWidget* parent); ~ConditionalDlg(); void setCondition(const QString& text) { m_ui.condition->setText(text); } QString condition() { return m_ui.condition->text(); } void setIgnoreCount(uint count){ m_ui.ignoreCount->setValue(count); }; uint ignoreCount(){ return m_ui.ignoreCount->value(); }; }; void BreakpointTable::on_btConditional_clicked() { BreakpointItem* bp = static_cast(m_ui.bpList->currentItem()); if (bp == 0) return; /* * Important: we must not keep a pointer to the Breakpoint around, * since it may vanish while the modal dialog is open through other * user interactions (like clicking at the breakpoint in the source * window)! */ int id = bp->id; ConditionalDlg dlg(this); dlg.setCondition(bp->condition); dlg.setIgnoreCount(bp->ignoreCount); if (dlg.exec() != QDialog::Accepted) return; QString conditionInput = dlg.condition(); int ignoreCount = dlg.ignoreCount(); m_debugger->conditionalBreakpoint(id, conditionInput, ignoreCount); } void BreakpointTable::initListAndIcons() { m_ui.bpList->setColumnWidth(0, 220); m_ui.bpList->setColumnWidth(1, 65); m_ui.bpList->setColumnWidth(2, 30); m_ui.bpList->setColumnWidth(3, 30); m_ui.bpList->setColumnWidth(4, 200); // add pixmaps QPixmap brkena = UserIcon("brkena"); QPixmap brkdis = UserIcon("brkdis"); QPixmap watchena = UserIcon("watchena"); QPixmap watchdis = UserIcon("watchdis"); QPixmap brktmp = UserIcon("brktmp"); QPixmap brkcond = UserIcon("brkcond"); QPixmap brkorph = UserIcon("brkorph"); /* * There are 32 different pixmaps: The basic enabled or disabled * breakpoint, plus an optional overlaid brktmp icon plus an optional * overlaid brkcond icon, plus an optional overlaid brkorph icon. Then * the same sequence for watchpoints. */ m_icons.resize(32); QPixmap canvas(16,16); for (int i = 0; i < 32; i++) { { QPainter p(&canvas); // clear canvas p.fillRect(0,0, canvas.width(),canvas.height(), Qt::cyan); // basic icon if (i & 1) { p.drawPixmap(1,1, (i & 8) ? watchena : brkena); } else { p.drawPixmap(1,1, (i & 8) ? watchdis : brkdis); } // temporary overlay if (i & 2) { p.drawPixmap(1,1, brktmp); } // conditional overlay if (i & 4) { p.drawPixmap(1,1, brkcond); } // orphan overlay if (i & 16) { p.drawPixmap(1,1, brkorph); } } canvas.setMask(canvas.createHeuristicMask()); m_icons[i] = QIcon(canvas); } } void BreakpointItem::display() { BreakpointTable* lb = static_cast(treeWidget()->parent()); /* breakpoint icon code; keep order the same as in BreakpointTable::initListAndIcons */ int code = enabled() ? 1 : 0; if (temporary) code += 2; if (!condition.isEmpty() || ignoreCount > 0) code += 4; if (Breakpoint::type == watchpoint) code += 8; if (isOrphaned()) code += 16; setIcon(0, lb->m_icons[code]); // more breakpoint info if (!location.isEmpty()) { setText(0, location); } else if (!Breakpoint::text.isEmpty()) { setText(0, Breakpoint::text); } else if (!fileName.isEmpty()) { // use only the file name portion QString file = QFileInfo(fileName).fileName(); // correct zero-based line-numbers setText(0, file + ":" + QString::number(lineNo+1)); } else { setText(0, "*" + address.asString()); } int c = 0; setText(++c, address.asString()); QString tmp; if (hitCount == 0) { setText(++c, QString()); } else { tmp.setNum(hitCount); setText(++c, tmp); } if (ignoreCount == 0) { setText(++c, QString()); } else { tmp.setNum(ignoreCount); setText(++c, tmp); } if (condition.isEmpty()) { setText(++c, QString()); } else { setText(++c, condition); } } ConditionalDlg::ConditionalDlg(QWidget* parent) : QDialog(parent) { m_ui.setupUi(this); QString title = KGlobal::caption(); title += i18n(": Conditional breakpoint"); setWindowTitle(title); } ConditionalDlg::~ConditionalDlg() { } #include "brkpt.moc" kdbg-2.5.5/kdbg/brkpt.h000066400000000000000000000033341247243200200146330ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef BRKPT_H #define BRKPT_H #include #include #include #include "ui_brkptbase.h" class KDebugger; class BreakpointItem; class BreakpointTable : public QWidget { Q_OBJECT public: BreakpointTable(QWidget* parent); ~BreakpointTable(); void setDebugger(KDebugger* deb) { m_debugger = deb; } protected: KDebugger* m_debugger; Ui::BrkPtBase m_ui; std::vector m_icons; void insertBreakpoint(int num, bool temp, bool enabled, QString location, QString fileName = 0, int lineNo = -1, int hits = 0, uint ignoreCount = 0, QString condition = QString()); void initListAndIcons(); virtual bool eventFilter(QObject* ob, QEvent* ev); friend class BreakpointItem; signals: /** * This signal is emitted when the user wants to go to the source code * where the current breakpoint is in. * * @param file specifies the file; this is not necessarily a full path * name, and if it is relative, you won't know relative to what, you * can only guess. * @param lineNo specifies the line number (0-based!). * @param address specifies the exact address of the breakpoint. */ void activateFileLine(const QString& file, int lineNo, const DbgAddr& address); public slots: void on_btAddBP_clicked(); void on_btAddWP_clicked(); void on_btRemove_clicked(); void on_btEnaDis_clicked(); void on_btViewCode_clicked(); void on_btConditional_clicked(); void updateUI(); void updateBreakList(); }; #endif // BRKPT_H kdbg-2.5.5/kdbg/brkptbase.ui000066400000000000000000000065371247243200200156640ustar00rootroot00000000000000 BrkPtBase 0 0 591 300 Form true false Location Address Hits Ignore Condition Add &Breakpoint Add &Watchpoint &Remove &Disable &View Code &Conditional... Qt::Vertical 20 40 KLineEdit QLineEdit
klineedit.h
bpEdit bpList btAddBP btAddWP btRemove btEnaDis btViewCode btConditional
kdbg-2.5.5/kdbg/brkptcondition.ui000066400000000000000000000057161247243200200167360ustar00rootroot00000000000000 BrkPtCondition 0 0 400 98 Dialog 50 false &Condition: condition Ignore &next hits: ignoreCount do not ignore QAbstractSpinBox::CorrectToNearestValue 999 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok KLineEdit QLineEdit
klineedit.h
buttonBox accepted() BrkPtCondition accept() 222 72 157 86 buttonBox rejected() BrkPtCondition reject() 290 78 286 86
kdbg-2.5.5/kdbg/commandids.h000066400000000000000000000005011247243200200156200ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef COMMANDIDS_H #define COMMANDIDS_H // statusbar ids #define ID_STATUS_MSG 191 #define ID_STATUS_ACTIVE 193 #endif // COMMANDIDS_H kdbg-2.5.5/kdbg/config.h.cmake000066400000000000000000000003431247243200200160320ustar00rootroot00000000000000#ifndef CONFIG_H_Included #define CONFIG_H_Included #cmakedefine HAVE_FUNC_OPENPTY #cmakedefine HAVE_LIBUTIL_H #cmakedefine HAVE_PTY_H #cmakedefine HAVE_UTIL_H #cmakedefine PS_COMMAND @PS_COMMAND@ #endif // CONFIG_H_Included kdbg-2.5.5/kdbg/dbgdriver.cpp000066400000000000000000000257021247243200200160170ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "dbgdriver.h" #include "exprwnd.h" #include #include #include #include /* strtol, atoi */ #include #include "mydebug.h" #include DebuggerDriver::DebuggerDriver() : m_state(DSidle), m_activeCmd(0) { // debugger process connect(this, SIGNAL(readyReadStandardOutput()), SLOT(slotReceiveOutput())); connect(this, SIGNAL(bytesWritten(qint64)), SLOT(slotCommandRead())); connect(this, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(slotExited())); } DebuggerDriver::~DebuggerDriver() { flushHiPriQueue(); flushLoPriQueue(); } bool DebuggerDriver::startup(QString cmdStr) { // clear command queues delete m_activeCmd; m_activeCmd = 0; flushHiPriQueue(); flushLoPriQueue(); m_state = DSidle; // debugger executable if (cmdStr.isEmpty()) cmdStr = defaultInvocation(); QStringList cmd = cmdStr.split(' ', QString::SkipEmptyParts); if (cmd.isEmpty()) return false; QString pgm = cmd.takeFirst(); #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert(QLatin1String("LC_ALL"), QLatin1String("C")); env.remove(QLatin1String("LANG")); setProcessEnvironment(env); #endif setProcessChannelMode(MergedChannels); start(pgm, cmd); if (!waitForStarted(-1)) return false; // open log file if (!m_logFile.isOpen() && !m_logFileName.isEmpty()) { m_logFile.setFileName(m_logFileName); m_logFile.open(QIODevice::WriteOnly); } return true; } void DebuggerDriver::slotExited() { static const char txt[] = "\n====== debugger exited ======\n"; if (m_logFile.isOpen()) { m_logFile.write(txt,sizeof(txt)-1); } // reset state m_state = DSidle; // empty buffer m_output.clear(); } CmdQueueItem* DebuggerDriver::executeCmdString(DbgCommand cmd, QString cmdString, bool clearLow) { // place a new command into the high-priority queue CmdQueueItem* cmdItem = new CmdQueueItem(cmd, cmdString); m_hipriCmdQueue.push(cmdItem); if (clearLow) { if (m_state == DSrunningLow) { // take the liberty to interrupt the running command m_state = DSinterrupted; ::kill(pid(), SIGINT); ASSERT(m_activeCmd != 0); TRACE(QString().sprintf("interrupted the command %d", (m_activeCmd ? m_activeCmd->m_cmd : -1))); delete m_activeCmd; m_activeCmd = 0; } flushLoPriQueue(); } // if gdb is idle, send it the command if (m_state == DSidle) { ASSERT(m_activeCmd == 0); writeCommand(); } return cmdItem; } bool CmdQueueItem::IsEqualCmd::operator()(CmdQueueItem* cmd) const { return cmd->m_cmd == m_cmd && cmd->m_cmdString == m_str; } CmdQueueItem* DebuggerDriver::queueCmdString(DbgCommand cmd, QString cmdString, QueueMode mode) { // place a new command into the low-priority queue std::list::iterator i; CmdQueueItem* cmdItem = 0; switch (mode) { case QMoverrideMoreEqual: case QMoverride: // check whether gdb is currently processing this command if (m_activeCmd != 0 && m_activeCmd->m_cmd == cmd && m_activeCmd->m_cmdString == cmdString) { return m_activeCmd; } // check whether there is already the same command in the queue i = find_if(m_lopriCmdQueue.begin(), m_lopriCmdQueue.end(), CmdQueueItem::IsEqualCmd(cmd, cmdString)); if (i != m_lopriCmdQueue.end()) { // found one cmdItem = *i; if (mode == QMoverrideMoreEqual) { // All commands are equal, but some are more equal than others... // put this command in front of all others m_lopriCmdQueue.erase(i); m_lopriCmdQueue.push_front(cmdItem); } break; } // else none found, so add it // drop through case QMnormal: cmdItem = new CmdQueueItem(cmd, cmdString); m_lopriCmdQueue.push_back(cmdItem); } // if gdb is idle, send it the command if (m_state == DSidle) { ASSERT(m_activeCmd == 0); writeCommand(); } return cmdItem; } // dequeue a pending command, make it the active one and send it to gdb void DebuggerDriver::writeCommand() { // ASSERT(m_activeCmd == 0); assert(m_activeCmd == 0); // first check the high-priority queue - only if it is empty // use a low-priority command. CmdQueueItem* cmd; DebuggerState newState = DScommandSent; if (!m_hipriCmdQueue.empty()) { cmd = m_hipriCmdQueue.front(); m_hipriCmdQueue.pop(); } else if (!m_lopriCmdQueue.empty()) { cmd = m_lopriCmdQueue.front(); m_lopriCmdQueue.pop_front(); newState = DScommandSentLow; } else { // nothing to do m_state = DSidle; /* is necessary if command was interrupted earlier */ return; } m_activeCmd = cmd; TRACE("in writeCommand: " + cmd->m_cmdString); QByteArray str = cmd->m_cmdString.toLocal8Bit(); const char* data = str.data(); qint64 len = str.length(); while (len > 0) { qint64 n = write(data, len); if (n <= 0) break; // ignore error len -= n; data += n; } // write also to log file if (m_logFile.isOpen()) { m_logFile.write(str); m_logFile.flush(); } m_state = newState; } void DebuggerDriver::flushLoPriQueue() { while (!m_lopriCmdQueue.empty()) { delete m_lopriCmdQueue.back(); m_lopriCmdQueue.pop_back(); } } void DebuggerDriver::flushHiPriQueue() { while (!m_hipriCmdQueue.empty()) { delete m_hipriCmdQueue.front(); m_hipriCmdQueue.pop(); } } void DebuggerDriver::flushCommands(bool hipriOnly) { flushHiPriQueue(); if (!hipriOnly) { flushLoPriQueue(); } } void DebuggerDriver::slotCommandRead() { TRACE(__PRETTY_FUNCTION__); // there must be an active command which is not yet commited ASSERT(m_state == DScommandSent || m_state == DScommandSentLow); ASSERT(m_activeCmd != 0); ASSERT(!m_activeCmd->m_committed); // commit the command m_activeCmd->m_committed = true; // now the debugger is officially working on the command m_state = m_state == DScommandSent ? DSrunning : DSrunningLow; // set the flag that reflects whether the program is really running switch (m_activeCmd->m_cmd) { case DCrun: case DCcont: case DCnext: case DCstep: case DCfinish: case DCuntil: emit inferiorRunning(); break; default: break; } // process delayed output while (!m_delayedOutput.empty()) { QByteArray delayed = m_delayedOutput.front(); m_delayedOutput.pop(); processOutput(delayed); } } void DebuggerDriver::slotReceiveOutput() { QByteArray data = readAllStandardOutput(); /* * The debugger should be running (processing a command) at this point. * If it is not, it is still idle because we haven't received the * bytesWritten signal yet, in which case there must be an active command * which is not commited. */ if (m_state == DScommandSent || m_state == DScommandSentLow) { ASSERT(m_activeCmd != 0); ASSERT(!m_activeCmd->m_committed); /* * We received output before we got signal bytesWritten. Collect this * output, it will be processed by commandRead when it gets the * acknowledgment for the uncommitted command. */ m_delayedOutput.push(data); return; } processOutput(data); } void DebuggerDriver::processOutput(const QByteArray& data) { // write to log file (do not log delayed output - it would appear twice) if (m_logFile.isOpen()) { m_logFile.write(data); m_logFile.flush(); } /* * gdb sometimes produces stray output while it's idle. This happens if * it receives a signal, most prominently a SIGCONT after a SIGTSTP: * The user haltet kdbg with Ctrl-Z, then continues it with "fg", which * also continues gdb, which repeats the prompt! */ if (m_activeCmd == 0 && m_state != DSinterrupted) { // ignore the output TRACE("ignoring stray output: " + QString(data)); return; } ASSERT(m_state == DSrunning || m_state == DSrunningLow || m_state == DSinterrupted); ASSERT(m_activeCmd != 0 || m_state == DSinterrupted); // collect output until next prompt string is found // accumulate it m_output += data; // check for a prompt int promptStart = findPrompt(m_output); if (promptStart >= 0) { // found prompt! // terminate output before the prompt m_output.resize(promptStart); /* * We've got output for the active command. But if it was * interrupted, ignore it. */ if (m_state != DSinterrupted) { /* * m_state shouldn't be DSidle while we are parsing the output * so that all commands produced by parse() go into the queue * instead of being written to gdb immediately. */ ASSERT(m_state != DSidle); CmdQueueItem* cmd = m_activeCmd; m_activeCmd = 0; commandFinished(cmd); delete cmd; } // empty buffer m_output.clear(); // also clear delayed output if interrupted if (m_state == DSinterrupted) { m_delayedOutput = std::queue(); } /* * We parsed some output successfully. Unless there's more delayed * output, the debugger must be idle now, so send down the next * command. */ if (m_delayedOutput.empty()) { if (m_hipriCmdQueue.empty() && m_lopriCmdQueue.empty()) { // no pending commands m_state = DSidle; emit enterIdleState(); } else { writeCommand(); } } } } void DebuggerDriver::dequeueCmdByVar(VarTree* var) { if (var == 0) return; std::list::iterator i = m_lopriCmdQueue.begin(); while (i != m_lopriCmdQueue.end()) { if ((*i)->m_expr != 0 && var->isAncestorEq((*i)->m_expr)) { // this is indeed a critical command; delete it TRACE("removing critical lopri-cmd: " + (*i)->m_cmdString); delete *i; m_lopriCmdQueue.erase(i++); } else ++i; } } QString DebuggerDriver::editableValue(VarTree* value) { // by default, let the user edit what is visible return value->value(); } StackFrame::~StackFrame() { delete var; } DbgAddr::DbgAddr(const QString& aa) : a(aa) { cleanAddr(); } /* * We strip off the leading 0x and any leading zeros. */ void DbgAddr::cleanAddr() { if (a.isEmpty()) return; while (a[0] == '0' || a[0] == 'x') { a.remove(0, 1); } } void DbgAddr::operator=(const QString& aa) { a = aa; fnoffs = QString(); cleanAddr(); } /* Re-attach 0x in front of the address */ QString DbgAddr::asString() const { if (a.isEmpty()) return QString(); else return "0x" + a; } bool operator==(const DbgAddr& a1, const DbgAddr& a2) { return QString::compare(a1.a, a2.a) == 0; } bool operator>(const DbgAddr& a1, const DbgAddr& a2) { if (a1.a.length() > a2.a.length()) return true; if (a1.a.length() < a2.a.length()) return false; return QString::compare(a1.a, a2.a) > 0; } Breakpoint::Breakpoint() : id(0), type(breakpoint), temporary(false), enabled(true), ignoreCount(0), hitCount(0), lineNo(0) { } #include "dbgdriver.moc" kdbg-2.5.5/kdbg/dbgdriver.h000066400000000000000000000434131247243200200154630ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef DBGDRIVER_H #define DBGDRIVER_H #include #include #include #include #include class VarTree; class ExprValue; class ExprWnd; class KDebugger; class QStringList; /** * A type representing an address. */ struct DbgAddr { QString a; QString fnoffs; DbgAddr() { } DbgAddr(const QString& aa); DbgAddr(const DbgAddr& src) : a(src.a), fnoffs(src.fnoffs) { } void operator=(const QString& aa); void operator=(const DbgAddr& src) { a = src.a; fnoffs = src.fnoffs; } QString asString() const; bool isEmpty() const { return a.isEmpty(); } protected: void cleanAddr(); }; bool operator==(const DbgAddr& a1, const DbgAddr& a2); bool operator>(const DbgAddr& a1, const DbgAddr& a2); enum DbgCommand { DCinitialize, DCtty, DCexecutable, DCtargetremote, DCcorefile, DCattach, DCinfolinemain, DCinfolocals, DCinforegisters, DCexamine, DCinfoline, DCdisassemble, DCsetargs, DCsetenv, DCunsetenv, DCsetoption, /* debugger options */ DCcd, DCbt, DCrun, DCcont, DCstep, DCstepi, DCnext, DCnexti, DCfinish, DCuntil, /* line number is zero-based! */ DCkill, DCbreaktext, DCbreakline, /* line number is zero-based! */ DCtbreakline, /* line number is zero-based! */ DCbreakaddr, DCtbreakaddr, DCwatchpoint, DCdelete, DCenable, DCdisable, DCprint, DCprintDeref, DCprintStruct, DCprintQStringStruct, DCframe, DCfindType, DCinfosharedlib, DCthread, DCinfothreads, DCinfobreak, DCcondition, DCsetpc, DCignore, DCprintWChar, DCsetvariable }; enum RunDevNull { RDNstdin = 0x1, /* redirect stdin to /dev/null */ RDNstdout = 0x2, /* redirect stdout to /dev/null */ RDNstderr = 0x4 /* redirect stderr to /dev/null */ }; /** * How the memory dump is formated. The lowest 4 bits define the size of * the entities. The higher bits define how these are formatted. Note that * not all combinations make sense. */ enum MemoryDumpType { // sizes MDTbyte = 0x1, MDThalfword = 0x2, MDTword = 0x3, MDTgiantword = 0x4, MDTsizemask = 0xf, // formats MDThex = 0x10, MDTsigned = 0x20, MDTunsigned = 0x30, MDToctal = 0x40, MDTbinary = 0x50, MDTaddress = 0x60, MDTchar = 0x70, MDTfloat = 0x80, MDTstring = 0x90, MDTinsn = 0xa0, MDTformatmask = 0xf0 }; struct Breakpoint; /** * Debugger commands are placed in a queue. Only one command at a time is * sent down to the debugger. All other commands in the queue are retained * until the sent command has been processed by gdb. The debugger tells us * that it's done with the command by sending the prompt. The output of the * debugger is parsed at that time. Then, if more commands are in the * queue, the next one is sent to the debugger. */ struct CmdQueueItem { DbgCommand m_cmd; QString m_cmdString; bool m_committed; /* just a debugging aid */ // remember which expression when printing an expression VarTree* m_expr; ExprWnd* m_exprWnd; // remember file position QString m_fileName; int m_lineNo; DbgAddr m_addr; // the breakpoint info Breakpoint* m_brkpt; int m_existingBrkpt; // whether command was emitted due to direct user request (only set when relevant) bool m_byUser; CmdQueueItem(DbgCommand cmd, const QString& str) : m_cmd(cmd), m_cmdString(str), m_committed(false), m_expr(0), m_exprWnd(0), m_lineNo(0), m_brkpt(0), m_existingBrkpt(0), m_byUser(false) { } struct IsEqualCmd { IsEqualCmd(DbgCommand cmd, const QString& str) : m_cmd(cmd), m_str(str) { } bool operator()(CmdQueueItem*) const; DbgCommand m_cmd; const QString& m_str; }; }; /** * The information about a breakpoint that is parsed from the list of * breakpoints. */ struct Breakpoint { int id; /* gdb's number */ enum Type { breakpoint, watchpoint } type; bool temporary; bool enabled; QString location; QString text; /* text if set using DCbreaktext */ DbgAddr address; /* exact address of breakpoint */ QString condition; /* condition as printed by gdb */ int ignoreCount; /* ignore next that may hits */ int hitCount; /* as reported by gdb */ // the following items repeat the location, but in a better usable way QString fileName; int lineNo; /* zero-based line number */ Breakpoint(); bool isOrphaned() const { return id < 0; } }; /** * Information about a stack frame. */ struct FrameInfo { QString fileName; int lineNo; /* zero-based line number */ DbgAddr address; /* exact address of PC */ }; /** * The information about a stack frame as parsed from the backtrace. */ struct StackFrame : FrameInfo { int frameNo; ExprValue* var; /* more information if non-zero */ StackFrame() : var(0) { } ~StackFrame(); }; /** * The information about a thread as parsed from the threads list. */ struct ThreadInfo : FrameInfo { int id; /* gdb's number */ QString threadName; /* the SYSTAG */ QString function; /* where thread is halted */ bool hasFocus; /* the thread whose stack we are watching */ }; /** * Register information */ struct RegisterInfo { QString regName; QString rawValue; QString cookedValue; /* may be empty */ QString type; /* of vector register if not empty */ }; /** * Disassembled code */ struct DisassembledCode { DbgAddr address; QString code; }; /** * Memory contents */ struct MemoryDump { DbgAddr address; QString dump; }; /** * This is an abstract base class for debugger process. * * This class represents the debugger program. It provides the low-level * interface to the commandline debugger. As such it implements the * commands and parses the output. */ class DebuggerDriver : public QProcess { Q_OBJECT public: DebuggerDriver(); virtual ~DebuggerDriver() = 0; virtual QString driverName() const = 0; /** * Returns the default command string to invoke the debugger driver. */ virtual QString defaultInvocation() const = 0; /** * Returns a list of options that can be turned on and off. */ virtual QStringList boolOptionList() const = 0; virtual bool startup(QString cmdStr); void setLogFileName(const QString& fname) { m_logFileName = fname; } bool isRunning() { return state() != NotRunning; } protected: QString m_runCmd; enum DebuggerState { DSidle, /* gdb waits for input */ DSinterrupted, /* a command was interrupted */ DSrunningLow, /* gdb is running a low-priority command */ DSrunning, /* gdb waits for program */ DScommandSent, /* command has been sent, we wait for wroteStdin signal */ DScommandSentLow /* low-prioritycommand has been sent */ }; DebuggerState m_state; public: bool isIdle() const { return m_state == DSidle; } /** * Tells whether a high prority command would be executed immediately. */ bool canExecuteImmediately() const { return m_hipriCmdQueue.empty(); } protected: QByteArray m_output; // normal gdb output std::queue m_delayedOutput; // output colleced before signal bytesWritten() arrived public: /** * Enqueues a high-priority command. High-priority commands are * executed before any low-priority commands. No user interaction is * possible as long as there is a high-priority command in the queue. */ virtual CmdQueueItem* executeCmd(DbgCommand, bool clearLow = false) = 0; virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg, bool clearLow = false) = 0; virtual CmdQueueItem* executeCmd(DbgCommand, int intArg, bool clearLow = false) = 0; virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg, int intArg, bool clearLow = false) = 0; virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg1, QString strArg2, bool clearLow = false) = 0; virtual CmdQueueItem* executeCmd(DbgCommand, int intArg1, int intArg2, bool clearLow = false) = 0; enum QueueMode { QMnormal, /* queues the command last */ QMoverride, /* removes an already queued command */ QMoverrideMoreEqual /* ditto, also puts the command first in the queue */ }; /** * Enqueues a low-priority command. Low-priority commands are executed * after any high-priority commands. */ virtual CmdQueueItem* queueCmd(DbgCommand, QueueMode mode) = 0; virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg, QueueMode mode) = 0; virtual CmdQueueItem* queueCmd(DbgCommand, int intArg, QueueMode mode) = 0; virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg, int intArg, QueueMode mode) = 0; virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg1, QString strArg2, QueueMode mode) = 0; /** * Flushes the command queues. * @param hipriOnly if true, only the high priority queue is flushed. */ virtual void flushCommands(bool hipriOnly = false); /** * Terminates the debugger process. */ virtual void terminate() = 0; /** * Terminates the debugger process, but also detaches any program that * it has been attached to. */ virtual void detachAndTerminate() = 0; /** * Interrupts the debuggee. */ virtual void interruptInferior() = 0; /** * Specifies the command that prints the QString data. */ virtual void setPrintQStringDataCmd(const char* cmd) = 0; /** * Parses the output as an array of QChars. */ virtual ExprValue* parseQCharArray(const char* output, bool wantErrorValue, bool qt3like) = 0; /** * Parses a back-trace (the output of the DCbt command). */ virtual void parseBackTrace(const char* output, std::list& stack) = 0; /** * Parses the output of the DCframe command; * @param frameNo Returns the frame number. * @param file Returns the source file name. * @param lineNo The zero-based line number. * @param address Returns the exact address. * @return false if the frame could not be parsed successfully. The * output values are undefined in this case. */ virtual bool parseFrameChange(const char* output, int& frameNo, QString& file, int& lineNo, DbgAddr& address) = 0; /** * Parses a list of breakpoints. * @param output The output of the debugger. * @param brks The list of new #Breakpoint objects. The list * must initially be empty. * @return False if there was an error before the first breakpoint * was found. Even if true is returned, #brks may be empty. */ virtual bool parseBreakList(const char* output, std::list& brks) = 0; /** * Parses a list of threads. * @param output The output of the debugger. * @return The new thread list. There is no indication if there was * a parse error. */ virtual std::list parseThreadList(const char* output) = 0; /** * Parses the output when the program stops to see whether this it * stopped due to a breakpoint. * @param output The output of the debugger. * @param id Returns the breakpoint id. * @param file Returns the file name in which the breakpoint is. * @param lineNo Returns the zero-based line number of the breakpoint. * @param address Returns the address of the breakpoint. * @return False if there was no breakpoint. */ virtual bool parseBreakpoint(const char* output, int& id, QString& file, int& lineNo, QString& address) = 0; /** * Parses the output of the DCinfolocals command. * @param output The output of the debugger. * @param newVars Receives the parsed variable values. The values are * simply append()ed to the supplied list. */ virtual void parseLocals(const char* output, std::list& newVars) = 0; /** * Parses the output of a DCprint or DCprintStruct command. * @param output The output of the debugger. * @param wantErrorValue Specifies whether the error message should be * provided as the value of a NKplain variable. If this is false, * 0 is returned if the printed value is an error message. * @return the parsed value. It is 0 if there was a parse error * or if the output is an error message and #wantErrorValue * is \c false. The returned object's text() is undefined. */ virtual ExprValue* parsePrintExpr(const char* output, bool wantErrorValue) = 0; /** * Parses the output of the DCcd command. * @return false if the message is an error message. */ virtual bool parseChangeWD(const char* output, QString& message) = 0; /** * Parses the output of the DCexecutable command. * @return false if an error occured. */ virtual bool parseChangeExecutable(const char* output, QString& message) = 0; /** * Parses the output of the DCcorefile command. * @return false if the core file was not loaded successfully. */ virtual bool parseCoreFile(const char* output) = 0; enum StopFlags { SFrefreshSource = 1, /* refresh of source code is needed */ SFrefreshBreak = 2, /* refresh breakpoints */ SFrefreshThreads = 4, /* refresh thread list */ SFprogramActive = 128 /* program remains active */ }; /** * Parses the output of commands that execute (a piece of) the program. * @return The inclusive OR of zero or more of the StopFlags. */ virtual uint parseProgramStopped(const char* output, QString& message) = 0; /** * Parses the output of the DCsharedlibs command. */ virtual QStringList parseSharedLibs(const char* output) = 0; /** * Parses the output of the DCfindType command. * @return true if a type was found. */ virtual bool parseFindType(const char* output, QString& type) = 0; /** * Parses the output of the DCinforegisters command. */ virtual std::list parseRegisters(const char* output) = 0; /** * Parses the output of the DCinfoline command. Returns false if the * two addresses could not be found. */ virtual bool parseInfoLine(const char* output, QString& addrFrom, QString& addrTo) = 0; /** * Parses the ouput of the DCdisassemble command. */ virtual std::list parseDisassemble(const char* output) = 0; /** * Parses a memory dump. Returns an empty string if no error was found; * otherwise it contains an error message. */ virtual QString parseMemoryDump(const char* output, std::list& memdump) = 0; /** * Parses the output of the DCsetvariable command. Returns an empty * string if no error was found; otherwise it contains an error * message. */ virtual QString parseSetVariable(const char* output) = 0; /** * Returns a value that the user can edit. */ virtual QString editableValue(VarTree* value); protected: /** Removes all commands from the low-priority queue. */ void flushLoPriQueue(); /** Removes all commands from the high-priority queue. */ void flushHiPriQueue(); std::queue m_hipriCmdQueue; std::list m_lopriCmdQueue; /** * The active command is kept separately from other pending commands. */ CmdQueueItem* m_activeCmd; /** * Helper function that queues the given command string in the * low-priority queue. */ CmdQueueItem* queueCmdString(DbgCommand cmd, QString cmdString, QueueMode mode); /** * Helper function that queues the given command string in the * high-priority queue. */ CmdQueueItem* executeCmdString(DbgCommand cmd, QString cmdString, bool clearLow); void writeCommand(); virtual void commandFinished(CmdQueueItem* cmd) = 0; protected: void processOutput(const QByteArray& data); /** * Returns the start of the prompt in \a output or -1. * \a len specifies the size of \a output, but in addition, the contents * of \a output are NUL-terminated, i.e., \c output[len] is zero. */ virtual int findPrompt(const QByteArray& output) const = 0; // log file QString m_logFileName; QFile m_logFile; public slots: void dequeueCmdByVar(VarTree* var); protected slots: virtual void slotReceiveOutput(); virtual void slotCommandRead(); virtual void slotExited(); signals: /** * This signal is emitted when the output of a command has been fully * collected and is ready to be interpreted. */ void commandReceived(CmdQueueItem* cmd, const char* output); /** * This signal is emitted when the debugger recognizes that a specific * location in a file ought to be displayed. * * Gdb's --fullname option supports this for the step, next, frame, and * run commands (and possibly others). * * @param file specifies the file; this is not necessarily a full path * name, and if it is relative, you won't know relative to what, you * can only guess. * @param lineNo specifies the line number (0-based!) (this may be * negative, in which case the file should be activated, but the line * should NOT be changed). * @param address specifies the exact address of the PC or is empty. */ void activateFileLine(const QString& file, int lineNo, const DbgAddr& address); /** * This signal is emitted when a command that starts the inferior has * been submitted to the debugger. */ void inferiorRunning(); /** * This signal is emitted when all output from the debugger has been * consumed and no more commands are in the queues. */ void enterIdleState(); }; #endif // DBGDRIVER_H kdbg-2.5.5/kdbg/dbgmainwnd.cpp000066400000000000000000001154311247243200200161600ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include #include /* i18n */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "dbgmainwnd.h" #include "debugger.h" #include "commandids.h" #include "winstack.h" #include "brkpt.h" #include "threadlist.h" #include "memwindow.h" #include "ttywnd.h" #include "watchwindow.h" #include "procattach.h" #include "prefdebugger.h" #include "prefmisc.h" #include "gdbdriver.h" #include "xsldbgdriver.h" #include "mydebug.h" #include /* mknod(2) */ #include /* getpid */ static const char defaultTermCmdStr[] = "xterm -name kdbgio -title %T -e sh -c %C"; static const char defaultSourceFilter[] = "*.c *.cc *.cpp *.c++ *.C *.CC"; static const char defaultHeaderFilter[] = "*.h *.hh *.hpp *.h++"; DebuggerMainWnd::DebuggerMainWnd() : KXmlGuiWindow(), m_debugger(0), #ifdef GDB_TRANSCRIPT m_transcriptFile(GDB_TRANSCRIPT), #endif m_outputTermCmdStr(defaultTermCmdStr), m_outputTermProc(new QProcess), m_ttyLevel(-1), /* no tty yet */ m_popForeground(false), m_backTimeout(1000), m_tabWidth(0), m_sourceFilter(defaultSourceFilter), m_headerFilter(defaultHeaderFilter), m_statusActive(i18n("active")) { setDockNestingEnabled(true); m_filesWindow = new WinStack(this); setCentralWidget(m_filesWindow); QDockWidget* dw1 = createDockWidget("Stack", i18n("Stack")); m_btWindow = new QListWidget(dw1); dw1->setWidget(m_btWindow); QDockWidget* dw2 = createDockWidget("Locals", i18n("Locals")); m_localVariables = new ExprWnd(dw2, i18n("Variable")); dw2->setWidget(m_localVariables); QDockWidget* dw3 = createDockWidget("Watches", i18n("Watches")); m_watches = new WatchWindow(dw3); dw3->setWidget(m_watches); QDockWidget* dw4 = createDockWidget("Registers", i18n("Registers")); m_registers = new RegisterView(dw4); dw4->setWidget(m_registers); QDockWidget* dw5 = createDockWidget("Breakpoints", i18n("Breakpoints")); m_bpTable = new BreakpointTable(dw5); dw5->setWidget(m_bpTable); QDockWidget* dw6 = createDockWidget("Output", i18n("Output")); m_ttyWindow = new TTYWindow(dw6); dw6->setWidget(m_ttyWindow); QDockWidget* dw7 = createDockWidget("Threads", i18n("Threads")); m_threads = new ThreadList(dw7); dw7->setWidget(m_threads); QDockWidget* dw8 = createDockWidget("Memory", i18n("Memory")); m_memoryWindow = new MemoryWindow(dw8); dw8->setWidget(m_memoryWindow); m_debugger = new KDebugger(this, m_localVariables, m_watches->watchVariables(), m_btWindow); connect(m_debugger, SIGNAL(updateStatusMessage()), SLOT(slotNewStatusMsg())); connect(m_debugger, SIGNAL(updateUI()), SLOT(updateUI())); connect(m_debugger, SIGNAL(breakpointsChanged()), SLOT(updateLineItems())); connect(m_debugger, SIGNAL(debuggerStarting()), SLOT(slotDebuggerStarting())); m_bpTable->setDebugger(m_debugger); m_memoryWindow->setDebugger(m_debugger); setStandardToolBarMenuEnabled(true); initKAction(); initStatusBar(); connect(m_watches, SIGNAL(addWatch()), SLOT(slotAddWatch())); connect(m_watches, SIGNAL(deleteWatch()), m_debugger, SLOT(slotDeleteWatch())); connect(m_watches, SIGNAL(textDropped(const QString&)), SLOT(slotAddWatch(const QString&))); connect(&m_filesWindow->m_findDlg, SIGNAL(closed()), SLOT(updateUI())); connect(m_filesWindow, SIGNAL(newFileLoaded()), SLOT(slotNewFileLoaded())); connect(m_filesWindow, SIGNAL(toggleBreak(const QString&,int,const DbgAddr&,bool)), this, SLOT(slotToggleBreak(const QString&,int,const DbgAddr&,bool))); connect(m_filesWindow, SIGNAL(enadisBreak(const QString&,int,const DbgAddr&)), this, SLOT(slotEnaDisBreak(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)), m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(executableUpdated()), m_filesWindow, SLOT(reloadAllFiles())); connect(m_debugger, SIGNAL(updatePC(const QString&,int,const DbgAddr&,int)), m_filesWindow, SLOT(updatePC(const QString&,int,const DbgAddr&,int))); // value popup communication connect(m_filesWindow, SIGNAL(initiateValuePopup(const QString&)), m_debugger, SLOT(slotValuePopup(const QString&))); connect(m_debugger, SIGNAL(valuePopup(const QString&)), m_filesWindow, SLOT(slotShowValueTip(const QString&))); // disassembling connect(m_filesWindow, SIGNAL(disassemble(const QString&, int)), m_debugger, SLOT(slotDisassemble(const QString&, int))); connect(m_debugger, SIGNAL(disassembled(const QString&,int,const std::list&)), m_filesWindow, SLOT(slotDisassembled(const QString&,int,const std::list&))); connect(m_filesWindow, SIGNAL(moveProgramCounter(const QString&,int,const DbgAddr&)), m_debugger, SLOT(setProgramCounter(const QString&,int,const DbgAddr&))); // program stopped connect(m_debugger, SIGNAL(programStopped()), SLOT(slotProgramStopped())); connect(&m_backTimer, SIGNAL(timeout()), SLOT(slotBackTimer())); // tab width connect(this, SIGNAL(setTabWidth(int)), m_filesWindow, SIGNAL(setTabWidth(int))); // connect breakpoint table connect(m_bpTable, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)), m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(updateUI()), m_bpTable, SLOT(updateUI())); connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateBreakList())); connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateUI())); connect(m_debugger, SIGNAL(registersChanged(const std::list&)), m_registers, SLOT(updateRegisters(const std::list&))); connect(m_debugger, SIGNAL(memoryDumpChanged(const QString&, const std::list&)), m_memoryWindow, SLOT(slotNewMemoryDump(const QString&, const std::list&))); connect(m_debugger, SIGNAL(saveProgramSpecific(KConfigBase*)), m_memoryWindow, SLOT(saveProgramSpecific(KConfigBase*))); connect(m_debugger, SIGNAL(restoreProgramSpecific(KConfigBase*)), m_memoryWindow, SLOT(restoreProgramSpecific(KConfigBase*))); // thread window connect(m_debugger, SIGNAL(threadsChanged(const std::list&)), m_threads, SLOT(updateThreads(const std::list&))); connect(m_threads, SIGNAL(setThread(int)), m_debugger, SLOT(setThread(int))); // popup menu of the local variables window m_localVariables->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_localVariables, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotLocalsPopup(const QPoint&))); makeDefaultLayout(); setupGUI(KXmlGuiWindow::Default, "kdbgui.rc"); restoreSettings(KGlobal::config()); // The animation button is not part of the restored window state. // We must create it after the toolbar was loaded. initAnimation(); updateUI(); m_bpTable->updateUI(); } DebuggerMainWnd::~DebuggerMainWnd() { saveSettings(KGlobal::config()); // must delete m_debugger early since it references our windows delete m_debugger; m_debugger = 0; delete m_memoryWindow; delete m_threads; delete m_ttyWindow; delete m_bpTable; delete m_registers; delete m_watches; delete m_localVariables; delete m_btWindow; delete m_filesWindow; delete m_outputTermProc; } QDockWidget* DebuggerMainWnd::createDockWidget(const char* name, const QString& title) { QDockWidget* w = new QDockWidget(title, this); w->setObjectName(name); // view menu changes when docking state changes connect(w, SIGNAL(visibilityChanged(bool)), SLOT(updateUI())); return w; } QAction* DebuggerMainWnd::createAction(const QString& text, const char* icon, int shortcut, const QObject* receiver, const char* slot, const char* name) { KAction* a = actionCollection()->addAction(name); a->setText(text); a->setIcon(KIcon(icon)); if (shortcut) a->setShortcut(KShortcut(shortcut)); connect(a, SIGNAL(triggered()), receiver, slot); return a; } QAction* DebuggerMainWnd::createAction(const QString& text, int shortcut, const QObject* receiver, const char* slot, const char* name) { KAction* a = actionCollection()->addAction(name); a->setText(text); if (shortcut) a->setShortcut(KShortcut(shortcut)); connect(a, SIGNAL(triggered()), receiver, slot); return a; } void DebuggerMainWnd::initKAction() { // file menu KAction* open = KStandardAction::open(this, SLOT(slotFileOpen()), actionCollection()); open->setText(i18n("&Open Source...")); m_closeAction = KStandardAction::close(m_filesWindow, SLOT(slotClose()), actionCollection()); m_reloadAction = createAction(i18n("&Reload Source"), "view-refresh", 0, m_filesWindow, SLOT(slotFileReload()), "file_reload"); m_fileExecAction = createAction(i18n("&Executable..."), "document-open-executable", 0, this, SLOT(slotFileExe()), "file_executable"); m_recentExecAction = KStandardAction::openRecent(this, SLOT(slotRecentExec(const KUrl&)), actionCollection()); m_recentExecAction->setObjectName("file_executable_recent"); m_recentExecAction->setText(i18n("Recent E&xecutables")); m_coreDumpAction = createAction(i18n("&Core dump..."), 0, this, SLOT(slotFileCore()), "file_core_dump"); KStandardAction::quit(kapp, SLOT(closeAllWindows()), actionCollection()); // settings menu m_settingsAction = createAction(i18n("This &Program..."), 0, this, SLOT(slotFileProgSettings()), "settings_program"); createAction(i18n("&Global Options..."), 0, this, SLOT(slotFileGlobalSettings()), "settings_global"); KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection()); KStandardAction::showStatusbar(this, SLOT(slotViewStatusbar()), actionCollection()); // view menu m_findAction = KStandardAction::find(m_filesWindow, SLOT(slotViewFind()), actionCollection()); KStandardAction::findNext(m_filesWindow, SLOT(slotFindForward()), actionCollection()); KStandardAction::findPrev(m_filesWindow, SLOT(slotFindBackward()), actionCollection()); i18n("Source &code"); struct { QString text; QWidget* w; QString id; QAction** act; } dw[] = { { i18n("Stac&k"), m_btWindow, "view_stack", &m_btWindowAction }, { i18n("&Locals"), m_localVariables, "view_locals", &m_localVariablesAction }, { i18n("&Watched expressions"), m_watches, "view_watched_expressions", &m_watchesAction }, { i18n("&Registers"), m_registers, "view_registers", &m_registersAction }, { i18n("&Breakpoints"), m_bpTable, "view_breakpoints", &m_bpTableAction }, { i18n("T&hreads"), m_threads, "view_threads", &m_threadsAction }, { i18n("&Output"), m_ttyWindow, "view_output", &m_ttyWindowAction }, { i18n("&Memory"), m_memoryWindow, "view_memory", &m_memoryWindowAction } }; for (unsigned i = 0; i < sizeof(dw)/sizeof(dw[0]); i++) { QDockWidget* d = dockParent(dw[i].w); *dw[i].act = new KToggleAction(dw[i].text, actionCollection()); actionCollection()->addAction(dw[i].id, *dw[i].act); connect(*dw[i].act, SIGNAL(triggered()), d, SLOT(show())); } // execution menu m_runAction = createAction(i18n("&Run"), "debug-run", Qt::Key_F5, m_debugger, SLOT(programRun()), "exec_run"); connect(m_runAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_stepIntoAction = createAction(i18n("Step &into"), "debug-step-into", Qt::Key_F8, m_debugger, SLOT(programStep()), "exec_step_into"); connect(m_stepIntoAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_stepOverAction = createAction(i18n("Step &over"), "debug-step-over", Qt::Key_F10, m_debugger, SLOT(programNext()), "exec_step_over"); connect(m_stepOverAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_stepOutAction = createAction(i18n("Step o&ut"), "debug-step-out", Qt::Key_F6, m_debugger, SLOT(programFinish()), "exec_step_out"); connect(m_stepOutAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_toCursorAction = createAction(i18n("Run to &cursor"), "debug-execute-to-cursor", Qt::Key_F7, this, SLOT(slotExecUntil()), "exec_run_to_cursor"); connect(m_toCursorAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_stepIntoIAction = createAction(i18n("Step i&nto by instruction"), "debug-step-into-instruction", Qt::SHIFT+Qt::Key_F8, m_debugger, SLOT(programStepi()), "exec_step_into_by_insn"); connect(m_stepIntoIAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_stepOverIAction = createAction(i18n("Step o&ver by instruction"), "debug-step-instruction", Qt::SHIFT+Qt::Key_F10, m_debugger, SLOT(programNexti()), "exec_step_over_by_insn"); connect(m_stepOverIAction, SIGNAL(activated()), this, SLOT(intoBackground())); m_execMovePCAction = createAction(i18n("&Program counter to current line"), "debug-run-cursor", 0, m_filesWindow, SLOT(slotMoveProgramCounter()), "exec_movepc"); m_breakAction = createAction(i18n("&Break"), 0, m_debugger, SLOT(programBreak()), "exec_break"); m_killAction = createAction(i18n("&Kill"), 0, m_debugger, SLOT(programKill()), "exec_kill"); m_restartAction = createAction(i18n("Re&start"), 0, m_debugger, SLOT(programRunAgain()), "exec_restart"); m_attachAction = createAction(i18n("A&ttach..."), 0, this, SLOT(slotExecAttach()), "exec_attach"); m_argumentsAction = createAction(i18n("&Arguments..."), 0, this, SLOT(slotExecArgs()), "exec_arguments"); // breakpoint menu m_bpSetAction = createAction(i18n("Set/Clear &breakpoint"), "brkpt", Qt::Key_F9, m_filesWindow, SLOT(slotBrkptSet()), "breakpoint_set"); m_bpSetTempAction = createAction(i18n("Set &temporary breakpoint"), Qt::SHIFT+Qt::Key_F9, m_filesWindow, SLOT(slotBrkptSetTemp()), "breakpoint_set_temporary"); m_bpEnableAction = createAction(i18n("&Enable/Disable breakpoint"), Qt::CTRL+Qt::Key_F9, m_filesWindow, SLOT(slotBrkptEnable()), "breakpoint_enable"); // only in popup menus createAction(i18n("Watch Expression"), 0, this, SLOT(slotLocalsToWatch()), "watch_expression"); m_editValueAction = createAction(i18n("Edit Value"), Qt::Key_F2, this, SLOT(slotEditValue()), "edit_value"); // all actions force an UI update QList actions = actionCollection()->actions(); foreach(QAction* action, actions) { connect(action, SIGNAL(activated()), this, SLOT(updateUI())); } } void DebuggerMainWnd::initAnimation() { KToolBar* toolbar = toolBar("mainToolBar"); m_animation = new KAnimatedButton(toolbar); toolbar->addWidget(m_animation); m_animation->setIcons("pulse"); connect(m_animation, SIGNAL(clicked(bool)), m_debugger, SLOT(programBreak())); m_animRunning = false; } void DebuggerMainWnd::initStatusBar() { KStatusBar* statusbar = statusBar(); statusbar->insertItem(m_statusActive, ID_STATUS_ACTIVE); m_lastActiveStatusText = m_statusActive; statusbar->insertItem("", ID_STATUS_MSG); /* message pane */ // reserve some translations i18n("Restart"); i18n("Core dump"); } bool DebuggerMainWnd::queryClose() { if (m_debugger != 0) { m_debugger->shutdown(); } return true; } // instance properties void DebuggerMainWnd::saveProperties(KConfigGroup& cg) { // session management QString executable = ""; if (m_debugger != 0) { executable = m_debugger->executable(); } cg.writeEntry("executable", executable); } void DebuggerMainWnd::readProperties(const KConfigGroup& cg) { // session management QString execName = cg.readEntry("executable"); TRACE("readProperties: executable=" + execName); if (!execName.isEmpty()) { debugProgram(execName, ""); } } static const char RecentExecutables[] = "RecentExecutables"; static const char LastSession[] = "LastSession"; static const char OutputWindowGroup[] = "OutputWindow"; static const char TermCmdStr[] = "TermCmdStr"; static const char KeepScript[] = "KeepScript"; static const char DebuggerGroup[] = "Debugger"; static const char DebuggerCmdStr[] = "DebuggerCmdStr"; static const char PreferencesGroup[] = "Preferences"; static const char PopForeground[] = "PopForeground"; static const char BackTimeout[] = "BackTimeout"; static const char TabWidth[] = "TabWidth"; static const char SourceFileFilter[] = "SourceFileFilter"; static const char HeaderFileFilter[] = "HeaderFileFilter"; void DebuggerMainWnd::saveSettings(KSharedConfigPtr config) { m_recentExecAction->saveEntries(config->group(RecentExecutables)); KConfigGroup lg = config->group(LastSession); lg.writeEntry("Width0Locals", m_localVariables->columnWidth(0)); lg.writeEntry("Width0Watches", m_watches->columnWidth(0)); if (m_debugger != 0) { m_debugger->saveSettings(config.data()); } config->group(OutputWindowGroup).writeEntry(TermCmdStr, m_outputTermCmdStr); config->group(DebuggerGroup).writeEntry(DebuggerCmdStr, m_debuggerCmdStr); KConfigGroup pg(config->group(PreferencesGroup)); pg.writeEntry(PopForeground, m_popForeground); pg.writeEntry(BackTimeout, m_backTimeout); pg.writeEntry(TabWidth, m_tabWidth); pg.writeEntry(SourceFileFilter, m_sourceFilter); pg.writeEntry(HeaderFileFilter, m_headerFilter); } void DebuggerMainWnd::restoreSettings(KSharedConfigPtr config) { m_recentExecAction->loadEntries(config->group(RecentExecutables)); KConfigGroup lg = config->group(LastSession); int w; w = lg.readEntry("Width0Locals", -1); if (w >= 0 && w < 30000) m_localVariables->setColumnWidth(0, w); w = lg.readEntry("Width0Watches", -1); if (w >= 0 && w < 30000) m_watches->setColumnWidth(0, w); if (m_debugger != 0) { m_debugger->restoreSettings(config.data()); } KConfigGroup og(config->group(OutputWindowGroup)); /* * For debugging and emergency purposes, let the config file override * the shell script that is used to keep the output window open. This * string must have EXACTLY 1 %s sequence in it. */ setTerminalCmd(og.readEntry(TermCmdStr, defaultTermCmdStr)); m_outputTermKeepScript = og.readEntry(KeepScript); setDebuggerCmdStr(config->group(DebuggerGroup).readEntry(DebuggerCmdStr)); KConfigGroup pg(config->group(PreferencesGroup)); m_popForeground = pg.readEntry(PopForeground, false); m_backTimeout = pg.readEntry(BackTimeout, 1000); m_tabWidth = pg.readEntry(TabWidth, 0); m_sourceFilter = pg.readEntry(SourceFileFilter, m_sourceFilter); m_headerFilter = pg.readEntry(HeaderFileFilter, m_headerFilter); emit setTabWidth(m_tabWidth); } void DebuggerMainWnd::updateUI() { m_findAction->setChecked(m_filesWindow->m_findDlg.isVisible()); m_findAction->setEnabled(m_filesWindow->hasWindows()); m_bpSetAction->setEnabled(m_debugger->canChangeBreakpoints()); m_bpSetTempAction->setEnabled(m_debugger->canChangeBreakpoints()); m_bpEnableAction->setEnabled(m_debugger->canChangeBreakpoints()); m_bpTableAction->setChecked(isDockVisible(m_bpTable)); m_btWindowAction->setChecked(isDockVisible(m_btWindow)); m_localVariablesAction->setChecked(isDockVisible(m_localVariables)); m_watchesAction->setChecked(isDockVisible(m_watches)); m_registersAction->setChecked(isDockVisible(m_registers)); m_threadsAction->setChecked(isDockVisible(m_threads)); m_memoryWindowAction->setChecked(isDockVisible(m_memoryWindow)); m_ttyWindowAction->setChecked(isDockVisible(m_ttyWindow)); m_fileExecAction->setEnabled(m_debugger->isIdle()); m_settingsAction->setEnabled(m_debugger->haveExecutable()); m_coreDumpAction->setEnabled(m_debugger->canStart()); m_closeAction->setEnabled(m_filesWindow->hasWindows()); m_reloadAction->setEnabled(m_filesWindow->hasWindows()); m_stepIntoAction->setEnabled(m_debugger->canSingleStep()); m_stepIntoIAction->setEnabled(m_debugger->canSingleStep()); m_stepOverAction->setEnabled(m_debugger->canSingleStep()); m_stepOverIAction->setEnabled(m_debugger->canSingleStep()); m_stepOutAction->setEnabled(m_debugger->canSingleStep()); m_toCursorAction->setEnabled(m_debugger->canSingleStep()); m_execMovePCAction->setEnabled(m_debugger->canSingleStep()); m_restartAction->setEnabled(m_debugger->canSingleStep()); m_attachAction->setEnabled(m_debugger->isReady()); m_runAction->setEnabled(m_debugger->canStart() || m_debugger->canSingleStep()); m_killAction->setEnabled(m_debugger->haveExecutable() && m_debugger->isProgramActive()); m_breakAction->setEnabled(m_debugger->isProgramRunning()); m_argumentsAction->setEnabled(m_debugger->haveExecutable()); m_editValueAction->setEnabled(m_debugger->canSingleStep()); // animation if (m_debugger->isIdle()) { if (m_animRunning && m_animation) { m_animation->stop(); m_animRunning = false; } } else { if (!m_animRunning && m_animation) { m_animation->start(); m_animRunning = true; } } // update statusbar QString newStatus; if (m_debugger->isProgramActive()) newStatus = m_statusActive; if (newStatus != m_lastActiveStatusText) { statusBar()->changeItem(newStatus, ID_STATUS_ACTIVE); m_lastActiveStatusText = newStatus; } } void DebuggerMainWnd::updateLineItems() { m_filesWindow->updateLineItems(m_debugger); } void DebuggerMainWnd::slotAddWatch() { if (m_debugger != 0) { QString t = m_watches->watchText(); m_debugger->addWatch(t); } } void DebuggerMainWnd::slotAddWatch(const QString& text) { if (m_debugger != 0) { m_debugger->addWatch(text); } } void DebuggerMainWnd::slotNewFileLoaded() { // updates program counter in the new file if (m_debugger != 0) m_filesWindow->updateLineItems(m_debugger); } QDockWidget* DebuggerMainWnd::dockParent(QWidget* w) { while ((w = w->parentWidget()) != 0) { if (QDockWidget* dock = qobject_cast(w)) return dock; } return 0; } bool DebuggerMainWnd::isDockVisible(QWidget* w) { QDockWidget* d = dockParent(w); return d != 0 && d->isVisible(); } void DebuggerMainWnd::makeDefaultLayout() { // +---------------+---------+ // | Source | Locals | // | | | // |---------------+---------+ // |Stack, Brkpts, | Watches | // |Output,... | | // +---------------+---------+ addDockWidget(Qt::RightDockWidgetArea, dockParent(m_localVariables)); addDockWidget(Qt::BottomDockWidgetArea, dockParent(m_memoryWindow)); splitDockWidget(dockParent(m_memoryWindow), dockParent(m_threads), Qt::Horizontal); tabifyDockWidget(dockParent(m_memoryWindow), dockParent(m_registers)); tabifyDockWidget(dockParent(m_registers), dockParent(m_bpTable)); tabifyDockWidget(dockParent(m_bpTable), dockParent(m_ttyWindow)); tabifyDockWidget(dockParent(m_ttyWindow), dockParent(m_btWindow)); tabifyDockWidget(dockParent(m_threads), dockParent(m_watches)); dockParent(m_localVariables)->setVisible(true); dockParent(m_ttyWindow)->setVisible(true); dockParent(m_watches)->setVisible(true); dockParent(m_btWindow)->setVisible(true); dockParent(m_bpTable)->setVisible(true); } bool DebuggerMainWnd::debugProgram(const QString& exe, const QString& lang) { // check the file name QFileInfo fi(exe); bool success = fi.isFile(); if (!success) { QString msg = i18n("`%1' is not a file or does not exist"); KMessageBox::sorry(this, msg.arg(exe)); } else { success = startDriver(fi.absoluteFilePath(), lang); } if (success) { m_recentExecAction->addUrl(KUrl(fi.absoluteFilePath())); // keep the directory m_lastDirectory = fi.absolutePath(); m_filesWindow->setExtraDirectory(m_lastDirectory); // set caption to basename part of executable QString caption = fi.fileName(); setCaption(caption); } else { m_recentExecAction->removeUrl(KUrl(fi.absoluteFilePath())); } return success; } static const char GeneralGroup[] = "General"; bool DebuggerMainWnd::startDriver(const QString& executable, QString lang) { assert(m_debugger != 0); TRACE(QString("trying language '%1'...").arg(lang)); DebuggerDriver* driver = driverFromLang(lang); if (driver == 0) { // see if there is a language in the per-program config file QString configName = m_debugger->getConfigForExe(executable); if (QFile::exists(configName)) { KConfig c(configName, KConfig::SimpleConfig); // Using "GDB" as default here is for backwards compatibility: // The config file exists but doesn't have an entry, // so it must have been created by an old version of KDbg // that had only the GDB driver. lang = c.group(GeneralGroup) .readEntry(KDebugger::DriverNameEntry, "GDB"); TRACE(QString("...bad, trying config driver %1...").arg(lang)); driver = driverFromLang(lang); } } if (driver == 0) { QString name = driverNameFromFile(executable); TRACE(QString("...no luck, trying %1 derived" " from file contents").arg(name)); driver = driverFromLang(name); } if (driver == 0) { // oops QString msg = i18n("Don't know how to debug language `%1'"); KMessageBox::sorry(this, msg.arg(lang)); return false; } driver->setLogFileName(m_transcriptFile); bool success = m_debugger->debugProgram(executable, driver); if (!success) { delete driver; QString msg = i18n("Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem."); KMessageBox::sorry(this, msg); } return success; } // derive driver from language DebuggerDriver* DebuggerMainWnd::driverFromLang(QString lang) { // lang is needed in all lowercase lang = lang.toLower(); // The following table relates languages and debugger drivers static const struct L { const char* shortest; // abbreviated to this is still unique const char* full; // full name of language int driver; } langs[] = { { "c", "c++", 1 }, { "f", "fortran", 1 }, { "p", "python", 3 }, { "x", "xslt", 2 }, // the following are actually driver names { "gdb", "gdb", 1 }, { "xsldbg", "xsldbg", 2 }, }; const int N = sizeof(langs)/sizeof(langs[0]); // lookup the language name int driverID = 0; for (int i = 0; i < N; i++) { const L& l = langs[i]; // shortest must match if (!lang.startsWith(l.shortest)) continue; // lang must not be longer than the full name, and it must match if (QString(l.full).startsWith(lang)) { driverID = l.driver; break; } } DebuggerDriver* driver = 0; switch (driverID) { case 1: { GdbDriver* gdb = new GdbDriver; gdb->setDefaultInvocation(m_debuggerCmdStr); driver = gdb; } break; case 2: driver = new XsldbgDriver; break; default: // unknown language break; } return driver; } /** * Try to guess the language to use from the contents of the file. */ QString DebuggerMainWnd::driverNameFromFile(const QString& exe) { /* Inprecise but simple test to see if file is in XSLT language */ if (exe.right(4).toLower() == ".xsl") return "XSLT"; return "GDB"; } void DebuggerMainWnd::setCoreFile(const QString& corefile) { assert(m_debugger != 0); m_debugger->useCoreFile(corefile, true); } void DebuggerMainWnd::setRemoteDevice(const QString& remoteDevice) { if (m_debugger != 0) { m_debugger->setRemoteDevice(remoteDevice); } } void DebuggerMainWnd::overrideProgramArguments(const QString& args) { assert(m_debugger != 0); m_debugger->overrideProgramArguments(args); } void DebuggerMainWnd::setTranscript(const QString& name) { m_transcriptFile = name; if (m_debugger != 0 && m_debugger->driver() != 0) m_debugger->driver()->setLogFileName(m_transcriptFile); } void DebuggerMainWnd::setAttachPid(const QString& pid) { assert(m_debugger != 0); m_debugger->setAttachPid(pid); } void DebuggerMainWnd::slotNewStatusMsg() { QString msg = m_debugger->statusMessage(); statusBar()->changeItem(msg, ID_STATUS_MSG); } void DebuggerMainWnd::slotFileGlobalSettings() { int oldTabWidth = m_tabWidth; KPageDialog dlg(this); QString title = KGlobal::caption(); title += i18n(": Global options"); dlg.setCaption(title); PrefDebugger prefDebugger(&dlg); prefDebugger.setDebuggerCmd(m_debuggerCmdStr.isEmpty() ? GdbDriver::defaultGdb() : m_debuggerCmdStr); prefDebugger.setTerminal(m_outputTermCmdStr); PrefMisc prefMisc(&dlg); prefMisc.setPopIntoForeground(m_popForeground); prefMisc.setBackTimeout(m_backTimeout); prefMisc.setTabWidth(m_tabWidth); prefMisc.setSourceFilter(m_sourceFilter); prefMisc.setHeaderFilter(m_headerFilter); dlg.addPage(&prefDebugger, i18n("Debugger")); dlg.addPage(&prefMisc, i18n("Miscellaneous")); if (dlg.exec() == QDialog::Accepted) { setDebuggerCmdStr(prefDebugger.debuggerCmd()); setTerminalCmd(prefDebugger.terminal()); m_popForeground = prefMisc.popIntoForeground(); m_backTimeout = prefMisc.backTimeout(); m_tabWidth = prefMisc.tabWidth(); m_sourceFilter = prefMisc.sourceFilter(); if (m_sourceFilter.isEmpty()) m_sourceFilter = defaultSourceFilter; m_headerFilter = prefMisc.headerFilter(); if (m_headerFilter.isEmpty()) m_headerFilter = defaultHeaderFilter; } if (m_tabWidth != oldTabWidth) { emit setTabWidth(m_tabWidth); } } void DebuggerMainWnd::setTerminalCmd(const QString& cmd) { m_outputTermCmdStr = cmd; // revert to default if empty if (m_outputTermCmdStr.isEmpty()) { m_outputTermCmdStr = defaultTermCmdStr; } } void DebuggerMainWnd::setDebuggerCmdStr(const QString& cmd) { m_debuggerCmdStr = cmd; // make empty if it is the default if (m_debuggerCmdStr == GdbDriver::defaultGdb()) { m_debuggerCmdStr = QString(); } } void DebuggerMainWnd::slotDebuggerStarting() { if (m_debugger == 0) /* paranoia check */ return; if (m_ttyLevel == m_debugger->ttyLevel()) return; // shut down terminal emulations we will not need switch (m_ttyLevel) { case KDebugger::ttySimpleOutputOnly: m_ttyWindow->deactivate(); break; case KDebugger::ttyFull: m_outputTermProc->kill(); break; default: break; } m_ttyLevel = m_debugger->ttyLevel(); QString ttyName; switch (m_ttyLevel) { case KDebugger::ttySimpleOutputOnly: ttyName = m_ttyWindow->activate(); break; case KDebugger::ttyFull: // create an output window ttyName = createOutputWindow(); TRACE(ttyName.isEmpty() ? "createOuputWindow failed" : "successfully created output window"); break; default: break; } m_debugger->setTerminal(ttyName); } void DebuggerMainWnd::slotToggleBreak(const QString& fileName, int lineNo, const DbgAddr& address, bool temp) { // lineNo is zero-based if (m_debugger != 0) { m_debugger->setBreakpoint(fileName, lineNo, address, temp); } } void DebuggerMainWnd::slotEnaDisBreak(const QString& fileName, int lineNo, const DbgAddr& address) { // lineNo is zero-based if (m_debugger != 0) { m_debugger->enableDisableBreakpoint(fileName, lineNo, address); } } QString DebuggerMainWnd::createOutputWindow() { // create a name for a fifo QString fifoName; fifoName.sprintf("/tmp/kdbgttywin%05d", ::getpid()); // create a fifo that will pass in the tty name QFile::remove(fifoName); // remove remnants #ifdef HAVE_MKFIFO if (::mkfifo(fifoName.toLocal8Bit(), S_IRUSR|S_IWUSR) < 0) { // failed TRACE("mkfifo " + fifoName + " failed"); return QString(); } #else if (::mknod(fifoName.toLocal8Bit(), S_IFIFO | S_IRUSR|S_IWUSR, 0) < 0) { // failed TRACE("mknod " + fifoName + " failed"); return QString(); } #endif /* * Spawn an xterm that in turn runs a shell script that passes us * back the terminal name and then only sits and waits. */ static const char shellScriptFmt[] = "tty>%s;" "trap \"\" INT QUIT TSTP;" /* ignore various signals */ "exec<&-;exec>&-;" /* close stdin and stdout */ "while :;do sleep 3600;done"; // let config file override this script QString shellScript; if (!m_outputTermKeepScript.isEmpty()) { shellScript = m_outputTermKeepScript; } else { shellScript = shellScriptFmt; } shellScript.replace("%s", fifoName); TRACE("output window script is " + shellScript); QString title = KGlobal::caption(); title += i18n(": Program output"); // parse the command line specified in the preferences QStringList cmdParts = m_outputTermCmdStr.split(' '); /* * Build the argv array. Thereby substitute special sequences: */ struct { char seq[4]; QString replace; } substitute[] = { { "%T", title }, { "%C", shellScript } }; for (QStringList::iterator i = cmdParts.begin(); i != cmdParts.end(); ++i) { QString& str = *i; for (int j = sizeof(substitute)/sizeof(substitute[0])-1; j >= 0; j--) { int pos = str.indexOf(substitute[j].seq); if (pos >= 0) { str.replace(pos, 2, substitute[j].replace); break; /* substitute only one sequence */ } } } QString tty, pgm = cmdParts.takeFirst(); m_outputTermProc->start(pgm, cmdParts); if (m_outputTermProc->waitForStarted()) { // read the ttyname from the fifo QFile f(fifoName); if (f.open(QIODevice::ReadOnly)) { QByteArray t = f.readAll(); tty = QString::fromLocal8Bit(t, t.size()); f.close(); } f.remove(); // remove whitespace tty = tty.trimmed(); TRACE("tty=" + tty); } else { // error, could not start xterm TRACE("fork failed for fifo " + fifoName); QFile::remove(fifoName); } return tty; } void DebuggerMainWnd::slotProgramStopped() { // when the program stopped, move the window to the foreground if (m_popForeground) { // unfortunately, this requires quite some force to work :-( KWindowSystem::raiseWindow(winId()); KWindowSystem::forceActiveWindow(winId()); } m_backTimer.stop(); } void DebuggerMainWnd::intoBackground() { if (m_popForeground) { m_backTimer.setSingleShot(true); m_backTimer.start(m_backTimeout); } } void DebuggerMainWnd::slotBackTimer() { lower(); } void DebuggerMainWnd::slotRecentExec(const KUrl& url) { QString exe = url.path(); debugProgram(exe, ""); } QString DebuggerMainWnd::makeSourceFilter() { QString f; f = m_sourceFilter + " " + m_headerFilter + i18n("|All source files\n"); f += m_sourceFilter + i18n("|Source files\n"); f += m_headerFilter + i18n("|Header files\n"); f += i18n("*|All files"); return f; } /* * Pop up the context menu in the locals window */ void DebuggerMainWnd::slotLocalsPopup(const QPoint& pt) { QMenu* popup = static_cast(factory()->container("popup_locals", this)); if (popup == 0) { return; } if (popup->isVisible()) { popup->hide(); } else { popup->popup(m_localVariables->viewport()->mapToGlobal(pt)); } } /* * Copies the currently selected item to the watch window. */ void DebuggerMainWnd::slotLocalsToWatch() { VarTree* item = m_localVariables->selectedItem(); if (item != 0 && m_debugger != 0) { QString text = item->computeExpr(); m_debugger->addWatch(text); } } /* * Starts editing a value in a value display */ void DebuggerMainWnd::slotEditValue() { // does one of the value trees have the focus QWidget* f = kapp->focusWidget(); ExprWnd* wnd; if (f == m_localVariables) { wnd = m_localVariables; } else if (f == m_watches->watchVariables()) { wnd = m_watches->watchVariables(); } else { return; } if (m_localVariables->isEditing() || m_watches->watchVariables()->isEditing()) { return; /* don't edit twice */ } VarTree* expr = wnd->selectedItem(); if (expr != 0 && m_debugger != 0 && m_debugger->canSingleStep()) { TRACE("edit value"); // determine the text to edit QString text = m_debugger->driver()->editableValue(expr); wnd->editValue(expr, text); } } // helper that gets a file name (it only differs in the caption of the dialog) static QString myGetFileName(QString caption, QString dir, QString filter, QWidget* parent) { QString filename; KFileDialog dlg(dir, filter, parent); dlg.setCaption(caption); if (dlg.exec() == QDialog::Accepted) filename = dlg.selectedFile(); return filename; } void DebuggerMainWnd::slotFileOpen() { // start browsing in the active file's directory // fall back to last used directory (executable) QString dir = m_lastDirectory; QString fileName = m_filesWindow->activeFileName(); if (!fileName.isEmpty()) { QFileInfo fi(fileName); dir = fi.path(); } fileName = myGetFileName(i18n("Open"), dir, makeSourceFilter(), this); if (!fileName.isEmpty()) { QFileInfo fi(fileName); m_lastDirectory = fi.path(); m_filesWindow->setExtraDirectory(m_lastDirectory); m_filesWindow->activateFile(fileName); } } void DebuggerMainWnd::slotFileExe() { if (m_debugger->isIdle()) { // open a new executable QString executable = myGetFileName(i18n("Select the executable to debug"), m_lastDirectory, 0, this); if (executable.isEmpty()) return; debugProgram(executable, ""); } } void DebuggerMainWnd::slotFileCore() { if (m_debugger->canStart()) { QString corefile = myGetFileName(i18n("Select core dump"), m_lastDirectory, 0, this); if (!corefile.isEmpty()) { m_debugger->useCoreFile(corefile, false); } } } void DebuggerMainWnd::slotFileProgSettings() { if (m_debugger != 0) { m_debugger->programSettings(this); } } void DebuggerMainWnd::slotViewStatusbar() { if (statusBar()->isVisible()) statusBar()->hide(); else statusBar()->show(); setSettingsDirty(); } void DebuggerMainWnd::slotExecUntil() { if (m_debugger != 0) { QString file; int lineNo; if (m_filesWindow->activeLine(file, lineNo)) m_debugger->runUntil(file, lineNo); } } void DebuggerMainWnd::slotExecAttach() { #ifdef PS_COMMAND ProcAttachPS dlg(this); // seed filter with executable name QFileInfo fi = m_debugger->executable(); dlg.setFilterText(fi.fileName()); #else ProcAttach dlg(this); dlg.setText(m_debugger->attachedPid()); #endif if (dlg.exec()) { m_debugger->attachProgram(dlg.text()); } } void DebuggerMainWnd::slotExecArgs() { if (m_debugger != 0) { m_debugger->programArgs(this); } } void DebuggerMainWnd::slotConfigureKeys() { KShortcutsDialog::configure(actionCollection()); } #include "dbgmainwnd.moc" kdbg-2.5.5/kdbg/dbgmainwnd.h000066400000000000000000000132071247243200200156230ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef DBGMAINWND_H #define DBGMAINWND_H #include #include #include #include "regwnd.h" class QDockWidget; class QProcess; class KAnimatedButton; class KRecentFilesAction; class KUrl; class WinStack; class QListWidget; class ExprWnd; class BreakpointTable; class ThreadList; class MemoryWindow; class TTYWindow; class WatchWindow; class KDebugger; class DebuggerDriver; struct DbgAddr; class DebuggerMainWnd : public KXmlGuiWindow { Q_OBJECT public: DebuggerMainWnd(); ~DebuggerMainWnd(); bool debugProgram(const QString& exe, const QString& lang); /** * Specifies the file where to write the transcript. */ void setTranscript(const QString& name); /** * Specifies the process to attach to after the program is loaded. */ void setAttachPid(const QString& pid); // the following are needed to handle program arguments void setCoreFile(const QString& corefile); void setRemoteDevice(const QString &remoteDevice); void overrideProgramArguments(const QString& args); protected: // session properties virtual void saveProperties(KConfigGroup& cg); virtual void readProperties(const KConfigGroup& cg); // settings void saveSettings(KSharedConfigPtr); void restoreSettings(KSharedConfigPtr); void initAnimation(); void initStatusBar(); void initKAction(); // view windows WinStack* m_filesWindow; QListWidget* m_btWindow; ExprWnd* m_localVariables; WatchWindow* m_watches; RegisterView* m_registers; BreakpointTable* m_bpTable; TTYWindow* m_ttyWindow; ThreadList* m_threads; MemoryWindow* m_memoryWindow; QTimer m_backTimer; // recent execs in File menu QAction* m_closeAction; QAction* m_reloadAction; QAction* m_fileExecAction; KRecentFilesAction* m_recentExecAction; QAction* m_coreDumpAction; QAction* m_settingsAction; QAction* m_findAction; QAction* m_btWindowAction; QAction* m_localVariablesAction; QAction* m_watchesAction; QAction* m_registersAction; QAction* m_bpTableAction; QAction* m_ttyWindowAction; QAction* m_threadsAction; QAction* m_memoryWindowAction; QAction* m_runAction; QAction* m_stepIntoAction; QAction* m_stepOverAction; QAction* m_stepOutAction; QAction* m_toCursorAction; QAction* m_stepIntoIAction; QAction* m_stepOverIAction; QAction* m_execMovePCAction; QAction* m_breakAction; QAction* m_killAction; QAction* m_restartAction; QAction* m_attachAction; QAction* m_argumentsAction; QAction* m_bpSetAction; QAction* m_bpSetTempAction; QAction* m_bpEnableAction; QAction* m_editValueAction; QString m_lastDirectory; /* the dir of the most recently opened file */ protected: virtual bool queryClose(); QAction* createAction(const QString& text, const char* icon, int shortcut, const QObject* receiver, const char* slot, const char* name); QAction* createAction(const QString& text, int shortcut, const QObject* receiver, const char* slot, const char* name); // the debugger proper QString m_debuggerCmdStr; KDebugger* m_debugger; QString m_transcriptFile; /* where gdb dialog is logged */ /** * Starts to debug the specified program using the specified language * driver. */ bool startDriver(const QString& executable, QString lang); DebuggerDriver* driverFromLang(QString lang); /** * Derives a driver name from the contents of the named file. */ QString driverNameFromFile(const QString& exe); // output window QString m_outputTermCmdStr; QString m_outputTermKeepScript; QProcess* m_outputTermProc; int m_ttyLevel; QString createOutputWindow(); bool m_popForeground; /* whether main wnd raises when prog stops */ int m_backTimeout; /* when wnd goes back */ int m_tabWidth; /* tab width in characters (can be 0) */ QString m_sourceFilter; QString m_headerFilter; void setTerminalCmd(const QString& cmd); void setDebuggerCmdStr(const QString& cmd); QDockWidget* createDockWidget(const char* name, const QString& title); QDockWidget* dockParent(QWidget* w); bool isDockVisible(QWidget* w); void makeDefaultLayout(); QString makeSourceFilter(); // to avoid flicker when the status bar is updated, // we store the last string that we put there QPointer m_animation; QString m_lastActiveStatusText; bool m_animRunning; // statusbar texts QString m_statusActive; signals: void setTabWidth(int tabWidth); public slots: virtual void updateUI(); virtual void updateLineItems(); void slotAddWatch(); void slotAddWatch(const QString& text); void slotNewFileLoaded(); void slotNewStatusMsg(); void slotDebuggerStarting(); void slotToggleBreak(const QString&, int, const DbgAddr&, bool); void slotEnaDisBreak(const QString&, int, const DbgAddr&); void slotProgramStopped(); void slotBackTimer(); void slotRecentExec(const KUrl& url); void slotLocalsPopup(const QPoint& pt); void slotLocalsToWatch(); void slotEditValue(); void slotFileOpen(); void slotFileExe(); void slotFileCore(); void slotFileGlobalSettings(); void slotFileProgSettings(); void slotViewStatusbar(); void slotExecUntil(); void slotExecAttach(); void slotExecArgs(); void intoBackground(); void slotConfigureKeys(); }; #endif // DBGMAINWND_H kdbg-2.5.5/kdbg/debugger.cpp000066400000000000000000001617411247243200200156370ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "debugger.h" #include "dbgdriver.h" #include "pgmargs.h" #include "typetable.h" #include "exprwnd.h" #include "pgmsettings.h" #include #include #include #include // KMD5 #include #include /* i18n */ #include #include #include #include /* strtol, atoi */ #include /* sleep(3) */ #include #include "mydebug.h" KDebugger::KDebugger(QWidget* parent, ExprWnd* localVars, ExprWnd* watchVars, QListWidget* backtrace) : QObject(parent), m_ttyLevel(ttyFull), m_memoryFormat(MDTword | MDThex), m_haveExecutable(false), m_programActive(false), m_programRunning(false), m_sharedLibsListed(false), m_typeTable(0), m_programConfig(0), m_d(0), m_localVariables(*localVars), m_watchVariables(*watchVars), m_btWindow(*backtrace) { connect(&m_localVariables, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotExpanding(QTreeWidgetItem*))); connect(&m_watchVariables, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotExpanding(QTreeWidgetItem*))); connect(&m_localVariables, SIGNAL(editValueCommitted(VarTree*, const QString&)), SLOT(slotValueEdited(VarTree*, const QString&))); connect(&m_watchVariables, SIGNAL(editValueCommitted(VarTree*, const QString&)), SLOT(slotValueEdited(VarTree*, const QString&))); connect(&m_btWindow, SIGNAL(currentRowChanged(int)), this, SLOT(gotoFrame(int))); emit updateUI(); } KDebugger::~KDebugger() { if (m_programConfig != 0) { saveProgramSettings(); m_programConfig->sync(); delete m_programConfig; } delete m_typeTable; } void KDebugger::saveSettings(KConfig* /*config*/) { } void KDebugger::restoreSettings(KConfig* /*config*/) { } ////////////////////////////////////////////////////////////////////// // external interface const char GeneralGroup[] = "General"; const char DebuggerCmdStr[] = "DebuggerCmdStr"; const char TTYLevelEntry[] = "TTYLevel"; const char KDebugger::DriverNameEntry[] = "DriverName"; bool KDebugger::debugProgram(const QString& name, DebuggerDriver* driver) { if (m_d != 0 && m_d->isRunning()) { QApplication::setOverrideCursor(Qt::WaitCursor); stopDriver(); QApplication::restoreOverrideCursor(); if (m_d->isRunning() || m_haveExecutable) { /* timed out! We can't really do anything useful now */ TRACE("timed out while waiting for gdb to die!"); return false; } delete m_d; m_d = 0; } // wire up the driver connect(driver, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)), this, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&))); connect(driver, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(gdbExited())); connect(driver, SIGNAL(commandReceived(CmdQueueItem*,const char*)), SLOT(parse(CmdQueueItem*,const char*))); connect(driver, SIGNAL(bytesWritten(qint64)), SIGNAL(updateUI())); connect(driver, SIGNAL(inferiorRunning()), SLOT(slotInferiorRunning())); connect(driver, SIGNAL(enterIdleState()), SLOT(backgroundUpdate())); connect(driver, SIGNAL(enterIdleState()), SIGNAL(updateUI())); connect(&m_localVariables, SIGNAL(removingItem(VarTree*)), driver, SLOT(dequeueCmdByVar(VarTree*))); connect(&m_watchVariables, SIGNAL(removingItem(VarTree*)), driver, SLOT(dequeueCmdByVar(VarTree*))); // create the program settings object openProgramConfig(name); // get debugger command from per-program settings if (m_programConfig != 0) { KConfigGroup g = m_programConfig->group(GeneralGroup); m_debuggerCmd = readDebuggerCmd(g); // get terminal emulation level m_ttyLevel = TTYLevel(g.readEntry(TTYLevelEntry, int(ttyFull))); } // the rest is read in later in the handler of DCexecutable m_d = driver; if (!startDriver()) { TRACE("startDriver failed"); m_d = 0; return false; } TRACE("before file cmd"); m_d->executeCmd(DCexecutable, name); m_executable = name; // set remote target if (!m_remoteDevice.isEmpty()) { m_d->executeCmd(DCtargetremote, m_remoteDevice); m_d->queueCmd(DCbt, DebuggerDriver::QMoverride); m_d->queueCmd(DCinfothreads, DebuggerDriver::QMoverride); m_d->queueCmd(DCframe, 0, DebuggerDriver::QMnormal); m_programActive = true; m_haveExecutable = true; } // create a type table m_typeTable = new ProgramTypeTable; m_sharedLibsListed = false; emit updateUI(); return true; } void KDebugger::shutdown() { // shut down debugger driver if (m_d != 0 && m_d->isRunning()) { stopDriver(); } } void KDebugger::useCoreFile(QString corefile, bool batch) { m_corefile = corefile; if (!batch) { CmdQueueItem* cmd = loadCoreFile(); cmd->m_byUser = true; } } void KDebugger::setAttachPid(const QString& pid) { m_attachedPid = pid; } void KDebugger::programRun() { if (!isReady()) return; // when program is active, but not a core file, continue // otherwise run the program if (m_programActive && m_corefile.isEmpty()) { // gdb command: continue m_d->executeCmd(DCcont, true); } else { // gdb command: run m_d->executeCmd(DCrun, true); m_corefile = QString(); m_programActive = true; } m_programRunning = true; } void KDebugger::attachProgram(const QString& pid) { if (!isReady()) return; m_attachedPid = pid; TRACE("Attaching to " + m_attachedPid); m_d->executeCmd(DCattach, m_attachedPid); m_programActive = true; m_programRunning = true; } void KDebugger::programRunAgain() { if (canSingleStep()) { m_d->executeCmd(DCrun, true); m_corefile = QString(); m_programRunning = true; } } void KDebugger::programStep() { if (canSingleStep()) { m_d->executeCmd(DCstep, true); m_programRunning = true; } } void KDebugger::programNext() { if (canSingleStep()) { m_d->executeCmd(DCnext, true); m_programRunning = true; } } void KDebugger::programStepi() { if (canSingleStep()) { m_d->executeCmd(DCstepi, true); m_programRunning = true; } } void KDebugger::programNexti() { if (canSingleStep()) { m_d->executeCmd(DCnexti, true); m_programRunning = true; } } void KDebugger::programFinish() { if (canSingleStep()) { m_d->executeCmd(DCfinish, true); m_programRunning = true; } } void KDebugger::programKill() { if (haveExecutable() && isProgramActive()) { if (m_programRunning) { m_d->interruptInferior(); } // this is an emergency command; flush queues m_d->flushCommands(true); m_d->executeCmd(DCkill, true); } } bool KDebugger::runUntil(const QString& fileName, int lineNo) { if (isReady() && m_programActive && !m_programRunning) { // strip off directory part of file name QFileInfo fi(fileName); m_d->executeCmd(DCuntil, fi.fileName(), lineNo, true); m_programRunning = true; return true; } else { return false; } } void KDebugger::programBreak() { if (m_haveExecutable && m_programRunning) { m_d->interruptInferior(); } } void KDebugger::programArgs(QWidget* parent) { if (m_haveExecutable) { QStringList allOptions = m_d->boolOptionList(); PgmArgs dlg(parent, m_executable, m_envVars, allOptions); dlg.setArgs(m_programArgs); dlg.setWd(m_programWD); dlg.setOptions(m_boolOptions); if (dlg.exec()) { updateProgEnvironment(dlg.args(), dlg.wd(), dlg.envVars(), dlg.options()); } } } void KDebugger::programSettings(QWidget* parent) { if (!m_haveExecutable) return; ProgramSettings dlg(parent, m_executable); dlg.m_chooseDriver.setDebuggerCmd(m_debuggerCmd); dlg.m_output.setTTYLevel(m_ttyLevel); if (dlg.exec() == QDialog::Accepted) { m_debuggerCmd = dlg.m_chooseDriver.debuggerCmd(); m_ttyLevel = TTYLevel(dlg.m_output.ttyLevel()); } } bool KDebugger::setBreakpoint(QString file, int lineNo, const DbgAddr& address, bool temporary) { if (!isReady()) { return false; } BrkptIterator bp = breakpointByFilePos(file, lineNo, address); if (bp == m_brkpts.end()) { /* * No such breakpoint, so set a new one. If we have an address, we * set the breakpoint exactly there. Otherwise we use the file name * plus line no. */ Breakpoint* bp = new Breakpoint; bp->temporary = temporary; if (address.isEmpty()) { bp->fileName = file; bp->lineNo = lineNo; } else { bp->address = address; } setBreakpoint(bp, false); } else { /* * If the breakpoint is disabled, enable it; if it's enabled, * delete that breakpoint. */ if (bp->enabled) { deleteBreakpoint(bp); } else { enableDisableBreakpoint(bp); } } return true; } void KDebugger::setBreakpoint(Breakpoint* bp, bool queueOnly) { CmdQueueItem* cmd = executeBreakpoint(bp, queueOnly); cmd->m_brkpt = bp; // used in newBreakpoint() } CmdQueueItem* KDebugger::executeBreakpoint(const Breakpoint* bp, bool queueOnly) { CmdQueueItem* cmd; if (!bp->text.isEmpty()) { /* * The breakpoint was set using the text box in the breakpoint * list. This is the only way in which watchpoints are set. */ if (bp->type == Breakpoint::watchpoint) { cmd = m_d->executeCmd(DCwatchpoint, bp->text); } else { cmd = m_d->executeCmd(DCbreaktext, bp->text); } } else if (bp->address.isEmpty()) { // strip off directory part of file name QString file = QFileInfo(bp->fileName).fileName(); if (queueOnly) { cmd = m_d->queueCmd(bp->temporary ? DCtbreakline : DCbreakline, file, bp->lineNo, DebuggerDriver::QMoverride); } else { cmd = m_d->executeCmd(bp->temporary ? DCtbreakline : DCbreakline, file, bp->lineNo); } } else { if (queueOnly) { cmd = m_d->queueCmd(bp->temporary ? DCtbreakaddr : DCbreakaddr, bp->address.asString(), DebuggerDriver::QMoverride); } else { cmd = m_d->executeCmd(bp->temporary ? DCtbreakaddr : DCbreakaddr, bp->address.asString()); } } return cmd; } bool KDebugger::infoLine(QString file, int lineNo, const DbgAddr& addr) { if (isReady() && !m_programRunning) { CmdQueueItem* cmd = m_d->executeCmd(DCinfoline, file, lineNo); cmd->m_addr = addr; return true; } else { return false; } } bool KDebugger::enableDisableBreakpoint(QString file, int lineNo, const DbgAddr& address) { BrkptIterator bp = breakpointByFilePos(file, lineNo, address); return enableDisableBreakpoint(bp); } bool KDebugger::enableDisableBreakpoint(BrkptIterator bp) { if (bp == m_brkpts.end()) return false; /* * Toggle enabled/disabled state. * * The driver is not bothered if we are modifying an orphaned * breakpoint. */ if (!bp->isOrphaned()) { if (!canChangeBreakpoints()) { return false; } m_d->executeCmd(bp->enabled ? DCdisable : DCenable, bp->id); } else { bp->enabled = !bp->enabled; emit breakpointsChanged(); } return true; } bool KDebugger::conditionalBreakpoint(BrkptIterator bp, const QString& condition, int ignoreCount) { if (bp == m_brkpts.end()) return false; /* * Change the condition and ignore count. * * The driver is not bothered if we are removing an orphaned * breakpoint. */ if (!bp->isOrphaned()) { if (!canChangeBreakpoints()) { return false; } bool changed = false; if (bp->condition != condition) { // change condition m_d->executeCmd(DCcondition, condition, bp->id); changed = true; } if (bp->ignoreCount != ignoreCount) { // change ignore count m_d->executeCmd(DCignore, bp->id, ignoreCount); changed = true; } if (changed) { // get the changes m_d->queueCmd(DCinfobreak, DebuggerDriver::QMoverride); } } else { bp->condition = condition; bp->ignoreCount = ignoreCount; emit breakpointsChanged(); } return true; } bool KDebugger::deleteBreakpoint(BrkptIterator bp) { if (bp == m_brkpts.end()) return false; /* * Remove the breakpoint. * * The driver is not bothered if we are removing an orphaned * breakpoint. */ if (!bp->isOrphaned()) { if (!canChangeBreakpoints()) { return false; } m_d->executeCmd(DCdelete, bp->id); } else { m_brkpts.erase(bp); emit breakpointsChanged(); } return false; } bool KDebugger::canSingleStep() { return isReady() && m_programActive && !m_programRunning; } bool KDebugger::canChangeBreakpoints() { return isReady() && !m_programRunning; } bool KDebugger::canStart() { return isReady() && !m_programActive; } bool KDebugger::isReady() const { return m_haveExecutable && m_d != 0 && m_d->canExecuteImmediately(); } bool KDebugger::isIdle() const { return m_d == 0 || m_d->isIdle(); } ////////////////////////////////////////////////////////// // debugger driver bool KDebugger::startDriver() { emit debuggerStarting(); /* must set m_inferiorTerminal */ /* * If the per-program command string is empty, use the global setting * (which might also be empty, in which case the driver uses its * default). */ m_explicitKill = false; if (!m_d->startup(m_debuggerCmd)) { return false; } /* * If we have an output terminal, we use it. Otherwise we will run the * program with input and output redirected to /dev/null. Other * redirections are also necessary depending on the tty emulation * level. */ int redirect = RDNstdin|RDNstdout|RDNstderr; /* redirect everything */ if (!m_inferiorTerminal.isEmpty()) { switch (m_ttyLevel) { default: case ttyNone: // redirect everything break; case ttySimpleOutputOnly: redirect = RDNstdin; break; case ttyFull: redirect = 0; break; } } m_d->executeCmd(DCtty, m_inferiorTerminal, redirect); return true; } void KDebugger::stopDriver() { m_explicitKill = true; if (m_attachedPid.isEmpty()) { m_d->terminate(); } else { m_d->detachAndTerminate(); } /* * We MUST wait until the slot gdbExited() has been called. But to * avoid a deadlock, we wait only for some certain maximum time. Should * this timeout be reached, the only reasonable thing one could do then * is exiting kdbg. */ QApplication::processEvents(QEventLoop::AllEvents, 1000); int maxTime = 20; /* about 20 seconds */ while (m_haveExecutable && maxTime > 0) { // give gdb time to die (and send a SIGCLD) ::sleep(1); --maxTime; QApplication::processEvents(QEventLoop::AllEvents, 1000); } } void KDebugger::gdbExited() { /* * Save settings, but only if gdb has already processed "info line * main", otherwise we would save an empty config file, because it * isn't read in until then! */ if (m_programConfig != 0) { if (m_haveExecutable) { saveProgramSettings(); m_programConfig->sync(); } delete m_programConfig; m_programConfig = 0; } // erase types delete m_typeTable; m_typeTable = 0; if (m_explicitKill) { TRACE(m_d->driverName() + " exited normally"); } else { QString msg = i18n("%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)."); KMessageBox::error(parentWidget(), msg.arg(m_d->driverName())); } // reset state m_haveExecutable = false; m_executable = ""; m_programActive = false; m_programRunning = false; m_explicitKill = false; m_debuggerCmd = QString(); /* use global setting at next start! */ m_attachedPid = QString(); /* we are no longer attached to a process */ m_ttyLevel = ttyFull; m_brkpts.clear(); // erase PC emit updatePC(QString(), -1, DbgAddr(), 0); } QString KDebugger::getConfigForExe(const QString& name) { QFileInfo fi(name); QString dir = fi.absolutePath(); // The session file for the given executable consists of // a hash of the directory, followed by the program name. // Assume that the first 15 positions of the hash are unique; // this keeps the file names short. QString hash = KMD5(dir.toUtf8()).base64Digest(); hash.replace('/', QString()); // avoid directory separators QString pgmConfigFile = hash.left(15) + "-" + fi.fileName(); pgmConfigFile = KStandardDirs::locateLocal("sessions", pgmConfigFile); TRACE("program config file = " + pgmConfigFile); return pgmConfigFile; } void KDebugger::openProgramConfig(const QString& name) { ASSERT(m_programConfig == 0); QString pgmConfigFile = getConfigForExe(name); m_programConfig = new KConfig(pgmConfigFile); // this leaves a clue behind in the config file which // executable it applies to; it is mostly intended for // users peeking into the file KConfigGroup g = m_programConfig->group(GeneralGroup); g.writeEntry("ExecutableFile", name); } const char EnvironmentGroup[] = "Environment"; const char WatchGroup[] = "Watches"; const char FileVersion[] = "FileVersion"; const char ProgramArgs[] = "ProgramArgs"; const char WorkingDirectory[] = "WorkingDirectory"; const char OptionsSelected[] = "OptionsSelected"; const char Variable[] = "Var%d"; const char Value[] = "Value%d"; const char ExprFmt[] = "Expr%d"; void KDebugger::saveProgramSettings() { ASSERT(m_programConfig != 0); KConfigGroup gg = m_programConfig->group(GeneralGroup); gg.writeEntry(FileVersion, 1); gg.writeEntry(ProgramArgs, m_programArgs); gg.writeEntry(WorkingDirectory, m_programWD); gg.writeEntry(OptionsSelected, m_boolOptions.toList()); gg.writeEntry(DebuggerCmdStr, m_debuggerCmd); gg.writeEntry(TTYLevelEntry, int(m_ttyLevel)); QString driverName; if (m_d != 0) driverName = m_d->driverName(); gg.writeEntry(DriverNameEntry, driverName); // write environment variables m_programConfig->deleteGroup(EnvironmentGroup); KConfigGroup eg = m_programConfig->group(EnvironmentGroup); QString varName; QString varValue; int i = 0; for (std::map::iterator it = m_envVars.begin(); it != m_envVars.end(); ++it, ++i) { varName.sprintf(Variable, i); varValue.sprintf(Value, i); eg.writeEntry(varName, it->first); eg.writeEntry(varValue, it->second); } saveBreakpoints(m_programConfig); // watch expressions // first get rid of whatever was in this group m_programConfig->deleteGroup(WatchGroup); // then start a new group KConfigGroup wg = m_programConfig->group(WatchGroup); int watchNum = 0; foreach (QString expr, m_watchVariables.exprList()) { varName.sprintf(ExprFmt, watchNum++); wg.writeEntry(varName, expr); } // give others a chance emit saveProgramSpecific(m_programConfig); } void KDebugger::overrideProgramArguments(const QString& args) { ASSERT(m_programConfig != 0); KConfigGroup g = m_programConfig->group(GeneralGroup); g.writeEntry(ProgramArgs, args); } void KDebugger::restoreProgramSettings() { ASSERT(m_programConfig != 0); KConfigGroup gg = m_programConfig->group(GeneralGroup); /* * We ignore file version for now we will use it in the future to * distinguish different versions of this configuration file. */ // m_debuggerCmd has been read in already // m_ttyLevel has been read in already QString pgmArgs = gg.readEntry(ProgramArgs); QString pgmWd = gg.readEntry(WorkingDirectory); QSet boolOptions = QSet::fromList(gg.readEntry(OptionsSelected, QStringList())); m_boolOptions.clear(); // read environment variables KConfigGroup eg = m_programConfig->group(EnvironmentGroup); m_envVars.clear(); std::map pgmVars; QString varName; QString varValue; for (int i = 0;; ++i) { varName.sprintf(Variable, i); varValue.sprintf(Value, i); if (!eg.hasKey(varName)) { /* entry not present, assume that we've hit them all */ break; } QString name = eg.readEntry(varName, QString()); if (name.isEmpty()) { // skip empty names continue; } EnvVar* var = &pgmVars[name]; var->value = eg.readEntry(varValue, QString()); var->status = EnvVar::EVnew; } updateProgEnvironment(pgmArgs, pgmWd, pgmVars, boolOptions); restoreBreakpoints(m_programConfig); // watch expressions KConfigGroup wg = m_programConfig->group(WatchGroup); m_watchVariables.clear(); for (int i = 0;; ++i) { varName.sprintf(ExprFmt, i); if (!wg.hasKey(varName)) { /* entry not present, assume that we've hit them all */ break; } QString expr = wg.readEntry(varName, QString()); if (expr.isEmpty()) { // skip empty expressions continue; } addWatch(expr); } // give others a chance emit restoreProgramSpecific(m_programConfig); } /** * Reads the debugger command line from the program settings. The config * group must have been set by the caller. */ QString KDebugger::readDebuggerCmd(const KConfigGroup& g) { QString debuggerCmd = g.readEntry(DebuggerCmdStr); // always let the user confirm the debugger cmd if we are root if (::geteuid() == 0) { if (!debuggerCmd.isEmpty()) { QString msg = i18n( "The settings for this program specify " "the following debugger command:\n%1\n" "Shall this command be used?"); if (KMessageBox::warningYesNo(parentWidget(), msg.arg(debuggerCmd)) != KMessageBox::Yes) { // don't use it debuggerCmd = QString(); } } } return debuggerCmd; } /* * Breakpoints are saved one per group. */ const char BPGroup[] = "Breakpoint %d"; const char File[] = "File"; const char Line[] = "Line"; const char Text[] = "Text"; const char Address[] = "Address"; const char Temporary[] = "Temporary"; const char Enabled[] = "Enabled"; const char Condition[] = "Condition"; void KDebugger::saveBreakpoints(KConfig* config) { QString groupName; int i = 0; for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->type == Breakpoint::watchpoint) continue; /* don't save watchpoints */ groupName.sprintf(BPGroup, i++); /* remove remmants */ config->deleteGroup(groupName); KConfigGroup g = config->group(groupName); if (!bp->text.isEmpty()) { /* * The breakpoint was set using the text box in the breakpoint * list. We do not save the location by filename+line number, * but instead honor what the user typed (a function name, for * example, which could move between sessions). */ g.writeEntry(Text, bp->text); } else if (!bp->fileName.isEmpty()) { g.writeEntry(File, bp->fileName); g.writeEntry(Line, bp->lineNo); /* * Addresses are hardly correct across sessions, so we don't * save it. */ } else { g.writeEntry(Address, bp->address.asString()); } g.writeEntry(Temporary, bp->temporary); g.writeEntry(Enabled, bp->enabled); if (!bp->condition.isEmpty()) g.writeEntry(Condition, bp->condition); // we do not save the ignore count } // delete remaining groups // we recognize that a group is present if there is an Enabled entry for (;; i++) { groupName.sprintf(BPGroup, i); if (!config->group(groupName).hasKey(Enabled)) { /* group not present, assume that we've hit them all */ break; } config->deleteGroup(groupName); } } void KDebugger::restoreBreakpoints(KConfig* config) { QString groupName; /* * We recognize the end of the list if there is no Enabled entry * present. */ for (int i = 0;; i++) { groupName.sprintf(BPGroup, i); KConfigGroup g = config->group(groupName); if (!g.hasKey(Enabled)) { /* group not present, assume that we've hit them all */ break; } Breakpoint* bp = new Breakpoint; bp->fileName = g.readEntry(File); bp->lineNo = g.readEntry(Line, -1); bp->text = g.readEntry(Text); bp->address = g.readEntry(Address); // check consistency if ((bp->fileName.isEmpty() || bp->lineNo < 0) && bp->text.isEmpty() && bp->address.isEmpty()) { delete bp; continue; } bp->enabled = g.readEntry(Enabled, true); bp->temporary = g.readEntry(Temporary, false); bp->condition = g.readEntry(Condition); /* * Add the breakpoint. */ setBreakpoint(bp, false); // the new breakpoint is disabled or conditionalized later // in newBreakpoint() } m_d->queueCmd(DCinfobreak, DebuggerDriver::QMoverride); } // parse output of command cmd void KDebugger::parse(CmdQueueItem* cmd, const char* output) { ASSERT(cmd != 0); /* queue mustn't be empty */ TRACE(QString(__PRETTY_FUNCTION__) + " parsing " + output); switch (cmd->m_cmd) { case DCtargetremote: // the output (if any) is uninteresting case DCsetargs: case DCtty: // there is no output case DCsetenv: case DCunsetenv: case DCsetoption: /* if value is empty, we see output, but we don't care */ break; case DCcd: /* display gdb's message in the status bar */ m_d->parseChangeWD(output, m_statusMessage); emit updateStatusMessage(); break; case DCinitialize: break; case DCexecutable: if (m_d->parseChangeExecutable(output, m_statusMessage)) { // success; restore breakpoints etc. if (m_programConfig != 0) { restoreProgramSettings(); } // load file containing main() or core file if (!m_corefile.isEmpty()) { // load core file loadCoreFile(); } else if (!m_attachedPid.isEmpty()) { m_d->queueCmd(DCattach, m_attachedPid, DebuggerDriver::QMoverride); m_programActive = true; m_programRunning = true; } else if (!m_remoteDevice.isEmpty()) { // handled elsewhere } else { m_d->queueCmd(DCinfolinemain, DebuggerDriver::QMnormal); } if (!m_statusMessage.isEmpty()) emit updateStatusMessage(); } else { QString msg = m_d->driverName() + ": " + m_statusMessage; KMessageBox::sorry(parentWidget(), msg); m_executable = ""; m_corefile = ""; /* don't process core file */ m_haveExecutable = false; } break; case DCcorefile: // in any event we have an executable at this point m_haveExecutable = true; if (m_d->parseCoreFile(output)) { // loading a core is like stopping at a breakpoint m_programActive = true; handleRunCommands(output); // do not reset m_corefile } else { // report error QString msg = m_d->driverName() + ": " + QString(output); KMessageBox::sorry(parentWidget(), msg); // if core file was loaded from command line, revert to info line main if (!cmd->m_byUser) { m_d->queueCmd(DCinfolinemain, DebuggerDriver::QMnormal); } m_corefile = QString(); /* core file not available any more */ } break; case DCinfolinemain: // ignore the output, marked file info follows m_haveExecutable = true; break; case DCinfolocals: // parse local variables if (output[0] != '\0') { handleLocals(output); } break; case DCinforegisters: handleRegisters(output); break; case DCexamine: handleMemoryDump(output); break; case DCinfoline: handleInfoLine(cmd, output); break; case DCdisassemble: handleDisassemble(cmd, output); break; case DCframe: handleFrameChange(output); updateAllExprs(); break; case DCbt: handleBacktrace(output); updateAllExprs(); break; case DCprint: handlePrint(cmd, output); break; case DCprintDeref: handlePrintDeref(cmd, output); break; case DCattach: m_haveExecutable = true; // fall through case DCrun: case DCcont: case DCstep: case DCstepi: case DCnext: case DCnexti: case DCfinish: case DCuntil: case DCthread: handleRunCommands(output); break; case DCkill: m_programRunning = m_programActive = false; // erase PC emit updatePC(QString(), -1, DbgAddr(), 0); break; case DCbreaktext: case DCbreakline: case DCtbreakline: case DCbreakaddr: case DCtbreakaddr: case DCwatchpoint: newBreakpoint(cmd, output); // fall through case DCdelete: case DCenable: case DCdisable: // these commands need immediate response m_d->queueCmd(DCinfobreak, DebuggerDriver::QMoverrideMoreEqual); break; case DCinfobreak: // note: this handler must not enqueue a command, since // DCinfobreak is used at various different places. updateBreakList(output); break; case DCfindType: handleFindType(cmd, output); break; case DCprintStruct: case DCprintQStringStruct: case DCprintWChar: handlePrintStruct(cmd, output); break; case DCinfosharedlib: handleSharedLibs(output); break; case DCcondition: case DCignore: // we are not interested in the output break; case DCinfothreads: handleThreadList(output); break; case DCsetpc: handleSetPC(output); break; case DCsetvariable: handleSetVariable(cmd, output); break; } } void KDebugger::backgroundUpdate() { /* * If there are still expressions that need to be updated, then do so. */ if (m_programActive) evalExpressions(); } void KDebugger::handleRunCommands(const char* output) { uint flags = m_d->parseProgramStopped(output, m_statusMessage); emit updateStatusMessage(); m_programActive = flags & DebuggerDriver::SFprogramActive; // refresh files if necessary if (flags & DebuggerDriver::SFrefreshSource) { TRACE("re-reading files"); emit executableUpdated(); } /* * Try to set any orphaned breakpoints now. */ for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->isOrphaned()) { TRACE(QString("re-trying brkpt loc: %2 file: %3 line: %1") .arg(bp->lineNo).arg(bp->location, bp->fileName)); CmdQueueItem* cmd = executeBreakpoint(&*bp, true); cmd->m_existingBrkpt = bp->id; // used in newBreakpoint() flags |= DebuggerDriver::SFrefreshBreak; } } /* * If we stopped at a breakpoint, we must update the breakpoint list * because the hit count changes. Also, if the breakpoint was temporary * it would go away now. */ if ((flags & (DebuggerDriver::SFrefreshBreak|DebuggerDriver::SFrefreshSource)) || stopMayChangeBreakList()) { m_d->queueCmd(DCinfobreak, DebuggerDriver::QMoverride); } /* * If we haven't listed the shared libraries yet, do so. We must do * this before we emit any commands that list variables, since the type * libraries depend on the shared libraries. */ if (!m_sharedLibsListed) { // must be a high-priority command! m_d->executeCmd(DCinfosharedlib); } // get the backtrace if the program is running if (m_programActive) { m_d->queueCmd(DCbt, DebuggerDriver::QMoverride); } else { // program finished: erase PC emit updatePC(QString(), -1, DbgAddr(), 0); // dequeue any commands in the queues m_d->flushCommands(); } /* Update threads list */ if (m_programActive && (flags & DebuggerDriver::SFrefreshThreads)) { m_d->queueCmd(DCinfothreads, DebuggerDriver::QMoverride); } m_programRunning = false; emit programStopped(); } void KDebugger::slotInferiorRunning() { m_programRunning = true; } void KDebugger::updateAllExprs() { if (!m_programActive) return; // retrieve local variables m_d->queueCmd(DCinfolocals, DebuggerDriver::QMoverride); // retrieve registers m_d->queueCmd(DCinforegisters, DebuggerDriver::QMoverride); // get new memory dump if (!m_memoryExpression.isEmpty()) { queueMemoryDump(false); } // update watch expressions foreach (QString expr, m_watchVariables.exprList()) { m_watchEvalExpr.push_back(expr); } } void KDebugger::updateProgEnvironment(const QString& args, const QString& wd, const std::map& newVars, const QSet& newOptions) { m_programArgs = args; m_d->executeCmd(DCsetargs, m_programArgs); TRACE("new pgm args: " + m_programArgs + "\n"); m_programWD = wd.trimmed(); if (!m_programWD.isEmpty()) { m_d->executeCmd(DCcd, m_programWD); TRACE("new wd: " + m_programWD + "\n"); } // update environment variables for (std::map::const_iterator i = newVars.begin(); i != newVars.end(); ++i) { QString var = i->first; const EnvVar* val = &i->second; switch (val->status) { case EnvVar::EVnew: case EnvVar::EVdirty: m_envVars[var] = val->value; // update value m_d->executeCmd(DCsetenv, var, val->value); break; case EnvVar::EVdeleted: // delete value m_d->executeCmd(DCunsetenv, var); m_envVars.erase(var); break; default: ASSERT(false); case EnvVar::EVclean: // variable not changed break; } } // update options foreach (QString opt, newOptions - m_boolOptions) { // option is not set, set it m_d->executeCmd(DCsetoption, opt, 1); } foreach (QString opt, m_boolOptions - newOptions) { // option is set, unset it m_d->executeCmd(DCsetoption, opt, 0); } m_boolOptions = newOptions; } void KDebugger::handleLocals(const char* output) { // retrieve old list of local variables QStringList oldVars = m_localVariables.exprList(); /* * Get local variables. */ std::list newVars; parseLocals(output, newVars); /* * Clear any old VarTree item pointers, so that later we don't access * dangling pointers. */ m_localVariables.clearPendingUpdates(); /* * Match old variables against new ones. */ for (QStringList::ConstIterator n = oldVars.begin(); n != oldVars.end(); ++n) { // lookup this variable in the list of new variables std::list::iterator v = newVars.begin(); while (v != newVars.end() && (*v)->m_name != *n) ++v; if (v == newVars.end()) { // old variable not in the new variables TRACE("old var deleted: " + *n); VarTree* v = m_localVariables.topLevelExprByName(*n); if (v != 0) { m_localVariables.removeExpr(v); } } else { // variable in both old and new lists: update TRACE("update var: " + *n); m_localVariables.updateExpr(*v, *m_typeTable); // remove the new variable from the list delete *v; newVars.erase(v); } } // insert all remaining new variables while (!newVars.empty()) { ExprValue* v = newVars.front(); TRACE("new var: " + v->m_name); m_localVariables.insertExpr(v, *m_typeTable); delete v; newVars.pop_front(); } } void KDebugger::parseLocals(const char* output, std::list& newVars) { std::list vars; m_d->parseLocals(output, vars); QString origName; /* used in renaming variables */ while (!vars.empty()) { ExprValue* variable = vars.front(); vars.pop_front(); /* * When gdb prints local variables, those from the innermost block * come first. We run through the list of already parsed variables * to find duplicates (ie. variables that hide local variables from * a surrounding block). We keep the name of the inner variable, but * rename those from the outer block so that, when the value is * updated in the window, the value of the variable that is * _visible_ changes the color! */ int block = 0; origName = variable->m_name; for (std::list::iterator v = newVars.begin(); v != newVars.end(); ++v) { if (variable->m_name == (*v)->m_name) { // we found a duplicate, change name block++; QString newName = origName + " (" + QString().setNum(block) + ")"; variable->m_name = newName; } } newVars.push_back(variable); } } bool KDebugger::handlePrint(CmdQueueItem* cmd, const char* output) { ASSERT(cmd->m_expr != 0); ExprValue* variable = m_d->parsePrintExpr(output, true); if (variable == 0) return false; // set expression "name" variable->m_name = cmd->m_expr->getText(); { TRACE("update expr: " + cmd->m_expr->getText()); cmd->m_exprWnd->updateExpr(cmd->m_expr, variable, *m_typeTable); delete variable; } evalExpressions(); /* enqueue dereferenced pointers */ return true; } bool KDebugger::handlePrintDeref(CmdQueueItem* cmd, const char* output) { ASSERT(cmd->m_expr != 0); ExprValue* variable = m_d->parsePrintExpr(output, true); if (variable == 0) return false; // set expression "name" variable->m_name = cmd->m_expr->getText(); { /* * We must insert a dummy parent, because otherwise variable's value * would overwrite cmd->m_expr's value. */ ExprValue* dummyParent = new ExprValue(variable->m_name, VarTree::NKplain); dummyParent->m_varKind = VarTree::VKdummy; // the name of the parsed variable is the address of the pointer QString addr = "*" + cmd->m_expr->value(); variable->m_name = addr; variable->m_nameKind = VarTree::NKaddress; dummyParent->m_child = variable; // expand the first level for convenience variable->m_initiallyExpanded = true; TRACE("update ptr: " + cmd->m_expr->getText()); cmd->m_exprWnd->updateExpr(cmd->m_expr, dummyParent, *m_typeTable); delete dummyParent; } evalExpressions(); /* enqueue dereferenced pointers */ return true; } // parse the output of bt void KDebugger::handleBacktrace(const char* output) { m_btWindow.clear(); std::list stack; m_d->parseBackTrace(output, stack); if (!stack.empty()) { std::list::iterator frm = stack.begin(); // first frame must set PC // note: frm->lineNo is zero-based emit updatePC(frm->fileName, frm->lineNo, frm->address, frm->frameNo); for (; frm != stack.end(); ++frm) { QString func; if (frm->var != 0) func = frm->var->m_name; else func = frm->fileName + ":" + QString().setNum(frm->lineNo+1); m_btWindow.addItem(func); TRACE("frame " + func + " (" + frm->fileName + ":" + QString().setNum(frm->lineNo+1) + ")"); } } } void KDebugger::gotoFrame(int frame) { // frame is negative when the backtrace list is cleared // ignore this event if (frame < 0) return; m_d->executeCmd(DCframe, frame); } void KDebugger::handleFrameChange(const char* output) { QString fileName; int frameNo; int lineNo; DbgAddr address; if (m_d->parseFrameChange(output, frameNo, fileName, lineNo, address)) { /* lineNo can be negative here if we can't find a file name */ emit updatePC(fileName, lineNo, address, frameNo); } else { emit updatePC(fileName, -1, address, frameNo); } } void KDebugger::evalExpressions() { // evaluate expressions in the following order: // watch expressions // pointers in local variables // pointers in watch expressions // types in local variables // types in watch expressions // struct members in local variables // struct members in watch expressions VarTree* exprItem = 0; if (!m_watchEvalExpr.empty()) { QString expr = m_watchEvalExpr.front(); m_watchEvalExpr.pop_front(); exprItem = m_watchVariables.topLevelExprByName(expr); } if (exprItem != 0) { CmdQueueItem* cmd = m_d->queueCmd(DCprint, exprItem->getText(), DebuggerDriver::QMoverride); // remember which expr this was cmd->m_expr = exprItem; cmd->m_exprWnd = &m_watchVariables; } else { ExprWnd* wnd; #define POINTER(widget) \ wnd = &widget; \ exprItem = widget.nextUpdatePtr(); \ if (exprItem != 0) goto pointer #define STRUCT(widget) \ wnd = &widget; \ exprItem = widget.nextUpdateStruct(); \ if (exprItem != 0) goto ustruct #define TYPE(widget) \ wnd = &widget; \ exprItem = widget.nextUpdateType(); \ if (exprItem != 0) goto type repeat: POINTER(m_localVariables); POINTER(m_watchVariables); STRUCT(m_localVariables); STRUCT(m_watchVariables); TYPE(m_localVariables); TYPE(m_watchVariables); #undef POINTER #undef STRUCT #undef TYPE return; pointer: // we have an expression to send dereferencePointer(wnd, exprItem, false); return; ustruct: // paranoia if (exprItem->m_type == 0 || exprItem->m_type == TypeInfo::unknownType()) goto repeat; evalInitialStructExpression(exprItem, wnd, false); return; type: /* * Sometimes a VarTree gets registered twice for a type update. So * it may happen that it has already been updated. Hence, we ignore * it here and go on to the next task. */ if (exprItem->m_type != 0) goto repeat; determineType(wnd, exprItem); } } void KDebugger::dereferencePointer(ExprWnd* wnd, VarTree* exprItem, bool immediate) { ASSERT(exprItem->m_varKind == VarTree::VKpointer); QString expr = exprItem->computeExpr(); TRACE("dereferencing pointer: " + expr); CmdQueueItem* cmd; if (immediate) { cmd = m_d->queueCmd(DCprintDeref, expr, DebuggerDriver::QMoverrideMoreEqual); } else { cmd = m_d->queueCmd(DCprintDeref, expr, DebuggerDriver::QMoverride); } // remember which expr this was cmd->m_expr = exprItem; cmd->m_exprWnd = wnd; } void KDebugger::determineType(ExprWnd* wnd, VarTree* exprItem) { ASSERT(exprItem->m_varKind == VarTree::VKstruct); QString expr = exprItem->computeExpr(); TRACE("get type of: " + expr); CmdQueueItem* cmd; cmd = m_d->queueCmd(DCfindType, expr, DebuggerDriver::QMoverride); // remember which expr this was cmd->m_expr = exprItem; cmd->m_exprWnd = wnd; } void KDebugger::handleFindType(CmdQueueItem* cmd, const char* output) { QString type; if (m_d->parseFindType(output, type)) { ASSERT(cmd != 0 && cmd->m_expr != 0); const TypeInfo* info = m_typeTable->lookup(type); if (info == 0) { /* * We've asked gdb for the type of the expression in * cmd->m_expr, but it returned a name we don't know. The base * class (and member) types have been checked already (at the * time when we parsed that particular expression). Now it's * time to derive the type from the base classes as a last * resort. */ info = cmd->m_expr->inferTypeFromBaseClass(); // if we found a type through this method, register an alias if (info != 0) { TRACE("infered alias: " + type); m_typeTable->registerAlias(type, info); } } if (info == 0) { TRACE("unknown type "+type); cmd->m_expr->m_type = TypeInfo::unknownType(); } else { cmd->m_expr->m_type = info; /* since this node has a new type, we get its value immediately */ evalInitialStructExpression(cmd->m_expr, cmd->m_exprWnd, false); return; } } evalExpressions(); /* queue more of them */ } void KDebugger::handlePrintStruct(CmdQueueItem* cmd, const char* output) { VarTree* var = cmd->m_expr; ASSERT(var != 0); ASSERT(var->m_varKind == VarTree::VKstruct); ExprValue* partExpr; if (cmd->m_cmd == DCprintQStringStruct) { partExpr = m_d->parseQCharArray(output, false, m_typeTable->qCharIsShort()); } else if (cmd->m_cmd == DCprintWChar) { partExpr = m_d->parseQCharArray(output, false, true); } else { partExpr = m_d->parsePrintExpr(output, false); } bool errorValue = partExpr == 0 || /* we only allow simple values at the moment */ partExpr->m_child != 0; QString partValue; if (errorValue) { partValue = "?""?""?"; // 2 question marks in a row would be a trigraph } else { partValue = partExpr->m_value; } delete partExpr; partExpr = 0; /* * Updating a struct value works like this: var->m_partialValue holds * the value that we have gathered so far (it's been initialized with * var->m_type->m_displayString[0] earlier). Each time we arrive here, * we append the printed result followed by the next * var->m_type->m_displayString to var->m_partialValue. * * If the expression we just evaluated was a guard expression, and it * resulted in an error, we must not evaluate the real expression, but * go on to the next index. (We must still add the question marks to * the value). * * Next, if this was the length expression, we still have not seen the * real expression, but the length of a QString. */ ASSERT(var->m_exprIndex >= 0 && var->m_exprIndex <= typeInfoMaxExpr); if (errorValue || !var->m_exprIndexUseGuard) { // add current partValue (which might be the question marks) var->m_partialValue += partValue; var->m_exprIndex++; /* next part */ var->m_exprIndexUseGuard = true; var->m_partialValue += var->m_type->m_displayString[var->m_exprIndex]; } else { // this was a guard expression that succeeded // go for the real expression var->m_exprIndexUseGuard = false; } /* go for more sub-expressions if needed */ if (var->m_exprIndex < var->m_type->m_numExprs) { /* queue a new print command with quite high priority */ evalStructExpression(var, cmd->m_exprWnd, true); return; } cmd->m_exprWnd->updateStructValue(var); evalExpressions(); /* enqueue dereferenced pointers */ } /* queues the first printStruct command for a struct */ void KDebugger::evalInitialStructExpression(VarTree* var, ExprWnd* wnd, bool immediate) { var->m_exprIndex = 0; if (var->m_type != TypeInfo::wchartType()) { var->m_exprIndexUseGuard = true; var->m_partialValue = var->m_type->m_displayString[0]; evalStructExpression(var, wnd, immediate); } else { var->m_exprIndexUseGuard = false; QString expr = var->computeExpr(); CmdQueueItem* cmd = m_d->queueCmd(DCprintWChar, expr, immediate ? DebuggerDriver::QMoverrideMoreEqual : DebuggerDriver::QMoverride); // remember which expression this was cmd->m_expr = var; cmd->m_exprWnd = wnd; } } /** queues a printStruct command; var must have been initialized correctly */ void KDebugger::evalStructExpression(VarTree* var, ExprWnd* wnd, bool immediate) { QString base = var->computeExpr(); QString expr; if (var->m_exprIndexUseGuard) { expr = var->m_type->m_guardStrings[var->m_exprIndex]; if (expr.isEmpty()) { // no guard, omit it and go to expression var->m_exprIndexUseGuard = false; } } if (!var->m_exprIndexUseGuard) { expr = var->m_type->m_exprStrings[var->m_exprIndex]; } expr.replace("%s", base); DbgCommand dbgCmd = DCprintStruct; // check if this is a QString::Data if (expr.left(15) == "/QString::Data ") { if (m_typeTable->parseQt2QStrings()) { expr = expr.mid(15, expr.length()); /* strip off /QString::Data */ dbgCmd = DCprintQStringStruct; } else { /* * This should not happen: the type libraries should be set up * in a way that this can't happen. If this happens * nevertheless it means that, eg., kdecore was loaded but qt2 * was not (only qt2 enables the QString feature). */ // TODO: remove this "print"; queue the next printStruct instead expr = "*0"; } } TRACE("evalStruct: " + expr + (var->m_exprIndexUseGuard ? " // guard" : " // real")); CmdQueueItem* cmd = m_d->queueCmd(dbgCmd, expr, immediate ? DebuggerDriver::QMoverrideMoreEqual : DebuggerDriver::QMnormal); // remember which expression this was cmd->m_expr = var; cmd->m_exprWnd = wnd; } void KDebugger::handleSharedLibs(const char* output) { // parse the table of shared libraries m_sharedLibs = m_d->parseSharedLibs(output); m_sharedLibsListed = true; // get type libraries m_typeTable->loadLibTypes(m_sharedLibs); // hand over the QString data cmd m_d->setPrintQStringDataCmd(m_typeTable->printQStringDataCmd()); } CmdQueueItem* KDebugger::loadCoreFile() { return m_d->queueCmd(DCcorefile, m_corefile, DebuggerDriver::QMoverride); } void KDebugger::slotExpanding(QTreeWidgetItem* item) { VarTree* exprItem = static_cast(item); if (exprItem->m_varKind != VarTree::VKpointer) { return; } ExprWnd* wnd = static_cast(item->treeWidget()); dereferencePointer(wnd, exprItem, true); } // add the expression in the edit field to the watch expressions void KDebugger::addWatch(const QString& t) { QString expr = t.trimmed(); // don't add a watched expression again if (expr.isEmpty() || m_watchVariables.topLevelExprByName(expr) != 0) return; ExprValue e(expr, VarTree::NKplain); m_watchVariables.insertExpr(&e, *m_typeTable); // if we are boring ourselves, send down the command if (m_programActive) { m_watchEvalExpr.push_back(expr); if (m_d->isIdle()) { evalExpressions(); } } } // delete a toplevel watch expression void KDebugger::slotDeleteWatch() { // delete only allowed while debugger is idle; or else we might delete // the very expression the debugger is currently working on... if (m_d == 0 || !m_d->isIdle()) return; VarTree* item = m_watchVariables.selectedItem(); if (item == 0 || !item->isToplevelExpr()) return; // remove the variable from the list to evaluate std::list::iterator i = std::find(m_watchEvalExpr.begin(), m_watchEvalExpr.end(), item->getText()); if (i != m_watchEvalExpr.end()) { m_watchEvalExpr.erase(i); } m_watchVariables.removeExpr(item); // item is invalid at this point! } void KDebugger::handleRegisters(const char* output) { emit registersChanged(m_d->parseRegisters(output)); } /* * The output of the DCbreak* commands has more accurate information about * the file and the line number. * * All newly set breakpoints are inserted in the m_brkpts, even those that * were not set sucessfully. The unsuccessful breakpoints ("orphaned * breakpoints") are assigned negative ids, and they are tried to set later * when the program stops again at a breakpoint. */ void KDebugger::newBreakpoint(CmdQueueItem* cmd, const char* output) { BrkptIterator bp; if (cmd->m_brkpt != 0) { // a new breakpoint, put it in the list assert(cmd->m_brkpt->id == 0); m_brkpts.push_back(*cmd->m_brkpt); delete cmd->m_brkpt; bp = m_brkpts.end(); --bp; } else { // an existing breakpoint was retried assert(cmd->m_existingBrkpt != 0); bp = breakpointById(cmd->m_existingBrkpt); if (bp == m_brkpts.end()) return; } // parse the output to determine success or failure int id; QString file; int lineNo; QString address; if (!m_d->parseBreakpoint(output, id, file, lineNo, address)) { /* * Failure, the breakpoint could not be set. If this is a new * breakpoint, assign it a negative id. We look for the minimal id * of all breakpoints (that are already in the list) to get the new * id. */ if (bp->id == 0) { int minId = 0; for (BrkptIterator i = m_brkpts.begin(); i != m_brkpts.end(); ++i) { if (i->id < minId) minId = i->id; } bp->id = minId-1; } return; } // The breakpoint was successfully set. if (bp->id <= 0) { // this is a new or orphaned breakpoint: // set the remaining properties if (!bp->enabled) { m_d->executeCmd(DCdisable, id); } if (!bp->condition.isEmpty()) { m_d->executeCmd(DCcondition, bp->condition, id); } } bp->id = id; bp->fileName = file; bp->lineNo = lineNo; if (!address.isEmpty()) bp->address = address; } void KDebugger::updateBreakList(const char* output) { // get the new list std::list brks; m_d->parseBreakList(output, brks); // merge existing information into the new list // then swap the old and new lists for (BrkptIterator bp = brks.begin(); bp != brks.end(); ++bp) { BrkptIterator i = breakpointById(bp->id); if (i != m_brkpts.end()) { // preserve accurate location information // note that xsldbg doesn't have a location in // the listed breakpoint if it has just been set // therefore, we copy it as well if necessary bp->text = i->text; if (!i->fileName.isEmpty()) { bp->fileName = i->fileName; bp->lineNo = i->lineNo; } } } // orphaned breakpoints must be copied for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->isOrphaned()) brks.push_back(*bp); } m_brkpts.swap(brks); emit breakpointsChanged(); } // look if there is at least one temporary breakpoint // or a watchpoint bool KDebugger::stopMayChangeBreakList() const { for (BrkptROIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->temporary || bp->type == Breakpoint::watchpoint) return true; } return false; } KDebugger::BrkptIterator KDebugger::breakpointByFilePos(QString file, int lineNo, const DbgAddr& address) { // look for exact file name match for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->lineNo == lineNo && bp->fileName == file && (address.isEmpty() || bp->address == address)) { return bp; } } // not found, so try basename file = QFileInfo(file).fileName(); for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { // get base name of breakpoint's file QString basename = QFileInfo(bp->fileName).fileName(); if (bp->lineNo == lineNo && basename == file && (address.isEmpty() || bp->address == address)) { return bp; } } // not found return m_brkpts.end(); } KDebugger::BrkptIterator KDebugger::breakpointById(int id) { for (BrkptIterator bp = m_brkpts.begin(); bp != m_brkpts.end(); ++bp) { if (bp->id == id) { return bp; } } // not found return m_brkpts.end(); } void KDebugger::slotValuePopup(const QString& expr) { // search the local variables for a match VarTree* v = m_localVariables.topLevelExprByName(expr); if (v == 0) { // not found, check watch expressions v = m_watchVariables.topLevelExprByName(expr); if (v == 0) { // try a member of 'this' v = m_localVariables.topLevelExprByName("this"); if (v != 0) v = ExprWnd::ptrMemberByName(v, expr); if (v == 0) { // nothing found; do nothing return; } } } // construct the tip QString tip = v->getText() + " = "; if (!v->value().isEmpty()) { tip += v->value(); } else { // no value: we use some hint switch (v->m_varKind) { case VarTree::VKstruct: tip += "{...}"; break; case VarTree::VKarray: tip += "[...]"; break; default: tip += "?""?""?"; // 2 question marks in a row would be a trigraph break; } } emit valuePopup(tip); } void KDebugger::slotDisassemble(const QString& fileName, int lineNo) { if (m_haveExecutable) { CmdQueueItem* cmd = m_d->queueCmd(DCinfoline, fileName, lineNo, DebuggerDriver::QMoverrideMoreEqual); cmd->m_fileName = fileName; cmd->m_lineNo = lineNo; } } void KDebugger::handleInfoLine(CmdQueueItem* cmd, const char* output) { QString addrFrom, addrTo; if (cmd->m_lineNo >= 0) { // disassemble if (m_d->parseInfoLine(output, addrFrom, addrTo)) { // got the address range, now get the real code CmdQueueItem* c = m_d->queueCmd(DCdisassemble, addrFrom, addrTo, DebuggerDriver::QMoverrideMoreEqual); c->m_fileName = cmd->m_fileName; c->m_lineNo = cmd->m_lineNo; } else { // no code emit disassembled(cmd->m_fileName, cmd->m_lineNo, std::list()); } } else { // set program counter if (m_d->parseInfoLine(output, addrFrom, addrTo)) { // move the program counter to the start address m_d->executeCmd(DCsetpc, addrFrom); } } } void KDebugger::handleDisassemble(CmdQueueItem* cmd, const char* output) { emit disassembled(cmd->m_fileName, cmd->m_lineNo, m_d->parseDisassemble(output)); } void KDebugger::handleThreadList(const char* output) { emit threadsChanged(m_d->parseThreadList(output)); } void KDebugger::setThread(int id) { m_d->queueCmd(DCthread, id, DebuggerDriver::QMoverrideMoreEqual); } void KDebugger::setMemoryExpression(const QString& memexpr) { m_memoryExpression = memexpr; // queue the new expression if (!m_memoryExpression.isEmpty() && isProgramActive() && !isProgramRunning()) { queueMemoryDump(true); } } void KDebugger::queueMemoryDump(bool immediate) { m_d->queueCmd(DCexamine, m_memoryExpression, m_memoryFormat, immediate ? DebuggerDriver::QMoverrideMoreEqual : DebuggerDriver::QMoverride); } void KDebugger::handleMemoryDump(const char* output) { std::list memdump; QString msg = m_d->parseMemoryDump(output, memdump); emit memoryDumpChanged(msg, memdump); } void KDebugger::setProgramCounter(const QString& file, int line, const DbgAddr& addr) { if (addr.isEmpty()) { // find address of the specified line CmdQueueItem* cmd = m_d->executeCmd(DCinfoline, file, line); cmd->m_lineNo = -1; /* indicates "Set PC" UI command */ } else { // move the program counter to that address m_d->executeCmd(DCsetpc, addr.asString()); } } void KDebugger::handleSetPC(const char* /*output*/) { // TODO: handle errors // now go to the top-most frame // this also modifies the program counter indicator in the UI gotoFrame(0); } void KDebugger::slotValueEdited(VarTree* expr, const QString& text) { if (text.simplified().isEmpty()) return; /* no text entered: ignore request */ ExprWnd* wnd = static_cast(expr->treeWidget()); TRACE(QString().sprintf("Changing %s to ", wnd->name()) + text); // determine the lvalue to edit QString lvalue = expr->computeExpr(); CmdQueueItem* cmd = m_d->executeCmd(DCsetvariable, lvalue, text); cmd->m_expr = expr; cmd->m_exprWnd = wnd; } void KDebugger::handleSetVariable(CmdQueueItem* cmd, const char* output) { QString msg = m_d->parseSetVariable(output); if (!msg.isEmpty()) { // there was an error; display it in the status bar m_statusMessage = msg; emit updateStatusMessage(); return; } // get the new value QString expr = cmd->m_expr->computeExpr(); CmdQueueItem* printCmd = m_d->queueCmd(DCprint, expr, DebuggerDriver::QMoverrideMoreEqual); printCmd->m_expr = cmd->m_expr; printCmd->m_exprWnd = cmd->m_exprWnd; } #include "debugger.moc" kdbg-2.5.5/kdbg/debugger.h000066400000000000000000000434031247243200200152760ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef DEBUGGER_H #define DEBUGGER_H #include #include #include #include #include "envvar.h" #include "exprwnd.h" /* some compilers require this */ class ExprWnd; class VarTree; struct ExprValue; class ProgramTypeTable; class KTreeViewItem; class KConfig; class KConfigBase; class KConfigGroup; class QListWidget; class RegisterInfo; class ThreadInfo; class DebuggerDriver; class CmdQueueItem; class Breakpoint; struct DisassembledCode; struct MemoryDump; struct DbgAddr; class KDebugger : public QObject { Q_OBJECT public: KDebugger(QWidget* parent, /* will be used as the parent for dialogs */ ExprWnd* localVars, ExprWnd* watchVars, QListWidget* backtrace); ~KDebugger(); /** * This function starts to debug the specified executable using the * specified driver. If a program is currently being debugged, it is * terminated first. Ownership of driver is taken if and only if * true is returned. * * @return false if an error occurs. */ bool debugProgram(const QString& executable, DebuggerDriver* driver); /** * Uses the specified core to debug the active program. * @param batch tells whether the core file was given on the * command line. */ void useCoreFile(QString corefile, bool batch); /** * Overrides the program argument in the per-program config * with a new value. */ void overrideProgramArguments(const QString& args); /** * Uses the specified pid to attach to the active program. */ void setAttachPid(const QString& pid); /** * Attaches to the specified process and debugs it. */ void attachProgram(const QString& pid); /** * Returns the file name of the per-program config file for the * specified program. */ static QString getConfigForExe(const QString& exe); /** * The driver name entry in the per-program config file. */ static const char DriverNameEntry[]; public slots: /** * Runs the program or continues it if it is stopped at a breakpoint. */ void programRun(); /** * Restarts the debuggee. */ void programRunAgain(); /** * Performs a single-step, possibly stepping into a function call. * If byInsn is true, a step by instruction is performed. */ void programStep(); /** * Performs a single-step, stepping over a function call. * If byInsn is true, a step by instruction is performed. */ void programNext(); /** * Performs a single-step by instruction, possibly stepping into a * function call. */ void programStepi(); /** * Performs a single-step by instruction, stepping over a function * call. */ void programNexti(); /** * Runs the program until it returns from the current function. */ void programFinish(); /** * Kills the program (removes it from memory). */ void programKill(); /** * Interrupts the program if it is currently running. */ void programBreak(); /** * Moves the program counter to the specified line. * If an address is given, it is moved to the address. */ void setProgramCounter(const QString&, int, const DbgAddr&); public: /** * Queries the user for program arguments. */ void programArgs(QWidget* parent); /** * Queries the user for program settings: Debugger command, terminal * emulator. */ void programSettings(QWidget* parent); /** * Setup remote debugging device */ void setRemoteDevice(const QString& remoteDevice) { m_remoteDevice = remoteDevice; } /** * Run the debuggee until the specified line in the specified file is * reached. * * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool runUntil(const QString& fileName, int lineNo); /** * Ask debugger for information about the specified line in the specified file. * * If \a addr is given, then it is used as a hint to position * to position the cursor in the source window at that address * if it belongs to the specified line. * @param fileName The source file in which to set the breakpoint. * @param lineNo The zero-based line number. * @param addr An address that belongs to the name; can be empty. * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool infoLine(QString fileName, int lineNo, const DbgAddr& addr); /** * Set a breakpoint. * * @param fileName The source file in which to set the breakpoint. * @param lineNo The zero-based line number. * @param address The exact address of the breakpoint. * @param temporary Specifies whether this is a temporary breakpoint * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool setBreakpoint(QString fileName, int lineNo, const DbgAddr& address, bool temporary); /** * Set a breakpoint. * * @param bp Describes the breakpoint. * @param queueOnly If false, the breakpoint is set using a high-priority command. */ void setBreakpoint(Breakpoint* bp, bool queueOnly); /** * Enable or disable a breakpoint at the specified location. * * @param fileName The source file in which the breakpoint is. * @param lineNo The zero-based line number. * @param address The exact address of the breakpoint. * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool enableDisableBreakpoint(QString fileName, int lineNo, const DbgAddr& address); /** * Enables or disables the specified breakpoint. * * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool enableDisableBreakpoint(int id) { return enableDisableBreakpoint(breakpointById(id)); } /** * Removes the specified breakpoint. Note that if bp is an orphaned * breakpoint, then bp is an invalid pointer if (and only if) this * function returns true. * * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool deleteBreakpoint(int id) { return deleteBreakpoint(breakpointById(id)); } /** * Changes the specified breakpoint's condition and ignore count. * * @return false if the command was not executed, e.g. because the * debuggee is running at the moment. */ bool conditionalBreakpoint(int id, const QString& condition, int ignoreCount) { return conditionalBreakpoint(breakpointById(id), condition, ignoreCount); } /** * Tells whether one of the single stepping commands can be invoked * (step, next, finish, until, also run). */ bool canSingleStep(); /** * Tells whether a breakpoints can be set, deleted, enabled, or disabled. */ bool canChangeBreakpoints(); /** * Tells whether a the program is loaded, but not active. */ bool canStart(); /** * Add a watch expression. */ void addWatch(const QString& expr); /** * Retrieves the current status message. */ const QString& statusMessage() const { return m_statusMessage; } /** * Is the debugger ready to receive another high-priority command? */ bool isReady() const; /** * Is the debuggee running (not just active)? */ bool isProgramRunning() { return m_haveExecutable && m_programRunning; } /** * Do we have an executable set? */ bool haveExecutable() { return m_haveExecutable; } /** * Is the debuggee active, i.e. was it started by the debugger? */ bool isProgramActive() { return m_programActive; } /** * Is the debugger driver idle? */ bool isIdle() const; /* The list of breakpoints. */ typedef std::list::const_iterator BrkptROIterator; BrkptROIterator breakpointsBegin() const { return m_brkpts.begin(); } BrkptROIterator breakpointsEnd() const { return m_brkpts.end(); } const QString& executable() const { return m_executable; } /** * Terminal emulation level. */ enum TTYLevel { ttyNone = 0, /* ignore output, input triggers EOF */ ttySimpleOutputOnly = 1, /* minmal output emulation, input triggers EOF */ ttyFull = 7 /* program needs full emulation */ }; /** * Returns the level of terminal emulation requested by the inferior. */ TTYLevel ttyLevel() const { return m_ttyLevel; } /** Sets the terminal that is to be used by the debugger. */ void setTerminal(const QString& term) { m_inferiorTerminal = term; } /** Returns the debugger driver. */ DebuggerDriver* driver() { return m_d; } /** Returns the pid that the debugger is currently attached to. */ const QString& attachedPid() const { return m_attachedPid; } /** * The memory at that the expression evaluates to is watched. Can be * empty. Triggers a redisplay even if the expression did not change. */ void setMemoryExpression(const QString& memexpr); /** * Sets how the watched memory location is displayed. * Call setMemoryExpression() to force a redisplay. */ void setMemoryFormat(unsigned format) { m_memoryFormat = format; } // settings void saveSettings(KConfig*); void restoreSettings(KConfig*); protected: QString m_inferiorTerminal; QString m_debuggerCmd; /* per-program setting */ TTYLevel m_ttyLevel; /* level of terminal emulation */ bool startDriver(); void stopDriver(); void writeCommand(); std::list m_watchEvalExpr; /* exprs to evaluate for watch window */ std::list m_brkpts; QString m_memoryExpression; /* memory location to watch */ unsigned m_memoryFormat; /* how that output should look */ protected slots: void parse(CmdQueueItem* cmd, const char* output); protected: void handleRunCommands(const char* output); void updateAllExprs(); void updateProgEnvironment(const QString& args, const QString& wd, const std::map& newVars, const QSet& newOptions); void parseLocals(const char* output, std::list& newVars); void handleLocals(const char* output); bool handlePrint(CmdQueueItem* cmd, const char* output); bool handlePrintDeref(CmdQueueItem* cmd, const char* output); void handleBacktrace(const char* output); void handleFrameChange(const char* output); void handleFindType(CmdQueueItem* cmd, const char* output); void handlePrintStruct(CmdQueueItem* cmd, const char* output); void handleSharedLibs(const char* output); void handleRegisters(const char* output); void handleMemoryDump(const char* output); void handleInfoLine(CmdQueueItem* cmd, const char* output); void handleDisassemble(CmdQueueItem* cmd, const char* output); void handleThreadList(const char* output); void handleSetPC(const char* output); void handleSetVariable(CmdQueueItem* cmd, const char* output); void evalExpressions(); void evalInitialStructExpression(VarTree* var, ExprWnd* wnd, bool immediate); void evalStructExpression(VarTree* var, ExprWnd* wnd, bool immediate); void dereferencePointer(ExprWnd* wnd, VarTree* var, bool immediate); void determineType(ExprWnd* wnd, VarTree* var); void queueMemoryDump(bool immediate); CmdQueueItem* loadCoreFile(); void openProgramConfig(const QString& name); typedef std::list::iterator BrkptIterator; BrkptIterator breakpointByFilePos(QString file, int lineNo, const DbgAddr& address); BrkptIterator breakpointById(int id); CmdQueueItem* executeBreakpoint(const Breakpoint* bp, bool queueOnly); void newBreakpoint(CmdQueueItem* cmd, const char* output); void updateBreakList(const char* output); bool stopMayChangeBreakList() const; void saveBreakpoints(KConfig* config); void restoreBreakpoints(KConfig* config); bool enableDisableBreakpoint(BrkptIterator bp); bool deleteBreakpoint(BrkptIterator bp); bool conditionalBreakpoint(BrkptIterator bp, const QString& condition, int ignoreCount); bool m_haveExecutable; /* has an executable been specified */ bool m_programActive; /* is the program active (possibly halting in a brkpt)? */ bool m_programRunning; /* is the program executing (not stopped)? */ bool m_sharedLibsListed; /* do we know the shared libraries loaded by the prog? */ QString m_executable; QString m_corefile; QString m_attachedPid; /* user input of attaching to pid */ QString m_programArgs; QString m_remoteDevice; QString m_programWD; /* working directory of gdb */ std::map m_envVars; /* environment variables set by user */ QSet m_boolOptions; /* boolean options */ QStringList m_sharedLibs; /* shared libraries used by program */ ProgramTypeTable* m_typeTable; /* known types used by the program */ KConfig* m_programConfig; /* program-specific settings (brkpts etc) */ void saveProgramSettings(); void restoreProgramSettings(); QString readDebuggerCmd(const KConfigGroup& g); // debugger process DebuggerDriver* m_d; bool m_explicitKill; /* whether we are killing gdb ourselves */ QString m_statusMessage; protected slots: void gdbExited(); void slotInferiorRunning(); void backgroundUpdate(); void gotoFrame(int); void slotExpanding(QTreeWidgetItem*); void slotDeleteWatch(); void slotValuePopup(const QString&); void slotDisassemble(const QString&, int); void slotValueEdited(VarTree*, const QString&); public slots: void setThread(int); void shutdown(); signals: /** * This signal is emitted before the debugger is started. The slot is * supposed to set up m_inferiorTerminal. */ void debuggerStarting(); /** * This signal is emitted whenever a part of the debugger needs to * highlight the specfied source code line (e.g. when the program * stops). * * @param file specifies the file; this is not necessarily a full path * name, and if it is relative, you won't know relative to what, you * can only guess. * @param lineNo specifies the line number (0-based!) (this may be * negative, in which case the file should be activated, but the line * should NOT be changed). * @param address specifies the exact address of the PC or is empty. */ void activateFileLine(const QString& file, int lineNo, const DbgAddr& address); /** * This signal indicates that the program counter has changed. * * @param filename specifies the filename where the program stopped * @param lineNo specifies the line number (zero-based); it can be -1 * if it is unknown * @param address specifies the address that the instruction pointer * points to. * @param frameNo specifies the frame number: 0 is the innermost frame, * positive numbers are frames somewhere up the stack (indicates points * where a function was called); the latter cases should be indicated * differently in the source window. */ void updatePC(const QString& filename, int lineNo, const DbgAddr& address, int frameNo); /** * This signal is emitted when gdb detects that the executable has been * updated, e.g. recompiled. (You usually need not handle this signal * if you are the editor which changed the executable.) */ void executableUpdated(); /** * Indicates that a new status message is available. */ void updateStatusMessage(); /** * Indicates that the internal state of the debugger has changed, and * that this will very likely have an impact on the UI. */ void updateUI(); /** * Indicates that the list of breakpoints has possibly changed. */ void breakpointsChanged(); /** * Indicates that the register values have possibly changed. */ void registersChanged(const std::list&); /** * Indicates that the list of threads has possibly changed. */ void threadsChanged(const std::list&); /** * Indicates that the value for a value popup is ready. */ void valuePopup(const QString&); /** * Provides the disassembled code of the location given by file and * line number (zero-based). */ void disassembled(const QString& file, int line, const std::list& code); /** * Indicates that the program has stopped for any reason: by a * breakpoint, by a signal that the debugger driver caught, by a single * step instruction. */ void programStopped(); /** * Indicates that a new memory dump output is ready. * @param msg is an error message or empty * @param memdump is the memory dump */ void memoryDumpChanged(const QString&, const std::list&); /** * Gives other objects a chance to save program specific settings. */ void saveProgramSpecific(KConfigBase* config); /** * Gives other objects a chance to restore program specific settings. */ void restoreProgramSpecific(KConfigBase* config); protected: ExprWnd& m_localVariables; ExprWnd& m_watchVariables; QListWidget& m_btWindow; // implementation helpers protected: QWidget* parentWidget() { return static_cast(parent()); } }; #endif // DEBUGGER_H kdbg-2.5.5/kdbg/doc/000077500000000000000000000000001247243200200141025ustar00rootroot00000000000000kdbg-2.5.5/kdbg/doc/CMakeLists.txt000066400000000000000000000000771247243200200166460ustar00rootroot00000000000000add_subdirectory(de) add_subdirectory(en) add_subdirectory(ru) kdbg-2.5.5/kdbg/doc/de/000077500000000000000000000000001247243200200144725ustar00rootroot00000000000000kdbg-2.5.5/kdbg/doc/de/CMakeLists.txt000066400000000000000000000004331247243200200172320ustar00rootroot00000000000000install(FILES argspwdenv.html breakptlist.html globaloptions.html howdoi.html localvars.html memory.html pgmoutput.html pgmsettings.html registers.html sourcecode.html stack.html threads.html tips.html watches.html index.html DESTINATION ${HTML_INSTALL_DIR}/de/kdbg) kdbg-2.5.5/kdbg/doc/de/argspwdenv.html000066400000000000000000000047741247243200200175540ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Argumente, Arbeitsverzeichnis, Umgebungsvariablen Inhalt

Programmargumente, Arbeitsverzeichnis, Umgebungsvariablen setzen

Mit Ausführen|Argumente öffnen Sie einen Dialog, in dem Sie Programmargumente, das Arbeitsverzeichnis sowie Umgebungsvariablen setzen können.

Programmargumente

In der obersten Eingabezeile können Sie die Programmargumente eingeben, die an das Programm übergeben werden sollen. Diese werden beim nächsten Programmstart verwendet.

Arbeitsverzeichnis

Im Eingabefeld darunter können Sie das Arbeitsverzeichnis angeben. Dieses wird sofort an gdb übergeben, sobald Sie OK drücken. Das Programm verwendet das neue Arbeitsverzeichnis allerdings erst beim nächsten Start.

Das Arbeitsverzeichnis gilt auch für gdb selbst! Das angegebene Arbeitsverzeichnis wird sofort an gdb weitergegeben, d.h. gdb wird die neue Einstellung verwenden, sobald Sie OK drücken. Das kann einen Einfluss darauf haben, ob gdb Quellcodedateien findet.

Umgebungsvariablen

Im Bereich für Umgebungsvariablen können Sie einen Ausdruck in der Form VARIABLE=Wert eingeben und dann Ändern klicken, um der Umgebungsvariablen VARIABLE einen Wert zuzuweisen. Um eine Variable zu entfernen, wählen Sie diese zuerst aus der Liste darunter aus und klicken dan Löschen. Um einen Wert zu ändern, geben Sie einfach den neuen Wert ein und klicken Ändern. Wenn Sie den Namen der Variable ändern und Ändern clicken, erzeugen Sie eine neue Variable! Die neuen Umgebungsvariablen werden erst beim nächsten Programmstart verwendet.

Wenn Sie glibc2 unter Linux verwenden, ist es sehr wichtig, dass Sie der Umgebungsvariablen LD_BIND_NOW den Wert 1 zuweisen. Wenn diese Variable nicht gesetzt ist, können solche Funktionen nicht betreten werden, die von der Bibliothek libc und anderen Shared Libraries importiert werden. kdbg-2.5.5/kdbg/doc/de/breakptlist.html000066400000000000000000000101131247243200200177000ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Haltepunkte Inhalt

Die Liste der Haltepunkte

Die Liste der Haltepunkte zeigt alle gesetzten Haltepunkte und Watchpoints und ermöglicht, diese zu manipulieren. Die Liste der Haltepunkte können Sie mit dem Menüpunkt Ansicht|Haltepunkte anzeigen.

Die Übersicht

Für jeden Haltepunkt wird folgendes angezeigt:
  • der Ort,
  • die Anzahl der Stopps,
  • die Anzahl der nächsten zu ignorierenden Stopps (falls gesetzt)
  • die Haltebedingung (falls gesetzt).
Das Piktogramm links zeigt an, ob der Haltepunkt aktiviert (tiefroter Punkt) oder deaktiviert (hellroter Punkt) ist, ob es sich um einen temporären Haltepunkt handelt (eine winzige Uhr ist sichtbar) und ob der Haltepunkt bedingt ist (ein Fragezeichen ist sichtbar).

Watchpoints werden durch ein Brillensymbol gekennzeichnet.

Haltepunkte manipulieren

Beachten Sie bitte, dass Haltepunkte und Watchpoints nicht manipuliert werden können solange das zu debuggende Programm läuft. Wenn das Programm bereits gestartet wurde, muss es zuerst angehalten werden - entweder indem es auf einen bereits gesetzten Haltepunkt trifft oder "gewaltsam" indem Sie Ausführung|Unterbrechen wählen. Dadurch wird das Programm nicht beendet, sondern nur unterbrochen. Sie können die Haltepunkte jetzt verändern. Wählen Sie danach Ausführung|Ausführen, um das Programm fortzusetzen.

Am einfachsten kann ein Haltepunkt im Quellcode-Fenster gesetzt werden. Wenn Sie den genauen Dateinamen und die Zeilennummer einer Funktion nicht kennen, können Sie den Funktionsnamen im Feld über der Liste eingeben und Haltepunkt wählen.

Sie können eine Haltepunkt in der Liste auswählen seine Zustand mittels Deaktivieren oder Aktivieren ändern. Oder Sie klicken auf den Haltepunkt mit der mittleren Maustaste - genau so, wie Sie im Quellcode-Fenster Haltepunkte aktivieren und deaktivieren.

Sie können eine Bedingung setzen (sodass das Programm nur stehen bleibt, wenn die Bedingung erfüllt ist) oder die Anzahl der zu ignorierenden Stopps setzen (sodass das Programm die nächsten n Male nicht stehen bleibt, die es über diesen Haltepunkt läuft). Dazu wählen sie den Schalter Bedingt und geben die Anzahl der zu ignorierenden Treffer und/oder die Bedingung ein.

Watchpoints manipulieren

Watchpoints sind den Haltepunkten ähnlich, nur dass das Programm angehalten wird, sobald sich der Inhalt einer Speicherstelle ändert. Ebenso wie Haltepunkte können Watchpoints nicht manipuliert werden, solange das Programm läuft. Weitere Hinweise dazu siehe oben.

Einen Watchpoint können Sie setzen, indem Sie einen Ausdruck im Feld über der Liste eingeben und Watchpoint klicken. Das Programm wird dann angehalten, sobald sich der Wert des Ausdrucks ändert. Beachten Sie, dass Sie Watchpoints, die eine lokale Variable benötigen, nur setzen können, wenn das Programm von einem Haltepunkt (oder mittels Ausführung|Unterbrechen) angehalten wurde.

Zum Entfernen eines Watchpoints wählen Sie diesen in der Liste aus und klicken Entfernen. Falls der Ausdruck eine lokale Variable enthält, wird der Watchpoint automatisch entfernt, sobald das Programm die aktive Funktion verlässt.

Wie mit Haltepunkten können Sie eine Bedingung oder eine Anzahl zu ignorierender Stopps setzen, indem Sie den Watchpoint auswählen und Bedingt klicken. kdbg-2.5.5/kdbg/doc/de/globaloptions.html000066400000000000000000000057011247243200200202370ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Globale Einstellungen Inhalt

Globale Einstellungen

Mit dem Menüpunkt Datei|Globale Einstellungen können Sie folgende Optionen einstellen:
  • den Befehl, mit dem gdb aufgerufen wird;
  • den Befehl, der das Fenster für die Programmausgabe öffnet,
  • ob KDbg in den Vordergrund kommen soll, sobald das Programm stoppt, und eine Verzögerung, wann er sich wieder zurückzieht,
  • die Tabulatorweite.

Aufruf von gdb

Wenn Sie eine alternative Version von gdb verwenden wollen, geben sie diese unter Aufruf von GDB an. Die Standardeinstellung ist gdb --fullname --nx. Achtung: Sie müssen jedenfalls diese beiden Argumente übergeben; wenn Sie sie weglassen, kann KDbg nicht funktionieren. Wenn Sie das Eingabefeld leer lassen, wird die Standardeinstellung verwendet.

Aufruf eines Terminal-Emulators

Falls Sie ein anderes Terminal-Programm verwenden wollen, das die Ausgabe des Programms anzeigt, geben Sie dieses unter Terminal für die Programmausgabe an. Die Standardeinstellung ist xterm -name kdbgio -title %T -e sh -c %C. In diesem Eintrag wird %T durch eine Überschrift und %C durch ein Bourne-Shell-Skript ersetzt, das in eine Endlosschleife landet, damit sich das Fenster nicht schließt. (Keine Sorge, das Skript frisst keine CPU-Zeit, sondern ruft einfach nur sleep 3600 in einer Schleife auf :) Eine alternative für diesen Eintrag wäre zm Beispiel konsole --name kdbgio --caption %T -e sh -c %C.

In den Vordergrund

Sie können angeben, ob das KDbg-Fenster in den Vordergrund gebracht werden soll, sobald das kontrollierte Programm anhält (bei einem Breakpoint oder wegen eines Signals). Das Fenster wird allerdings nicht aktiviert (zumindest nicht unter KWM, dem Window Manger von KDE). Manche Benutzer werden dieses Verhalten als störend empfinden, weshalb diese Option standardmässig ausgeschaltet ist.
Wenn diese Option eingeschaltet ist, zieht sich das KDbg-Fenster auch wieder in den Hintergrund zurück, sobald das Programm fortgesetzt wird. Allerdings geschieht das erst nach einer Verzögerung, die ebenfalls angegeben werden kann. Dadurch wird verhindert, dass das Fenster ständig nach hinten und vorne blinkt, sobald Sie einen Einzelschritt-Befehl absetzen.
kdbg-2.5.5/kdbg/doc/de/howdoi.html000066400000000000000000000075631247243200200166640ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Wie kann ich...? Inhalt

Wie kann ich...?

... eine Haltepunkt setzen?

Dafür gibt's mehrere Möglichkeiten:
  • Sie können im Quellcode-Fenster in den "aktiven Bereich" am linken Ende der Zeile klicken.
  • Sie können im Quellcode-Fenster eine Zeile auswählen und dann im Menü Haltepunkt eine Auswahl treffen.
  • Sie können einen Haltepunkt in der Liste der Haltepunkte setzen.
Wenn Sie keinen Haltepunkt setzen können, könnte es sein, dass das Programm gerade läuft. Sie können keine Haltepunkte setzen, solange das Programm läuft. Halten Sie es zuerst mit Ausführung|Unterbrechen an. Falls Sie dann noch immer keine Haltepunkte setzen können, versichern Sie sich, dass Sie das Programm mit Debug-Information übersetzt und gebunden haben.

... den Wert einer globalen Variablen oder eines beliebigen Ausdrucks anzeigen?

Benutzen Sie das Ausdrücke-Fenster.

... Watchpoints setzen?

Watchpoints können über die Liste der Haltepunkte bearbeitet werden.

... einen Core-Dump benutzen?

Laden Sie zuerst das Programm mittels Datei|Programm, dann geben Sie den Core-Dump mittels Datei|Core dump an.

... ein Programm debuggen, das sich in eine Endlosschleife verlaufen hat?

Starten Sie das Programm und lassen Sie es laufen, bis es in die Endlosschleife gelangt. Dann schalten Sie um zu KDbg und wählen Ausführung|Unterbrechen. Hiermit haben Sie das Programm in flagranti erwischt!

... erreichen, dass das Programm einigemale über einen Haltepunkt drüberläuft, ohne anzuhalten?

In der Liste der Haltepunkte wählen Sie den Haltepunkt; dann klicken Sie Bedingt und geben die Anzahl in Ignoriere nächste Treffer an.

... eine Umgebungsvariable für das Programm setzen?

Wählen Sie Ausführung|Argumente und geben die Umgebungsvariable im Argumente-Dialog an.

... ein Arbeitsverzeichnis für das Programm wählen?

Wählen Sie Ausführung|Argumente und geben das Arbeitsverzeichnis im Argumente-Dialog an.

... das Terminal-Fenster los werden?

Wählen Sie Datei|Einstellungen und schalten auf das Register Ausgabe um. Wählen Sie Nur Ausgabe, einfache Terminalemulation und klicken Sie OK. Nun müssen Sie das Programm neu laden (am einfachsten wählen Sie es aus der Liste unter Datei|Zuletzt geöffnete Programme). Die Programmausgaben werden nun in das eingebaute Ausgabefenster geschrieben und stdin ist auf /dev/null umgeleitet.

Sie müssen diese Einstellungen für jedes neue Programm wiederholen, das Sie debuggen.

Wichtig: Sie sollten dies nicht tun, falls Ihr Programm Eingaben vom Terminal (normalerweise stdin) erwartet oder falls mehr als nur einfache Terminalemultionen benötigt werden (mehr als nur Wagenrücklauf und Zeilenvorschub). Das eingebaute Ausgabefenster unterstützt keine Eingaben oder Terminalemulationen. kdbg-2.5.5/kdbg/doc/de/index.html000066400000000000000000000163641247243200200165010ustar00rootroot00000000000000 KDbg - Benutzerhandbuch

KDbg - Benutzerhandbuch

Inhalt


Einleitung

KDbg ist eine grafische Benutzeroberfläche für gdb, den GNU-Debugger.

Das bedeutet, dass KDbg selbst nicht der Debugger ist. Vielmehr kommuniziert KDbg mit gdb, indem Befehlszeilen and diesen geschickt werden und die Ausgabe, wie z.B. Variablenwerte, entgegengenommen werden. Die Menübefehle und Mausklicks werden in gdb-Befehle umgesetzt, und die Ausgabe von gdb wird in (mehr oder weniger) sichtbare Information umgesetzt, wie zum Beispiel die Struktur von Variablen.

Eine Folge davon ist, dass KDbg vollständig von den Fähigkeiten des verwendeten Befehlszeilendebuggers, gdb, abhängig ist. KDbg kann nicht mehr als gdb leisten. Wenn Sie zum Beispiel einen gdb haben, der Programme mit Threads nicht unterstützt, dann kann auch KDbg das nicht (obwohl ein Threads-Fenster vorhanden ist).

Mit KDbg arbeiten

Bevor Sie mit der Arbeit beginnen, sollten Sie die globalen Einstellungen prüfen, indem Sie Datei|Globale Einstellungen aufrufen.

Ein zu debuggendes Program angeben

Um ein Programm zu debuggen, wählen Sie Datei|Programm. Wenn Sie das Programm schon einmal debuggt haben, können Sie es auch aus der Liste unter Datei|Zuletzt göffnete Programme wählen. Das Programm wird jetzt geladen.

Wenn Sie einen Core-Dump verwenden wollen, müssen Sie zuerst das Programm, das den Core-Dump erzeugt hat wie gerade erwähnt laden, dann wählen Sie Datei|Core dump aus dem Menü. KDbg zeigt die Stelle an, die den Core-Dump verursacht hat.

Sie können nun Haltepunkte setzen, indem Sie die Einträge im Menü Haltepunkt oder im Rechte-Maus-Menü oder in der Liste der Haltepunkte verwenden.

Sie können auch programmspezifische Einstellungen vornehmen, indem Sie Datei|Einstellungen wählen.

Das Programm ausführen

Nun führen Sie das Programm aus, indem Sie Ausführung|Ausführen wählen. Das Programm arbeitet nun wie gewöhnlich, bis es beendet wird, auf einen Haltepunkt oder Watchpoint trifft, oder ein Signal empfängt.

Sie können das Programm mit Argumenten ausführen, ein Arbeitsverzeichnis festlegen und auch Umgebungsvariablen definieren. Dazu wählen Sie Ausführung|Argumente und machen Ihre Angaben im Programmargumente-Dialog.

Weiters können Sie sich in ein Programm einhängen (attachen), das bereits ausgeführt wird. Dazu laden Sie das Programm zuerst wie oben beschrieben, dann wählen Sie Ausführung|Attachen. Geben Sie die Prozessnummer an und klicken Sie OK. Das Programm wird jetzt angehalten (aber nicht beendet), und der derzeitige Stand des Programms wird im Quellcode-Fenster angezeigt.

Das Programm wurde angehalten - was nun?

Wenn das Programm an einem Haltepunkt, Watchpoint oder wegen eines Signals angehalten wird, zeigt das Quellcode-Fenster die Zeile, in der das Programm gerade arbeitete. Es passiert häufig, dass das Programm wegen eine Signals (oftmals SIGSEGV, Speicherzugriffsfehler) in einer Funktion angehalten wird, die sich nicht in jenem Programmteil befindet, den Sie geschrieben haben. In diesem Fall betrachten Sie das Stack-Fenster genauer: Suchen Sie nach einer Funktion, die Sie geschrieben haben (beginnen Sie am oberen Ende) und klicken Sie darauf. Das bringt Sie an eine Stelle, an der Sie mit der Suche nach dem tatsächlichen Programmfehler beginnen können.

Im Menü Ausführung finden Sie Befehle, die Sie zum Ausführen und schrittweisen Abarbeiten des Programms verwenden. Weiters können Sie das laufende Programm unterbrechen. Die wichtigen Befehle können auch mit Funktionstasten gegeben werden. Zum effizienten Arbeiten empfehle ich, dass Sie sich diese Tasten eingewöhnen. Sie können Einstellungen|Kurzbefehle festlegen verwenden, falls Sie die Funktionen anderen Tasten zuweisen wollen.

Im Menü Haltepunkt finden Sie Befehle zum Setzen, Entfernen, Aktivieren und Inaktivieren von permanenten und temporären Haltepunkten. Natürlich können Sie auch eine Liste der Haltepunkte anzeigen. Sie können einen Haltepunkt auch setzen, indem Sie mit der Maus in den Freiraum links der entsprechenden Quellcode-Zeile klicken (mit der linken Maustaste); weiters können sie einen vorhandenen Haltepunkt mit der mittleren Maustaste aktivieren und deaktivieren.

Die Animation in der Werkzeugleiste zeigt an, ob das Programm gerade läuft. Sie bleibt stehen, sobald das Programm an einem Haltepunkt oder aus einem anderen Grund angehalten wird oder sobald es beendet wird. Ein Klick auf die Animation hat die Funktion von Ausführung|Unterbrechen.

Die Informationsfenster von KDbg

KDbg zeigt Information in einer Reihe verschiedener Fenster an. Im Menü Ansicht finden Sie die Befehle, die diese Fenster anzeigen und schließen. Es handelt sich dabei um dockende Fenster, sodass Sie deren Anordnung beliebig verändern können.

Tipps und so weiter

Autor

KDbg wurde von Johannes Sixt mit vielen weiteren Helfern geschrieben.
Die KDbg-Homepage befindet sich unter http://www.kdbg.org/. kdbg-2.5.5/kdbg/doc/de/localvars.html000066400000000000000000000023451247243200200173520ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Lokale Variablen Inhalt

Lokale Variablen

Mittels Ansicht|Lokale Variablen wird das Fenster für die lokalen Variablen angezeigt. Darin wird der Inhalt der lokalen Variablen des aktiven Stack-Frames angezeigt.

Das im Stack-Fenster ausgewählte Frame bestimmt die lokalen Variablen, die hier angezeigt werden.

Sobald das Programm angehalten wird (z.B. durch einen Haltepunkt), wird die Anzeige aktualisiert. Variablenwerte, die sich seit dem letzten Anhalten geändert haben, werden rot hervorgehoben.

Sie können die ausgewählte Variable oder Struktur-Member in das Ausdrückefenster kopieren, indem Sie mittels der rechten Maustaste das kleine Kontextmenü aufrufen. kdbg-2.5.5/kdbg/doc/de/memory.html000066400000000000000000000026701247243200200166750ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Speicherinhalt Inhalt

Der Speicherinhalt

Das Fenster zur Anzeige des Speicherinhalts können Sie mittels Ansicht|Speicher aufrufen. Es zeigt den Inhalt des Speichers des Programms an beliebigen Adressen an.

Um Speicherinhalt anzuzeigen, geben Sie eine Adresse an. Die Adresse braucht nicht in Hexadezimalform eingegeben werden und es kann sich auch um einen beliebigen Ausdruck handeln.

Sie können ein Format wählen, wie der Speicherinhalt dargestellt werden soll, indem Sie die entsprechenden Optionen im Rechte-Maus-Menü wählen.

Die zuletzt verwendeten Adressen werden zwischengespeichert und können über die Popup-Liste ausgewählt werden. Bitte beachten Sie, dass zusammen mit der Adresse auch das Darstellungsformat gespeichert wird.

Wenn Sie keinen Speicherinhalt ansehen wollen, empfehlen wir, dass Sie die Adresse löschen, damit kein Speicherinhalt angezeigt wird - dadurch arbeitet KDbg etwas schneller. kdbg-2.5.5/kdbg/doc/de/pgmoutput.html000066400000000000000000000047421247243200200174330ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Programmausgabe Inhalt

Das Programmausgabefenster

Das Programmausgabefenster wird mit Ansicht|Ausgabe geöffnet. Das Ausgabefenster zeichnet den Text auf, den das Programm auf stdout und stderr ausgibt.

Das Ausgabefenster lässt keine Eingabe zu und unterstützt nur eine äußerst minimale Terminalemulation: Lediglich \n (Zeilenvorschub, line-feed), \t (horizontaler Tabulator) und \r (Wagenrücklauf, carriage-return) werden behandelt. Das reicht im Allgemeinen für Programme mit grafischer Benutzeroberfläche aus, die nur Debug-Ausgaben schreiben.

Wenn ein Programm zum ersten Mal in KDbg geladen wird, wird dieses Ausgabefenster nicht benutzt. Der Grund dafür ist, dass KDbg nicht wissen kann, ob das Programm eine ausgefeilte Terminalemulation benötigt oder ob es Eingaben über das Terminal erwartet. Deshalb wird standardmässig ein Terminalemulator verwendet. Um die Ausgaben in das Ausgabefenster umzuleiten, gehen sie wie folgt vor:

  1. Rufen Sie mittels Datei|Einstellungen die programmspezifischen Einstellungen auf.
  2. Schalten Sie auf das Register Ausgabe um.
  3. Wählen Sie Nur Ausgabe, einfache Terminalemulation und klicken Sie OK.
  4. Laden Sie das Programm erneut, indem Sie es aus der Liste unter Datei|Zuletzt geöffnete Programme wählen.
Sie können den Inhalt des Fensters jederzeit löschen, indem Sie Löschen aus dem Popup-Menü wählen, das Sie mit der rechten Maustaste aufrufen können.

Falls die letzte Zeile des Ausgabefensters sichtbar ist, verschiebt sich der Fensterinhalt automatisch, sodass die letzte Zeile immer sichtbar bleibt, wenn neuer Text ankommt. Wenn Sie hingegen den Fensterinhalt verschieben, sodass die letzte Zeile nicht sichtbar ist, bleibt der sichtbare Teil unverändert. kdbg-2.5.5/kdbg/doc/de/pgmsettings.html000066400000000000000000000061411247243200200177260ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Programmspezifische Einstellungen Inhalt

Programmspezifische Einstellungen

In diesem Dialog können programmspezifischen Einstellungen getroffen werden. Der Dialog wird mittels Datei|Einstellungen aufgerufen. Die Einstellungen werden nur auf das geladene Programm angewendet und bleiben über Sitzungen hinweg erhalten.
Wichtiger Hinweis: Die getroffenen Einstellungen werden erst wirksam, wenn das Programm das nächste Mal geladen wird. Das bedeutet, dass Sie nach dem Drücken von OK in diesem Dialog das Programm erneut laden müssen (mittels Datei|Programm)!!

Debugger

Hier kann der Debugger gewählt werden, der für dieses Programm verwendet werden soll.

Aufruf von GDB

Geben Sie den Befehl an, mit dem gdb aufgerufen werden soll. Wenn Sie das Feld leer lassen, wird die globale Einstellung übernommen. Wenn Sie cross-compilieren oder remote debuggen, werden Sie hier einen gdb-Befehl angeben, der für die Zielplattform geeignet ist. Die Standardeinstellung ist gdb --fullname --nx. Sie müssen auf jeden Fall auch diese Optionen angeben, andernfalls funktioniert KDbg nicht.

Ausgabe

Hier geben Sie an, unter welcher Terminalemulation das Programm arbeitet.

Keine Ein- und Ausgabe

Wählen Sie diese Option, falls Ihr Programm keine Eingabe vom Terminal erwartet und Sie keine Ausgabe sehen wollen, die auf stdout oder stderr geschrieben wird. Alle drei Standardkanäle (stdin, stdout und stderr) werden praktisch nach /dev/null umgeleitet.

Nur Ausgabe, einfache Terminalemulation

Wählen Sie diese Option, falls Ihr Programm keine Eingabe vom Terminal erwartet (stdin wird nach /dev/null umgeleitet) und die Ausgabe, die auf stdout und stderr geschrieben wird, keine besondere Terminalemulation erfordert. Die Ausgabe wird im Ausgabefenster angezeigt.

Volle Terminalemulation

Wählen Sie diese Option, falls Ihr Programm Eingaben über stdin liest oder falls die Ausgabe auf stdout oder stderr Terminalemulation erfordert. Ein Terminalemulator kann in den globalen Einstellungen angegeben werden.
kdbg-2.5.5/kdbg/doc/de/registers.html000066400000000000000000000031501247243200200173660ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Registerinhalt Inhalt

Der Registerinhalt

Das Fenster zur Anzeige des Registerinhalts wird mittels Ansicht|Register angezeigt. Jedesmal, wenn das Programm angehalten wird, zeigt Kdbg hier den Inhalt der CPU-Register an.

Das Fenster ist in 3 Spalten aufgeteilt:

  1. Die Spalte Register zeigt die Namen der Register.
  2. Die Spalte Wert zeigt den Inhalt der Register in einer mehr oder weniger rohen Form an. Diese rohe Form wird üblicherweise in Hexadezimaldarstellung angezeigt, selbst der Inhalt der Fließkommaregister.
  3. Die Spalte Dekodierter Wert zeigt den Inhalt der Register in dekotierter Form an. Bei den arithmetischen Registern ist das meist eine vorzeichenbehaftete Dezimalzahl, bei Fließkommaregistern wird die Fließkommazahl angezeigt, die Flag-Register werden manchmal die gesetzten Flags in Worten dargestellt (hängt von der verwendeten Version von gdb ab).
Durch Klicken mit der rechten Maustaste können Sie ein Kontextmenü aufrufen, über das Sie die Darstellung der Werte in der zweiten Spalte wählen können. kdbg-2.5.5/kdbg/doc/de/sourcecode.html000066400000000000000000000031041247243200200175110ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Quellcode Inhalt

Das Quellcode-Fenster

Das Quellcode-Fenster ist das Hauptfenster und ist immer sichtbar.

Das Quellcode-Fenster zeigt den Quellcode von Programmen an. Am linken Rand jeder Zeile befindet sich ein "aktiver Bereich". Dort wird ein mit einem Pfeil angezeigt, an welcher Stelle das Programm gerade ausgeführt wird. Weiters wird hier angezeigt, an welchen Stellen Haltepunkte gesetzt sind.

Neue Haltepunkte können gesetzt werden, indem Sie mit der linken Maustaste in den aktiven Bereich klicken. Mit der mittleren Maustaste können Sie vorhandene Haltepunkte aktivieren und deaktivieren.

Das kleine Pluszeichen '+' zwischen dem "aktiven Bereich" und der Quellcodezeile zeigt den Assembler-Code der Quellcodezeile an, wenn Sie darauf klicken. Dabei wird das Zeichen zu einem Minus '-', das den Assemblercode wieder verbirgt, wenn Sie darauf klicken.

Meistens werden Quellcode-Dateien automatisch geöffnet. Sie können Dateien manuell öffnen, indem Sie Datei|Quellcode öffnen wählen oder Quellcode öffnen aus dem Rechte-Maus-Menü. kdbg-2.5.5/kdbg/doc/de/stack.html000066400000000000000000000024111247243200200164630ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Stack Inhalt

Das Stack-Fenster

Das Stack-Fenster wird mittels Ansicht|Stack angezeigt. Hierin wird der Call-Stack (Backtrace, Stack-Frames) angezeigt, d.h. die Funktionen, die das Programm im Augenblick betreten und noch nicht verlassen hat.

Das innerste Frame (in dem sich das Programm gerade befindet) befindet sich an erster Stelle.

Sie können in ein anderes Stack-Frame umschalten, indem Sie einfach auf die entsprechende Zeile klicken. Das Quellcode-Fenster zeigt die Stelle an, in der der Aufruf in das nächst-innere Frame stattfand; die Anzeige der lokalen Variablen und die Ausdrücke werden umgeschaltet, sodass die lokalen Variablen des gewählten Frames angezeigt werden. kdbg-2.5.5/kdbg/doc/de/threads.html000066400000000000000000000037421247243200200170200ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Threads Inhalt

Die Programm-Threads

Das Fenster mit der Liste der Programm-Threas wird mittels Ansicht|Threads aufgerufen. Dieses Fenster listet die aktiven Threads des Programms auf.

Wichtig: Das Debuggen von Programm-Threads muss von der verwendeten gdb-Version unterstützt werden - es handelt sich hierbei nicht um ein Feature von KDbg. Für Linux-Systeme (i386) funktioniert gdb5 am besten.

Der Inhalt des Fensters wird jedesmal erneuert, wenn das Programm vom Debugger angehalten wird. (Das heisst, dass nicht der aktuelle Zustand des Programms angezeigt wird, während es läuft.)

Die erste Spalte zeigt die Thread-ID an, die zweite Spalte zeigt die Stelle, an der der Thread gerade abgearbeitet wird.

Die Markierung am Zeilenanfang benennt den aktiven Thread:

Indem Sie auf einen Thread klicken, wechseln Sie den aktiven Thread und die genannten Fenster werden entsprechend auf den aktuellen Stand gebracht. Ausserdem schaltet das Quellcode-Fenster zu der Programmstelle um, an der der aktive Thread angehalten wurde. kdbg-2.5.5/kdbg/doc/de/tips.html000066400000000000000000000035251247243200200163440ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Tipps Inhalt

Tipps und Tricks

  • Setzen Sie immer die Umgebungsvariable LD_BIND_NOW=1 auf glibc2-Systems. Wie Umgebungsvariablen gesetzt werden, wird hier erklärt.
  • Sie können Haltepunkte als Lesezeichen verwenden: Setzen Sie einfach einen Haltepunkt und deaktivieren Sie diesen. Später können Sie rasch an die entsprechende Stelle zurückkehren, indem Sie in der Liste der Haltepunkte doppel-klicken (oder  Code anzeigen klicken). Da sich KDbg alle Haltepunkte über Sitzungen hinaus merkt, werden sie sofort wieder gesetzt, sobald sie das entsprechende Programm das nächste Mal debuggen.
  • Auf folgende Weise können Sie Programmvariablen ändern: Im Watch-Bereich (rechts unten) geben Sie eine Zuweisung ein, z.B. var.member=17 und Klicken Neu. Die entsprechende Variable wird sofort geändert. Sie sollten die Variable nun sofort löschen (indem Sie sie auswählen und Entf klicken). Das ist notwendig, weil der Ausdruck (d.h die Zuweisung) sonst bei jedem Programmstopp ausgewertet wird.
  • Sie können Werte im Watch-Bereich in den verschiedenen Formaten anzeigen lassen, die gdb versteht. Z.B. zeigt /x var.member die Variable var.member in hexadezimaler Notation an.
kdbg-2.5.5/kdbg/doc/de/watches.html000066400000000000000000000025211247243200200170160ustar00rootroot00000000000000 KDbg - Benutzerhandbuch - Ausdrücke Inhalt

Ausdrücke (Watches)

Das Watches-Fenster wird mittels Ansicht|Ausdrücke angezeigt. Dieses zeigt beliebige Ausdrücke an (diese bezeichnet man auch als Watches).

Ein neuer Ausdruck wird hinzugefügt, indem dieser im Eingabefeld eingegeben wird und dann auf Neu geklickt wird. Um einen Ausdruck zu entfernen, klicken Sie diesen an (an der Wurzel des entsprechenden Baums) und klicken dann auf Entf.

Sie können auch eine Variable oder einen Struktur-Member aus dem Lokale-Variablen-Fenster herüberkopieren, indem Sie das dortige Kontextmenü zuhilfe nehmen.

Die eingegeben Ausdrücke werden zwischen Sitzungen gespeichert. Wir empfehlen, Ausdrücke zu entfernen, die nicht mehr benötigt, weil das die Arbeitsgeschwindigkeit von KDbg steigert. kdbg-2.5.5/kdbg/doc/en/000077500000000000000000000000001247243200200145045ustar00rootroot00000000000000kdbg-2.5.5/kdbg/doc/en/CMakeLists.txt000066400000000000000000000005031247243200200172420ustar00rootroot00000000000000install(FILES argspwdenv.html breakptlist.html globaloptions.html howdoi.html invocation.html localvars.html memory.html pgmoutput.html pgmsettings.html registers.html sourcecode.html stack.html threads.html tips.html types.html watches.html xslt.html index.html DESTINATION ${HTML_INSTALL_DIR}/en/kdbg) kdbg-2.5.5/kdbg/doc/en/argspwdenv.html000066400000000000000000000045141247243200200175560ustar00rootroot00000000000000 KDbg - User's Manual - Arguments, Environment

Contents

Specifying program arguments, working directory, environment variables

Choose Execution|Arguments to open a dialog where you can set program arguments, the working directory for your program, and environment variables.

Tab Arguments

In the edit box enter the arguments that shall be passed on to your program. Insert file name lets you browse for a file; the file name will be inserted in the edit box (at the cursor position).

Next time the program is started, the new arguments will be used.

Tab Working Directory

In the edit box you can specify the working directory for your program. Browse lets you browse for a directory. Your program will use the new directory only when it is run the next time.

The working directory also applies to gdb itself! The directory that you specify will be passed to gdb immediately, i.e. gdb will work with the new setting as soon as you press OK. This can influence whether source code files are found.

Tab Environment

In the Environment tab you can set environment variables that the program sees in addition to those that it inherits. In the edit box type in an expression of the form VARIABLE=value to set the environment variable VARIABLE to the value value, and click Modify. To remove a variable, select it from the list below and click Delete. To change the value, edit the value in the edit field and click Modify. If you change the name of the variable and click Modify, you add a new variable! The new environment variables will be used by your program the next time it is run.

Tab xsldbg Settings

This tab is only available when a XSLT script is debugged. Here you can specify various flags that influence the XSL translation and XSLDBG.

kdbg-2.5.5/kdbg/doc/en/breakptlist.html000066400000000000000000000114021247243200200177140ustar00rootroot00000000000000 KDbg - User's Manual - Breakpoint list

Contents

The Breakpoint List

The breakpoint list displays all breakpoints and watchpoints that are set and allows you to manipulate them. It can be displayed using View|Breakpoints.

The list of breakpoints

For each breakpoint the following is shown:

  • the breakpoint location,
  • the hit count,
  • the ignore count if set,
  • the condition if set.

The icon in front of the entry indicates whether the breakpoint is enabled (a red dot) or disabled (a bright red dot), whether the breakpoint is temporary (a tiny clock is overlaid), whether the breakpoint is conditional (a tiny question mark is overlaid), or whether the breakpoint is orphaned (a 'x' is overlaid).

Watchpoints are indicated by an eye glas icon in front of the line.

Orphaned breakpoints

Orphaned breakpoints are breakpoints that gdb cannot implant immediately. Orphaned breakpoints occur if you try to set a breakpoint in a file that is not part of the executable. In particular, this is the case if the file belongs to a shared library or dynamically loaded module: When the executable is loaded, gdb does not yet know about dynamic modules and, hence, cannot set breakpoints there. However, KDbg does not forget about requests to set breakpoints in dynamic modules: It tries to set orphaned breakpoints each time that the program stops. When the breakpoint can be set successfully, it turns into a normal breakpoint.

But there is an important consequence: Orphaned breakpoints are not effective, and the program will not stop there. The remedy is to set a breakpoint in the executable at the earliest possible point after which it is known that the dynamic module is loaded. For shared libraries this is usually in main() and for dynamically loaded modules it is after the call to dlopen() (or equivalent). When the program stops at this breakpoint the orphaned breakpoints from the dynamic module are set and become effective.

Manipulating breakpoints

It is important to note that breakpoints and watchpoints cannot be manipulated while the program is running. If the program has already been started, it must stop first - either by hitting a breakpoint that is already set or forcefully by choosing Execution|Break. Note that this will not terminate the program, it just interrupts it. You can now manipulate the breakpoints; then choose Execution|Continue to let the program continue.

To set a breakpoint on a specific source line, it is easiest to do this in the source code window. If you don't know the exact file and line number of a function, you can set the breakpoint by typing the function name in the edit box above the list and click Add Breakpoint.

You can disable and enable breakpoints by selecting them in the list and clicking Disable or Enable. Or you simply click on the breakpoint in the list using the middle mouse button - just like you enable and disable breakpoints in the source window.

You can set a condition on a breakpoint (so that the program is only stopped if the condition is true) or set an ignore count (so that the program is not stopped the next n times that the breakpoint is hit). To do that, press the Conditional button and enter the condition and/or ignore count.

Manipulating watchpoints

Watchpoints are a like breakpoints, except that they interrupt the program when the value of a memory location changes. As with breakpoints, watchpoints cannot be manipulated while the program is running. See above for more information.

To set a watchpoint, type an expression in the edit box above the list, then click Add Watchpoint. The program will stop when the value of the expression changes. Note that watchpoints that involve local variables can only be set when the program is stopped in a breakpoint (or has been interrupted by Execution|Break).

To remove the watchpoint, select it from the list and click Remove. If the expression involves a local variable, the watchpoint will be removed automatically when the program leaves the current frame.

You can set a condition and an ignore count on the watchpoint just like on breakpoints by selecting it and clicking Conditional.

kdbg-2.5.5/kdbg/doc/en/globaloptions.html000066400000000000000000000053371247243200200202560ustar00rootroot00000000000000 KDbg - User's Manual - Global Options

Contents

Global Options Dialog

To specify some global options, choose Settings|Global Options. You can set the following:

  • the command by which gdb is invoked,
  • the command that opens a terminal for the program's output,
  • whether the KDbg shall pop into the foreground when the program stops and a timeout when it shall go back again,
  • the tab width,
  • filters for source file names.

How to invoke gdb

If you want to use a different version of gdb, you can specify it under How to invoke GDB. The default command is gdb --fullname --nx. Be sure to also specify these options if you change the gdb executable. If you leave them away, KDbg will not work. If you messed up the entry, you can clear it to revert to the default setting.

How to invoke a terminal emulator

If you want to use a different terminal program to show the output of the program, specify it under Terminal for program output. The default setting is xterm -name kdbgio -title %T -e sh -c %C. In this entry, %T will be replaced by a title string, %C will be replaced by a Bourne shell script that loops infinitely so that the terminal window doesn't close. (No, it doesn't use CPU, it calls sleep 3600 in a loop :) An alternative for this setting could be konsole --name kdbgio --caption %T -e sh -c %C.

Pop into foreground

You can specify whether the KDbg window shall move itself into the foreground as soon as the program being debugged stops (at a breakpoint or due to a signal). The KDbg window is not activated, however (at least under KWM, the KDE window manager). Some users may feel that this behavior is intrusive, so this option is off by default.
If this option is on, KDbg will also retreat itself into the background when the program is continued by any command, but it does so only after a timeout that can be specified. This avoids that the debugger window flashes back and forth each time you click any of the Step commands.

File filters

You can specify wildcards for source files and header files, which are used in the file dialog of the File|Open Source command.
kdbg-2.5.5/kdbg/doc/en/howdoi.html000066400000000000000000000064071247243200200166720ustar00rootroot00000000000000 KDbg - User's Manual - How Do I...?

Contents

How Do I...?

... set breakpoints?

There's more than one way to set a breakpoint:

  • You can set it in the source window by clicking on the "active area" at the far left of the line.
  • You can set it by selecting the line in the source window and choosing an option from the Breakpoint menu.
  • You can set it in the breakpoint list.

If you can't set breakpoints, maybe the program is currently running. You can't set breakpoints while the program is running. Stop it first using Execution|Break. If you still can't set breakpoints, make sure that you have compiled and linked your program with debugging information enabled.

... display the value of a global variable or an arbitrary expression?

Use the Watch window.

... set watchpoints?

Watchpoints are manipulated in the breakpoint list.

... use a core dump?

First load the executable using File|Executable, then specify the core dump using File|Core dump.

... debug a program that's caught in an endless loop?

Start the program and let it run until it is in the endless loop. Then switch to KDbg and choose Execution|Break. You've just caught the nasty program in flagranti!

... achieve that the program passes over a breakpoint a number of times before it stops?

In the breakpoint list select the breakpoint; then click Conditional and specify the number of times to skip the breakpoint in the Ignore count field.

... set environment variables for the executable?

Select Execution|Arguments and specify the environment variables in the program arguments dialog.

... set a working directory for the executable?

Select Execution|Arguments and specify the working directory in the program arguments dialog.

... get rid of this terminal window?

Select Settings|This Program and switch to the Output tab. Select Only output, simple terminal emulation and click OK. Now restart the program (choose it from the list under File|Recent Executables). The program output goes now to the built-in output window and stdin is redirected to /dev/null.

You must do this for every new program that you debug.

Important: You should not do this if your program expects input from the terminal (usually stdin) or if its output requires nifty terminal emulation (more than carriage-return and line-feed). The built-in output window does not support input and terminal emulation.

kdbg-2.5.5/kdbg/doc/en/index.html000066400000000000000000000160171247243200200165060ustar00rootroot00000000000000 KDbg - User's Manual

KDbg - User's Manual

Contents


Introduction

KDbg is a front-end for gdb, the GNU debugger.

This means that KDbg itself is not the debugger. Rather, it communicates with gdb, a command line debugger, by sending commands to it and receiving the output, such as variable values. The menu commands and mouse clicks are translated into gdb commands, and the output of gdb is translated into (more or less) visible information, such as structured variable contents.

The upshot of all this is that KDbg completely relies on the capabilities of the underlying command line debugger, gdb. KDbg can do no more than gdb can. For example, if you have a gdb that does not supports debugging of threaded programs, KDbg cannot, either (even though it offers a threads window).

Using KDbg

Before you start using KDbg, you may want to review the options in the Global Options dialog that you invoke with Settings|Global Options.

Specifying a debugging target

To debug a program, choose File|Executable from the menu. If you have debugged the program earlier, you can choose it from File|Recent Executables. The program is loaded.

If you want to debug a core dump, you must first load the executable that produced the core dump, then choose File|Core Dump from the menu. Now KDbg goes to the point in the program that caused the core dump.

You can now set breakpoints, using the Breakpoint menu, the right mouse button menu, or the breakpoint window.

You can also choose program specific settings that apply only to the currently loaded executable using Settings|This Program, in the Program Settings dialog.

Furthermore, it is possible to debug XSLT scripts.

Running the program

Now run the program by selecting Execution|Run. The program now executes as usual until it either exits, hits a breakpoint or watchpoint, or receives a signal.

You can run the program with arguments, set a working directory, or set environment variables. To do this, choose Execution|Arguments and specify your options in the Program Arguments dialog (before you start the program).

You can also attach to a program that is currently running. To do this, first load the executable file like above. Then choose Execution|Attach. From the list processes specify the one you want to attach to and click OK. The running program is halted (not terminated), and the current point of execution is displayed in the source window.

On some systems the list of processes may not be available. In this case a simple edit box is available where the process number can be specified.

The program stopped - now what?

When the program stops at a breakpoint, watchpoint, or due to a signal, the source code window displays the line where the program stopped. It is very common that the program stops due to a signal (usually a SIGSEGV, segmentation violation) in a function that is not part of the program, that you have written. In this case you investigate the stack window and look for a function that you have written (start at the top of the list) and click on it. This will bring you to a location that you can start your search for the real bug.

In the menu Execution you find the commands that you need to run the program, step through code, and to interrupt the program (Break) while it is running. The important commands (Run and all kinds of Step) are bound to function keys. For efficient debugging it is strongly recommend that you get used to using them. You can use Settings|Configure Shortcuts if you want to bind the functions to different keys.

In the menu Breakpoint you find commands to set, clear, disable, and enable permanent and temporary breakpoints. You can display a list of breakpoints in the breakpoints window. You can also set a breakpoint by clicking at the left end of the source line (using the left mouse button), and you can enable and disable a breakpoint by clicking it using the middle mouse button.

The animation in the toolbar indicates whether the program is running. It stops when the program stopped in a breakpoint or for some other reason or when the program exited. This animated button is a shortcut for Execution|Break.

KDbg's information windows

KDbg displays information and accepts commands in number of different windows. In the menu View you find commands to show and hide these windows. They are docking windows, which means that you can drag them around and arrange them in any manner you like.

Tips and such

The following topics give some useful hints on using KDbg.

Author

KDbg is written by Johannes Sixt with contributions from these people (in no particular order):

  • Keith Isdale
  • Ben Burton
  • Daniel Thor Kristjansson
  • Matthew Allen
  • Ron Lerech
  • Neil Butterworth
  • Thomas Sparr
  • Max Judin
  • Johnny Chan
  • Ilmar S. Habibulin

KDbg homepage is at http://www.kdbg.org/.

kdbg-2.5.5/kdbg/doc/en/invocation.html000066400000000000000000000026061247243200200175470ustar00rootroot00000000000000 KDbg - Invocation

Contents

Invoking KDbg from the command line

Usage: kdbg [Qt-options] [KDE-options] [options] [program] [core] 

Generic options:
  --help                    Show help about options
  --help-qt                 Show Qt specific options
  --help-kde                Show KDE specific options
  --help-all                Show all options
  --author                  Show author information
  -v, --version             Show version information
  --license                 Show license information
  --                        End of options

Options:
  -t <file>                 transcript of conversation with the debugger
  -r <device>               remote debugging via <device>
  -l <language>             specify language: C, XSLT []
  -a <args>                 specify arguments of debugged executable
  -p <pid>                  specify PID of process to debug

Arguments:
  program                   path of executable to debug
  core                      a core file to use

kdbg-2.5.5/kdbg/doc/en/localvars.html000066400000000000000000000024551247243200200173660ustar00rootroot00000000000000 KDbg - User's Manual - Local Variables

Contents

The Local Variables Window

The local variables window is opened using View|Locals. The local variables window displays the contents of the local variables at the currently selected stack frame.

The set of local variables that are displayed is determined by the stack frame that is selected in the stack window.

Variable values that changed between stops of the program are displayed in red color.

The values of most variables can be changed. For this purpose, press F2 while the input focus is in the window or choose Edit value from the context menu. Then edit the value and hit Enter. Note that you cannot modify the strings that char* values point to in this way, just the pointer value.

Using the context menu you can move the active variable or structure member to the watched expressions window.

kdbg-2.5.5/kdbg/doc/en/memory.html000066400000000000000000000024011247243200200166770ustar00rootroot00000000000000 KDbg - User's Manual - Memory Dump

Contents

The Memory Dump Window

The memory dump window is displayed using View|Memory. It displays the contents of the program's memory at arbitrary adresses.

To display memory contents, enter an address in the edit field. The address need not be given in hexadecimal form - it can be an expression.

You can specifiy a format how the memory contents shall be displayed by chooseing the appropriate options from the popup menu that you invoke by clicking the right mouse button.

A number of address expressions are remembered. You can recall such an expression from the drop-down list. Please note that the address expression is remembered together with the format.

If you don't need to investigate memory contents, it is recommended that you clear the expression so that no memory dump is displayed - this speeds up the debugging process.

kdbg-2.5.5/kdbg/doc/en/pgmoutput.html000066400000000000000000000041031247243200200174340ustar00rootroot00000000000000 KDbg - User's Manual - Program Output

Contents

The Program Output Window

The program output window is displayed using View|Output. The output window captures text that is written to stdout and stderr by the program being debugged.

The output window does not allow to type input for the program and it features only minimal terminal emulation: \n (line-feed), \t (horizontal tab), and \r (carriage-return) are treated. These capabilities are usually sufficient to debug GUI programs which only write debugging output to stdout and stderr.

When a program is debugged with KDbg for the first time, the program output window is not used. The reason for this is that KDbg cannot know whether the program requires sophisticated terminal emulation or if it expects input through a terminal. So, a terminal emulator program is used by default. In order to redirect the output to the output window, you must do the following:

  1. Open the Settings dialog by selecting Settings|This Program.
  2. Switch to the Output tab.
  3. Choose Only output, simple terminal emulation and click OK.
  4. Reload the program by selecting it from the list in File|Recent Executables.

You can clear the contents of the output window by selecting Clear from the popup menu that appears when you click the right mouse button.

If the last line of the output is visible, the window always scrolls automatically so that the last line remains visible when new output arrives. If, however, you manually scroll up so that the last line is not visible, the visible portion of text will not change.

kdbg-2.5.5/kdbg/doc/en/pgmsettings.html000066400000000000000000000055151247243200200177440ustar00rootroot00000000000000 KDbg - User's Manual - Program Settings

Contents

The Program Settings Dialog

In this dialog, program specific settings can be selected. It is invoked by Settings|This Program. The settings apply only to the currently loaded executable and will be saved across sessions.

Important note: The chosen settings will only apply the next time the executable is loaded into KDbg. This means that after pressing OK in this dialog, you must reload the executable using File|Recent Executables!!

Debugger

In this section, the debugger to be used for the program can be chosen.

How to invoke GDB

Enter the command to invoke gdb. Leave this field empty to use the default gdb command as specified in the global options. When you are cross-compiling and remote-debugging, you will probably want to use a different gdb suitable for the target platform. The default command is gdb --fullname --nx. Be sure to specify at least --fullname if you change the gdb command. If you remove this command switch, KDbg will not work.

Output

In this section, the terminal emulation under which the program will run can be selected.

No input and output

Check this option if your program does not receive input from the terminal and you do not want to see the output that the program writes to stdout and stderr (if any). All three standard channels (stdin, stdout, and stderr) are effectively redirected to /dev/null.

Only output, simple terminal emulation

Check this option if your program does not receive input from the terminal (stdin will be redirected to /dev/null), and the output that it writes to stdout and stderr does not require sophisticated terminal emulation. The output will be shown in the Output window.

Full terminal emulation

Check this option if your program reads input from stdin or if the output to stdout or stderr requires terminal emulation. A terminal emulator will be invoked as specified in the global options.
kdbg-2.5.5/kdbg/doc/en/registers.html000066400000000000000000000027621247243200200174100ustar00rootroot00000000000000 KDbg - User's Manual - Register Dump

Contents

The Register Dump Window

Whenever the program stops, KDbg displays the contents of the CPU registers in the register dump window. To display this window, choose View|Registers.

The registers are grouped by the kind of register. The window contains 3 columns:

  1. The column Register displays the register name.
  2. The column Value displays the contents of the registers in a more or less raw form. The raw form is usually displayed as hexadecimal numbers, even the contents of floating point registers.
  3. The column Decoded value displays the contents of the registers in a decoded form. For arithmetic registers this is generally a signed decimal value, floating point registers are displayed as floating point numbers, the flag registers are sometimes decoded into named flags.

By clicking the right mouse button a context menu is popped up which lets you select how the value in the third column is displayed. You can change the type to use for all registers of a group at once if you choose the format for the group header.

kdbg-2.5.5/kdbg/doc/en/sourcecode.html000066400000000000000000000025531247243200200175320ustar00rootroot00000000000000 KDbg - User's Manual - Source Code

Contents

The Source Code Window

The source code window is the main window and is always visible.

The source code window displays program source code. At the left of each source line is an "active area". It displays a pointer to indicate which source line the program currently executes, and it indicates on which source lines breakpoints have been set.

New breakpoints can be set by clicking into the active area with the left mouse button. An existing breakpoint can be enabled and disabled by clicking with the middle mouse button.

The tiny plus '+' between the "active area" and the source line can be clicked on. If you do so, the source line's assembler code will be displayed. The plus turns into a minus '-', which, if clicked, will hide the disassembled code.

Mostly, source code windows are opened automatically. To open a new source file manually, click the right mouse button and choose Open Source or choose File|Open Source.

kdbg-2.5.5/kdbg/doc/en/stack.html000066400000000000000000000020251247243200200164760ustar00rootroot00000000000000 KDbg - User's Manual - Stack

Contents

The Stack Window

The stack window is displayed using View|Stack. The stack window lists the stack frames, i.e. the functions that the program has entered, but not yet left.

The innermost frame (where the program currently executes) is shown at the top.

To switch to a different stack frame, simply click on that stack frame. The source window displays the source line where the function invocation took place and the local variables window and the watch window change to reflect the local variables of the selected stack frame.

kdbg-2.5.5/kdbg/doc/en/threads.html000066400000000000000000000035371247243200200170340ustar00rootroot00000000000000 KDbg - User's Manual - Threads

Contents

The Threads Window

The threads window is displayed using View|Threads. The threads window lists the active threads of the program.

Note: Debugging threaded programs must be supported by the version of gdb that is used - it is not a feature of KDbg. For Linux systems this works best with gdb5 and later. However, at the time of this writing gdb still poorly supports threads on NPTL- (New Posix Threads Library) enabled systems (glibc 2.3.x and kernel 2.6.x).

The contents of the threads window are updated every time the program is stopped by the debugger. (That is, the window does not reflect the state while the program is running.)

The first column shows the thread ID, the second column identifies the location where the thread currently executes.

The marker in front of the line tells which thread currently is active:

  • The stack window displays the active threads's backtrace.
  • The local variables window displays the active thread's local variables.
  • The watch window uses the active thread's local variables to evaluate the expressions.

By clicking a listed thread, the active thread is switched, and the corresponding windows are updated. In particular, the source window displays the location where the active thread is currently halted.

kdbg-2.5.5/kdbg/doc/en/tips.html000066400000000000000000000037041247243200200163550ustar00rootroot00000000000000 KDbg - User's Manual - Tips and Tricks

Contents

Tips and Tricks

  • You can use breakpoints as bookmarks: Just set a breakpoint and disable it. Later, you can quickly come back to that breakpoint by double-clicking it in the breakpoint list (or select it and click View Code). Since breakpoints are persistent (i.e. KDbg remembers them across invocations of a program), you get them back next time you invoke KDbg for that particular program.
  • You can display a value in the watch section in different ways by prepending gdb's format specifiers in front of the variable to display. E.g. /x var.member displays the var.member in hexadecimal notation.
  • You can set breakpoints in a source files that belong to a shared library. Such breakpoints will be marked as orphaned if the program is not active. Orphaned breakpoints are not effective. In order to make them effective, the program must stop at a time when the shared library is loaded. For this it is usually sufficient to set a breakpoint in main(). At the time when this breakpoint is hit, the orphaned breakpoints in the shared library become effective.
  • Debugging multi-threaded programs on NPTL-enabled Linux systems (kernel 2.6.x or later and glibc 2.3.x or later) may sometimes fails; gdb stops the program at unexpected instances. In this case the following may help (using bash):
    LD_ASSUME_KERNEL=2.4.19 kdbg myprogram
    
    I.e. you run KDbg from the command line such that the old Linuxthreads implementation is used.
kdbg-2.5.5/kdbg/doc/en/types.html000066400000000000000000000203701247243200200165400ustar00rootroot00000000000000 KDbg - User's Manual - Type Tables

Contents

KDbg's Type Table

KDbg can display a short description of structured types, so that it is not necessary to expand the variable in the local variables window or watched expressions window. The information which member variable is displayed is stored in type tables. There is generally one type table per shared library.

KDbg's default type tables are located under $prefix/share/apps/kdbg/types. User defined type tables can be placed in ${KDEHOME}/share/apps/kdbg/types, where ${KDEHOME} is ~/.kde if it is not a defined environment variable. The file names end with .kdbgtt. Example: The type table for libqt.so is named qt.kdbgtt. User defined type tables override the type tables provided by the system.

A type table file obeys the regular KDE configuration file syntax. The file has the following groups:

  • A group [Type Table] which lists the types and information how the debugger can identify whether the program is linked against the library.
  • A group for each type which has information about how the value of such a type is displayed by KDbg.

In order to determine which type tables apply to the program being debugged KDbg lists the shared libraries it is linked to. Then it matches the names against the ShlibRE entries of all type tables. Those that match are used. If a type appears in several type tables, it is unspecified which one will be used.

KDbg's type recognition only works for libraries that are linked dynamically to the program being debugged.

The [Type Table] group

This group contains the following entries:

  • Types1, Types2, etc. These entries name the types, separated by commas. Each of the entries can list any number of types. The entries must be numbered consecutively (KDbg stops reading at the first gap), although an entry may be empty (i.e. contain no type at all). Sometimes the order in which the names are listed is important (see Alias types below).
  • ShlibRE. KDbg uses this entry to determine if the type table applies to the program being debugged. For this purpose KDbg determines the shared libraries to which the program is linked. If any of the libraries matches this entry, the type table applies. The entry is a Qt regular expression. Note that back-slashes must be doubled because the back-slash is an escape character in the configuration file syntax.
  • LibDisplayName. This entry is used in lists where the available type tables are listed to identify this type table.
    This is not used currently.
  • EnableBuiltin lists extensions that must be enabled if this library is used. Currently, two builtins are supported:
    • QString::Data is used to display unicode strings of Qt's QString class. See below.
    • QCharIsShort is used only in connection with QString::Data to specify that a unicode character is stored in an object of type short. See qt3.kdbgtt for examples.

In the case of regular types the names of types should follow the output of the whatis gdb command less any const, spaces, or trailing &. If the type contains a a comma in its name, it must be escaped with a backslash. But note that the comma should not be escaped in the type's group (which is described in the next section).

In the case of template types the name can be arbitrary because the type's group will mention the template name and a type parameter list.

The type's group

There is one group for each type that is named exactly as the type. Each group contains the following entries:

  • An optional Template entry that specifies the exact template type name as it is reported by gdb's whatis command. However, it is possible to replace template parameter types at the top-most level by an asterisk *, which acts as a wildcard: It matches one template type argument that is reported by whatis (except that an asterisk in the last position matches all remaining template type arguments).
  • Display determines how the value of the type is displayed by KDbg. The string must contain 1 to 5 percent characters '%'. These are replaced by the results of the expressions printed by the Exprx entries.
  • One or more of Expr1, Expr2, etc. Each of them must contain one or more %s sequence, which will be replaced by the expression whose value is investigated. The so constructed expression is submitted to gdb, and the result substituted back for the corresponding percent character in the Display string.
  • An optional FunctionGuardx that is associated with the corresponding Exprx. If the evaluation of the resulting gdb expression returns an error, the corresponding expression from Exprx is not evaluated. (This is used to guard function calls.)
  • Alias names an alias type. If this entry is present, the type is treated like the specified type. That alias type must appear before this type in the Typesx entries in the Type Table.

Currently the number of expressions per type is limited to 5. This can easily be changed if it's too restrictive, but I recommend not to go to that limit at all - it will slow down the debugging process.

KDbg recognizes a special extension that is used to display Qt 2.x's and Qt 3.x's unicode strings: If an Exprx is prepended with /QString::Data, it is assumed that the result of the expression is a pointer to a QString::Data. The value displayed is the unicode string that this instance of QString::Data represents (which can be QString::null if it is Qt's well-defined null string or (null) if the unicode member is the null pointer). See qt2.kdbgtt for examples.

Tip: It is not necessary to define derived types if they ought to be treated the same as the base class - KDbg can deduce derived types and uses the type specification of the (leftmost) base class. You can use the Alias entry to quickly specify that a type should be treated like a non-leftmost base class for a multiple-inheritance class.

An example

The example shows how QString and QRect are defined in qt3.kdbgtt. Furthermore, the template type QValueVector is defined. This example applies to Qt 3.x, which is located in shared library whose name ends in libqt-mt.so.3.

[Type Table]
Types1=QString,QRect
Types2=QValueVector
LibDisplayName=libqt 3.x
ShlibRE=libqt-mt\\.so\\.3$
EnableBuiltin=QString::Data,QCharIsShort

[QString]
Display={ % }
Expr1=/QString::Data (%s).d

[QValueVector]
Template=QValueVector<*>
Display={ size=% shared=% capacity=% }
Expr1=($tmp=(%s).sh)->finish-$tmp->start
Expr2=(%s).sh->count
Expr3=($tmp=(%s).sh)->end-$tmp->start

[QRect]
Display={ tl=(%,%) br=(%,%) }
Expr1=(%s).x1
Expr2=(%s).y1
Expr3=(%s).x2
Expr4=(%s).y2

This example shows these features:

  • The name of the template type, QValueVector is irrelevant. The exact type name is specified under the Template= entry. It specifies a single wildcard so that it applies to all specializations.
  • In order to evaluate the expression that was supplied in the %s only once, the result is stored in a temporary gdb variable and reused later in the same expression.
  • Note that it is safer to wrap the %s in parentheses.
kdbg-2.5.5/kdbg/doc/en/watches.html000066400000000000000000000025731247243200200170370ustar00rootroot00000000000000 KDbg - User's Manual - Watched Expressions

Contents

The Watched Expressions Window

The watched expressions window is opened using View|Watched Expressions. It displays arbitrary expressions.

To add an expression, type it into the edit field and press Enter or click Add. To remove an expression, click on it (choose the root of the expression) and click Del.

You can also move a variable or structure member from the local variables window to this window using the context menu in the local variables window.

The values of most expressions can be changed. For this purpose, press F2 while the input focus is in the window. Then edit the value and hit Enter. Note that you cannot modify the strings that char* values point to in this way, just the pointer value.

Watched expressions are stored across debugging sessions. It is recommended that you remove expressions that your don't need any longer because that speeds up the debugging process.

kdbg-2.5.5/kdbg/doc/en/xslt.html000066400000000000000000000022431247243200200163650ustar00rootroot00000000000000 KDbg - User's Manual - Debugging XSLT scripts

Contents

Debugging XSLT scripts

KDbg allows to debug XSLT (XML stylesheet translation) scripts using xsldbg, which must be available on your system.

Specifying the script and an XML file to transform

XSLT mode is automatically entered if a "program" is loaded that has a file name that ends in .xsl. In addition, the command line option -l XSL can be specified to explicitly choose this mode.

To debug an XSLT script it is necessary to specify an XML data file that the script can transform. This is done in the Program Arguments dialog, where the XML file is specified in the Program Arguments edit box.

kdbg-2.5.5/kdbg/doc/ru/000077500000000000000000000000001247243200200145305ustar00rootroot00000000000000kdbg-2.5.5/kdbg/doc/ru/.gitattributes000066400000000000000000000000271247243200200174220ustar00rootroot00000000000000*.html encoding=koi8-r kdbg-2.5.5/kdbg/doc/ru/CMakeLists.txt000066400000000000000000000004331247243200200172700ustar00rootroot00000000000000install(FILES argspwdenv.html breakptlist.html globaloptions.html howdoi.html localvars.html memory.html pgmoutput.html pgmsettings.html registers.html sourcecode.html stack.html threads.html tips.html watches.html index.html DESTINATION ${HTML_INSTALL_DIR}/ru/kdbg) kdbg-2.5.5/kdbg/doc/ru/argspwdenv.html000066400000000000000000000045151247243200200176030ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 愻м芶拏, 懱眙秸恌 鯔霰眚蹉吇

廱邁蹉吇 轄м芶拏瓬 倷珌畛迋, 畛蟠畷ж 佹埡昑Щ, 陓疻芶恄棸 玹眙秸恌

戁藍疶埧 俷恂 芶怹 橔俵旽曬吇|愻м芶拏 騷 趿硨袬 馨賻珌瓬珌 玹恔, 冾婘眐 趿 蚐珋籥 梌埡恘訰婥 轄м芶拏 珆攽窔袬攪珅 倷珌畛迋, 齬 畛蟠瘃 佹埡昑 陓疻芶恄棸 玹眙秸恌.

愻м芶拏 倷珌畛迋

蚆迍 覂疿恓 衲眐侜 跂狦 梖輿尕 轄м芶拏 冾芩恅恘 衲眐侂, 冾婘砣 鰍枒挃 蹙婥 陓疻鐘挃 倷珌畛迋. 埩 轄м芶拏 謬齣 孖俵杻硨袬挃 倷 蚝鼴梏楦攪 睋俷蚎 倷珌畛迋.

臗蟠瘃 佹埡昑

醟秸 畛衄玶珋曬 衲眐佹 跂狦, 冾婘眐 趿 迍秸埧 梖邁轂 畛蟠瘃 佹埡昑 倷珌畛迋. 襓珌畛迋 謬霰 畛蟠埡婥 梖邁蹉恘 佹埡昑Э 倷 蚝鼴梏暙 睋俷蚎.

臗蟠瘃 佹埡昑 埡匊 霰弝婟桲 騷 gdb! 廱邁蹉挃 袬虭 佹埡昑 謬霰 恓芶騷曬恘 陓疻鐘 gdb 赽婭倅 蚕枎 佹 婘杻冾 趿 恔笴籥 OK. 婘 迍秸 俵訞奷婥 恔 俵孖 そ帎瓬 孖狦挃 埧剆婘.

蟔疻芶恄棸 玹眙秸恌

蚥佸圪 陓疻芶恄棼 玹眙秸恌 跂鼴尕 趿畛秸恌 訰霰 VARIABLE=value 騷 梌埡恘訬 陓疻芶恄珅 玹眙秸恌 VARIABLE 硩醣曬吇 value 佮夼恌埧 恔 冼玿劼 橕芶恌婥. 颭 桫賻曬奷 陓疻芶恄珅, 趿藍疶埧 齬 衄孖侜 佮夼恌埧 恔 冼玿劼 囃賻尕. 颭 巟芶恓恌 硩醣曬奷 陓疻芶恄珅, 趿藍疶埧 齬 巟 衄孖佹, 珆疻鐘刱奿梛埧 齬 硩醣曬吇 俵旼 疻鐘刱奿瓬蹉奷 佮夼恌埧 俵 冼玿侜 橕芶恌婥. 槿旻 趿 巟芶恌埧 奼 陓疻芶恄珅 佮夼恌埧 俵 冼玿侜 橕芶恌婥, 婘 趿 鰍臏訰埧 恘赹 陓疻芶恄梏! 鎯趿 陓疻芶恄棸 玹眙秸恌 謬齣 孖俵杻硨袬挃 袬袹 倷珌畛迋珅 倷 蚝鼴梏暙 睋俷蚎.

槿旻 Linux 趿 孖俵杻祰籥 薺蟯奻埧劼 glibc2, 婘 袬 恓狟狦奼 梌埡恘訰婥 陓疻芶恄梏 玹眙秸恌 LD_BIND_NOW. 檹曬 袬笥, 痽狟 趿 梌埡恘訰旻 硩醣曬吇 嗩珅 陓疻芶恄珅 1 騷 赽囌 蚥衶圴 珆攽騰. 槿旻 玴 恓 謬霰 梌埡恘訞曬, 婘 gdb 恓 蚐珋籥 珃殎籣婟曶婥 俵衖ж赹 珆攽騰 ( 巟) 蚕衲攪挃 ぱ恂蟹, 奼俵眕奿桲阽 巟 畛矬攫捇阽 薺蟯奻埧 libc 珃埡杻挃. kdbg-2.5.5/kdbg/doc/ru/breakptlist.html000066400000000000000000000072331247243200200177470ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 鯗孖玹 婘畷 珃埡恘袬 鯔霰眚蹉吇

鯗孖玹 婘畷 珃埡恘袬

鯗孖玹 婘畷 珃埡恘袬 珆狟畛祫籥 赽 梌埡恘訞曬挃 婘痾 珃埡恘袬 倷珃迍婞 俵稊玶捇 芩恌俷旻眐袬婥 奼. 懫 迍秸 蹙婥 趿稊蹉 俵衵鼴衲豜 俷恂埡 芶怹 鼵辮譪痾 珃埡恘袬.

蟔疻畷挎 婘畷 珃埡恘袬

颭 佹秺珅 婘痾 珃埡恘袬 珆狟畛祫籥衭 蚝鼴梏暙:
  • 芶衲玴賺珋霰恌 婘痾 珃埡恘袬,
  • 豇籥瘃 珃埡恘豜 恔 嗩珅 婘痾,
  • 豇籥瘃 倷玿梌冾 婘痾 珃埡恘袬, 籣旻 梖邁蹉,
  • 梌昑訰 珃埡恘袬, 籣旻 梖邁恘.
橚玴佹 恔倷珆屺 睋倅蚕 梖邁還袬籥 衃衲珇恌 婘痾 珃埡恘袬: 訬抸畷恔 - 刳輾恔 婘痾, 趿佮濯曬 - 衿籥昑-刳輾恔 婘痾, 貥攪曬恔 婘痾 珃埡恘袬 - 芩旼挎侂 瓾袃 妀 梌昑谻蹊 婘痾 珃埡恘袬 - 芩旼挎侂 硩賸 豜倷珃.

譪痾 倷珃迍婞 狟畇恔瓾殮衭 夼玴冾 枎倧 恔倷珆屺 衃珆覂娸婟梏暙 睋倅蚕.

欃畛訞曬吇 婘痾趨 珃埡恘袬

醚狟狦奼 珆芶埩婥, 痽 婘痾趨 珃埡恘袬 倷珃迍婞 恓豜硰珋恘 桸畛訞晟 豜 貥攪 畛蟠婬 倷珌畛迋. 槿旻 倷珌畛迋 欶 睋俷暙恔, 恓狟狦奼, 痽狟 玴 珃埡恘訰攽衯 旻蟠 俵釓 婘痾 珃埡恘袬, 旻蟠 倷妅桫尕攫媓 俵衵鼴衲豜 趿硨袬 俷恂埡 芶怹 橔俵旽曬吇|襓籤袬婥. 婘 恓 睋覂砢尕 孖俵旽曬吇 倷珌畛迋, 赽龔 旻訹 珃埡恘訰 齬. 蠐陓眧 趿 迍秸埧 桸畛訞晟 婘痾趨 珃埡拵, 俵蚝 畷ж 趿藍疶埧 俷恂 橔俵旽曬吇|襓狦玶窔婥 騷 倷狦玶秸恌 孖俵旽曬奷 倷珌畛迋.

颭 梌埡恘訬 婘痾 珃埡恘袬 恔 玿疻霰旼恄梏 衲眐劼 孖狦恘ж 埧剆埡 蚆阽 倷珃婬 衄珃狟玵 朒曶籥衭 梌埡恘訬 齬 玹恓 孖狦挃 埧剆婘. 槿旻 趿 恓 硩豁埧 奼曬 そ帎 恘芶畛 衲眐侂, Ь 恔狦尕衭 妅埧疻袀濫蹊 袬 ぱ恂蟹, 趿 倷珃婘 迍秸埧 跂籣埩 齬 奼 衲眐侜 跂狦 恔 衄孖冾 佮夼挍婥 恔 冼玿劼 餀臏訰婥 譪痾 擽埡恘袬.

戁 迍秸埧 訬抸瓾婥 趿佮濯轂 婘痾 珃埡恘袬, 趿觴避 圮 衄孖侜, 睋埧 佮夼挍 恔 冼玿侂 鼲抸瘃婥戁佮濯尕. 樻 倷珃婘 佮夼恌埧 衵鼴恓 冼玿冾 阽袶 俵 挍笥玵 嗌攪曬婭 衄孖佹 - 趿 謬霰埧 訬抸瓾婥 趿佮濯轂 圮 埡 秸, 佹 玹恓 孖狦挃 埧剆婘.

戁 迍秸埧 梌埡恘訰婥 梌昑訰 衵謝轂椕蹉奷 婘痾 珃埡恘袬 妀 梌埡恘訰婥 豇籥瘃 倷玿梌冾 嗩珅 婘痾, 俵佹稌袬濫圴 冾旻畷衲豜 倷珂狦瓬, 倷 冾婘砣 恓 謬霰 倷珈稊鼴曬 珃埡恘. 颭 嗩珌 佮夼恌埧 恔 冼玿劼 灃昑訰 跂鼴尕 梌昑訰 /妀 豇籥瘃 倷玿梌冾.

欃畛訞曬吇 婘痾趨 倷珃迍婞

譪痾 倷珃迍婞 俵珋 恔 婘痾 珃埡恘袬, 睋 孖佮濯曬吇 婘ж, 痽 倷籤椕蹉吇 倷珈蚧狦尕 婘杻冾 倷 巟芶恓恌 硩醣曬奷 衃霰眚奼珌 釓迕埩. 蘅匊 佹 婘痾 珃埡恘袬, 婘痾趨 倷珃迍婞 恓杻硢 桸畛訞晟 豜 貥攪 孖俵旽曬奷 倷珌畛迋. 蟴黨狟恓 蚐. 趿袹.

颭 梌埡恘訬 婘痾 倷珃迍婞, 跂鼴尕 趿畛秸恌 衲眐劼 跂狦 恔 衄孖冾 佮夼恌埧 恔 冼玿劼 餀臏訰婥 譪痾 襓珃迍婞. 襓珌畛迋 珃埡恘訰娸 倷 巟芶恓恌 硩醣曬奷 趿畛秸恌. 醚狟狦奼 珆芶埩婥, 痽 婘痾 倷珃迍婞, 孖俵杻祰濫吇 昑佹杻挃 陓疻芶恄棸, 迍м 蹙婥 梌埡恘訞曬 婘杻冾 冾Ь 倷珌畛迋 倷籤袬恔 婘痾 珃埡恘袬 (妀 倷妅桫尕攫媓 俵衵鼴衲豜 趿硨袬 俷恂埡 芶怹 橔俵旽曬吇|襓籤袬婥).

颭 桫賻曬奷 婘痾 倷珃迍婞, 趿藍疶埧 齬 巟 衄孖佹 佮夼恌埧 恔 冼玿劼 囃賻尕. 槿旻 趿畛秸恌 孖俵杻祰籥 昑佹杻挃 陓疻芶恄棸, 婘 婘痾 倷珃迍婞 謬霰 桫賻曬 避婘芩埩畷蚎 倷 趿狦 倷珌畛迋 巟 鐘恄珅 狟攽衲 衲攣 (ぱ恂蟹).

戁 埡匊 迍秸埧 梌埡恘訰婥 騷 婘畷 倷珃迍婞 梌昑訰 豇籥瘃 倷玿梌冾, 趿觴避 龔 巟 衄孖佹 佮夼挍 恔 冼玿劼 灃昑訰. kdbg-2.5.5/kdbg/doc/ru/globaloptions.html000066400000000000000000000051371247243200200203000ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 俵杻硨袬埧曶 - 褎狟賻媓棸 蟔疻芶恄棸 鯔昉籤祫恌

靾昑ж豜 玹恘 褎狟賻媓棼 蟔疻芶恄棼

颭 梌埡恘訬 恓冾婘砣 д狟賻媓棼 陓疻芶恄棼 迍笥 孖俵杻硨袬婥 碻帎|褎狟賻媓棸 蟔疻芶恄棸. 戁 迍秸埧 梌埡恘訰婥:
  • 冾芩恅, 俵迍楉 冾婘眐 趿稌袬籥衭 gdb,
  • 冾芩恅, 冾婘畛 珆刳椕豁 埧眝妅賻 騷 趿豜鐘 倷珌畛迋,
  • 鰍枒曬 旻 KDbg 陓疻狦尕 狟椊恘覂恄椋 疻窔 俵蚝 珃埡恘訬 倷珌畛迋 畷疻 佹冾 倷玵纖梊玹 貥攪曬 玴 玿晟 陓疻岉籥 に恘趿 疻窔,
  • 畛硰籤 埡謬曶蟹.

蹅 趿稌袬婥 gdb

槿旻 趿 孖俵杻祰籥 畛确弚挃 覂眑圪 gdb, 挍笥 梖邁轂 圮 蹅 趿稌袬婥 gdb. 蟴 梠玶瓾恌 孖俵杻祰籥衭 に眝 gdb --fullname --nx. 襓瓬籤寑, 梖邁蹉 旻 鐘恄棸 玿蟹, 籣旻 趿 巟芶恌旻 孖俵旽捇阽 迍齣杻 gdb. 槿旻 趿 倷玿梌埩埧 圮, KDbg 恓 謬霰 畛蟠埡婥. 槿旻 趿 孖俵眕妀 睋倅衯, 齬 迍笥 癹孖埩婥, 陓疻覂麵 硩醣曬奷 俵 梠玶瓾恌.

蹅 趿稊轂 嗐梋晟玾 埧眝妅賻

槿旻 趿 珆尕 孖俵堄嵃瓬轂 畛确弚挃 埧眝妅賻媓棸 倷珌畛迋 騷 俵佹睋 趿豜鐘 倷珌畛迋, 梖輿尕 圮 蠐眝妅賻 騷 趿豜鐘 倷珌畛迋. 恔畷恌 俵 梠玶瓾恌 – xterm -name kdbgio -title %T -e sh -c %C. 鐘恄珅 睋倅蚕, %T 睋芶恮籥衭 埩婭杻恘 衲眐冾, %C 睋芶恮籥衭 蚎疶俶玵 冾芩恅恘ж 妅埧眓疻埡婘畛 瑳眛, 冾婘砣 謬霰 蟹佮弚籣侂 趿稌袬婥衭, 俵佹 恓 倷珈硨岉籥 睋刳椆奷 埧眝妅賻媓珌 玹恔. (鯤疶俶 孖俵杻祰籥 蟹佮 sleep 3600). 憀寑籤恔訰\珅 鐘恄棼 梌埡恘豜 迍秸 蚝欶尕 konsole --name kdbgio --caption %T -e sh -c %C.

蟔疻狦 狟殔挃 疻窔

戁 迍秸埧 梖邁轂 KDbg 玹挍 陓疻覂衲孖 狟殔挃 疻窔, 冾Ь 珆攽窔袬攪蹊 倷珌畛迋 睋覂砢尕衭 ( 婘痾 珃埡恘袬 妀 俵 蚕ё賻). 橁醣 玹恘 KDbg 恓 賸埩訰眙籥衭 (俵 刳購恓 芶疻 KWM &150; 玹玴恘 芶恓齡籤 KDE). 醚冾婘砣 俵杻硨袬埧曶 埡冾 俵覂霰恌 迍秸 俵佹睋娸 恔豽筊屺棎, 俵嗩玵 俵 梠玶瓾恌 鐘恄蹊 玿蟹 珆佮濯曬.
槿旻 玿蟹 訬抸畷恔, KDbg 陓疻佮濯尕衭 に恘趿 疻窔, 籣旻 倷珌畛迋 謬霰 倷狦玶秸恔, 恘 婘杻冾 俵 倷畈籣婟圪 睋鐘恄珌 貥攪曬恘ж 倷玵纖梊佹. 婘 蚅攫蹉 騷 婘ж, 痽狟 玹恘 珆攽巍夼 恓 陓疻佮濯賻珃 赽 貥攪, 冾Ь 孖俵杻祰籥衭 俵衖ж豜 孖俵旽曬吇 倷珌畛迋.
kdbg-2.5.5/kdbg/doc/ru/howdoi.html000066400000000000000000000066641247243200200167230ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 俵杻硨袬埧曶 - 蹅 迍м...? 鯔霰眚蹉吇

蹅 迍м...?

... 梌埡恘訰婥 婘痾 珃埡恘袬?

鯕暙衲赹籥 恓蚎玶媌 衄珃狟瓬:
  • 轀祫埩攪 旼豜 佮避幵 阽袶 玹恓 孖狦恘ж 埧剆埡 "賸埩谻珅 狟攽衲", 恔狦栳戀衭 蚝纔 珆 衲眐侂 孖狦恘ж 埧剆埡.
  • 戁觴轂 衲眐劼 玹恓 孖狦恘ж 埧剆埡 趿觴轂 玿蟹 芶怹 譪痾 珃埡恘袬.
  • 戁 迍秸埧 豜衄玶嵃瓬轂衭 衄孖冾 婘畷 珃埡恘袬.
槿旻 趿 恓 迍秸埧 梌埡恘訰婥 婘痾 珃埡恘袬, 豜硰珋恘 倷珌畛迋 畛蟠埡籥 鐘恄椋 迍芶拏. 輴Ь 倷珌畛迋 畛蟠埡籥, 梌埡恘訬 婘畷 珃埡恘袬 恓豜硰珋恔. 擽埡恘訰埧 倷珌畛迋 俵迍楉 戁俵旽曬吇|襓籤袬婥. 槿旻 趿 俵-倷纖恓邯 恓 迍秸埧 梌埡恘訰婥 婘痾 珃埡恘袬, 倷瓬籤寑, 蚎玵倅旻眐袬恔 衃觴蹉 旻 袬衖 倷珌畛迋 俵闡籤笵珅 妅に眝謄圪 騷 珆攽騰.

... 梌埡恘訰婥 硩醣曬吇 д狟賻媓珅 陓疻芶恄珅 妀 佹冾ж-旻蟠 趿畛秸恌?

橔俵杻祰彸 玹恘 襓珃迍婞.

... 梌埡恘訰婥 婘痾 倷珃迍婞?

譪痾 倷珃迍婞 梌埡恔訞屺謊娸 衄孖侜 婘畷 珃埡恘袬.

... 孖俵杻硨袬婥 鐘迖 釓迕埩?

鯰醣賻 恓狟狦奼 睋й殑尕 孖俵旽捇阽 迍齣杻, 孖俵杻祰 芶怹 碻帎|橔俵旽捇阽 迍齣杻, 睋埧 梖邁轂 衃珆覂娸婟梏楦 鐘迖 釓迕埩, 孖俵杻祰 碻帎|靾迖 蟥迕埩.

... 珆攽窔袬婥 倷珌畛迋, 衃霰眚鄹梏 藍蚎玴邏挃 蟹佮?

蹈梌埩埧 倷珌畛迋 俵鰍秺尕, 俵佹 玴 豜岉籥 藍蚎玴邏挃 蟹佮. 蟔疻佮濯尕籣 KDbg 趿藍疶埧 戁俵旽曬吇|襓籤袬婥. 靾旼 迍笥 孖俵杻硨袬婥 珆攽鰍痸棸 衵鼴衲袬.

... 蚅攫轂 埡, 痽狟 倷珌畛迋 玿疻霰旼恄狣 冾旻畷衲豜 畛 囟恘疶眐袬攽 婘痾 珃埡恘袬 豜 貥攪 倷珂狦 鰍 婘ж, 佹 恔痸籥 倷籤椕轂寔?

衄孖侜 婘畷 珃埡恘袬 趿藍疶埧 婘痾 珃埡恘袬; 恔笴尕 灃昑谻蹊 梖輿尕 冾旻畷衲豜 畛 騷 倷玿梌佹 婘痾 珃埡恘袬 俵旼 孖昑 倷玿梌冾.

... 梌埡恘訰婥 陓疻芶恄梏 衵鼴 騷 孖俵旽攪珌 迍齣曶?

戁藍疶埧 戁俵旽曬吇|愻м芶拏 梖輿尕 陓疻芶恄棸 衵鼴 馨賻珌 轄м芶拏瓬 倷珌畛迋.

... 梌埡恘訰婥 畛蟠瘃 佹埡昑 騷 孖俵旽捇迍ж 迍齣曶?

戁藍疶埧 戁俵旽曬吇|愻м芶拏 梖輿尕 畛蟠瘃 佹埡昑 馨賻珌 梑м芶拏瓬 倷珌畛迋.

... 巟臏訰婥衭 珆 埧眝妅賻媓珌 玹恔?

戁藍疶埧 碻帎|轀衲眐帊 陓疻岉尕 恔 芶怹 戁豜. 戁藍疶埧 譪杻冾 趿豜, 倷珃埡 嗐梋捙奷 埧眝妅賻 恔笴尕 OK. 蠐陓眧 陓疻睋俷衲尕 倷珌畛迋 (趿藍疶埧 齬 巟 衄孖佹 碻帎|蟴蚝鼴恌 孖俵旽捇阽 迍齣杻). 戁豜 倷珌畛迋 埧陓眧 陓疻恔倷避旼 衃矬蹉恘 玹恘 趿豜鐘, 佹畷衲覂 衲蹉鐘眕恘ж 俵婘佹 跂狦 孖俵杻祰籥衭 /dev/null.

戁 鰍枒挃 倷珈稊籣埩 鐘恄梏 玿籤謄劦 騷 佹秺珅 恘豜 珆攽窔袬攪珅 倷珌畛迋.

鷙笥:戁 恓 鰍枒挃 霰攽婥 嗩珌, 籣旻 倷珌畛迋 瘃埡籥 鐘恄棸 衃 衲蹉鐘眕恘ж 俵婘佹 跂狦 (狟殔恘 埧眝妅賻) 妀 齬 趿豜 婞鷓桲 蟠旼 妅埧昍攣婭賻媓珅 嗐梋捙圪 埧眝妅賻 (婘 籣婥 恓 婘杻冾 豜稊畛埡 佹疻堍 倷珌玴 衲眐侂). 懱恘 趿豜鐘 恓 俵闡籤窔袬籥 跂狦 嗐梋捙劦 埧眝妅賻. kdbg-2.5.5/kdbg/doc/ru/index.html000066400000000000000000000163611247243200200165340ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶

KDbg - 藑冾豜鼯婟 俵杻硨袬埧曶

鯔霰眚蹉吇


蠯鼴曬吇

KDbg 朒曶籥衭 й谿弚籣侂 妅埧痄戀衃 gdb, 珆攽巍夼玵 倷狣刱 GNU.

婘 畇恔瓾籥, 痽 KDbg 蚆 俵 蚥藍 恓 朒曶籥衭 珆攽巍夼玵. 鯤玾齬, 玴 狟暕籥衭 gdb, 珆攽巍夼玵, 孖俵杻祰濫奼 冾芩恅挍 衲眐劼, 俵袃攽 攪 冾芩恅 俵枎瓾 圮 疻祰杻埡, 恔倷奼籤, 硩醣曬奷 陓疻芶恄棼. 襌恂婬 芶怹 梖邁蹉奷 阽訹 倷欐觴邁梏娸 俵蚝鼴瓬轂攫媓珃婥 冾芩恅 gdb, 疻祰杻埡 倷欐觴邁桲娸 蟠旼-芶恓 訰祰賻媓玵 倷鼴衲避旼恌, 埡冾邯 佹 衲眙刱梑恘 衃霰眚奼狣 陓疻芶恄棼.

屩狟暙恌 趿袹 蚎邁蹉恘ж - KDbg 藷旻冾 睋訰蚕 珆 豜硰珋恘衲戀 孖俵杻祰攪珌 珆攽巍夼 gdb. KDbg 恓 迍秸 霰攽婥 蟠杻袹, 畷 霰攽籥 gdb. 轀倷奼籤, 籣旻 奼鰾暕晊 袬 覂眑奷 gdb 恓 俵闡籤窔袬籥 珆攽騰 迓珌玿珆癹挃 倷珌畛迋, 婘 KDbg 恓 俵迍秸 袬 嗩玵 (恓蚐珆眒 恔 婘, 痽 玴 趿豜馨 玹恘 俵婘冾).

橔俵杻硨袬恌 KDbg

蟔疻 恔瓾昑 孖俵杻硨袬恌 KDbg 趿 恔覂眛狣 睋珆尕 倷珃迍婞籥 玿蟹 馨賻珌 褎狟賻媓棸 懩蟹, 冾婘砣 迍笥 趿稊轂 巟 俷恂埡 芶怹 碻帎|褎狟賻媓棸 懩蟹.

廱邁蹉吇 珆攽窔袬攪珅 倷珌畛迋

颭 珆攽騰 倷珌畛迋 趿藍疶埧 俷恂 芶怹 碻帎|橔俵旽捇阽 迍齣旻. 槿旻 趿 畛恓 珆攽窔袬旻 嗩 倷珌畛迋, 趿 迍秸埧 趿觴轂 齬 巟 俷恂埡 碻帎|蟴蚝鼴恌 橔俵旽捇阽 糨齣旻. 襓珌畛迋 睋й殑尕衭.

槿旻 趿 珆尕 倷珈稊籣埩 珆攽騰 俵 鐘迖 釓迕埩, 婘 蚔醣賻 趿 鰍枒挃 睋й殑尕 倷珌畛迋, 俵眐馨軘梏 嗩珆 鐘迖, 俵婘 睋й殑尕 蚆 鐘迖, 趿觴避 俷恂 芶怹 碻帎|靾迖 蟥迕埩. 蠐陓眧 KDbg 陓疻岉籥 婭 婘痾 倷珌畛迋, 冾婘畛 趿稊賻 衃矬蹉吇 鐘迖 釓迕埩.

蠐陓眧 趿 迍秸埧 梌埡恔訞屺轂 婘痾 珃埡恘袬, 奾玶嵃桻 芶怹 Breakpoint, 芶怹, 趿稊豁迍 倷避珅 冼玿冾 阽詙, 妀 玹恘 婘畷 珃埡恘袬.

蘅匊 趿 迍秸埧 梌埡恘訰婥 恔衲眐帊 婘杻冾 騷 珆攽窔袬攪珅 鐘恄椋 迍芶拏 倷珌畛迋 馨賻珌 轀衲眐帊 襓珌畛迋, 趿稌袬攪玵 俷恂婘 芶怹 碻帎|轀衲眐帊.

橔俵旽曬吇 倷珌畛迋

蠐陓眧 睋俷衲尕 倷珌畛迋, 趿觴避 俷恂 芶怹 橔俵旽曬吇|蹈梌. 蠐陓眧 倷珌畛迋 謬霰 孖俵旽晟寔 狟殔挃 狟畛硨 鰍 埧 俵, 俵佹 玴 旻蟠 恓 玹玴瘃娸, 旻蟠 恓 俵釓霰 婘痾 珃埡恘袬 妀 婘痾 倷珃迍婞, 旻蟠 恓 俵枎瘃 蚕ё賻.

戁 迍秸埧 睋俷衲尕 倷珌畛迋 轄м芶拏趨, 梌埡恘訰婥 畛蟠瘃 佹埡昑, 埡匊 陓疻芶恄棸 玹眙秸恌 騷 鐘恄珅 倷珌畛迋. 颭 嗩珌 趿藍疶埧 俷恂 芶怹 橔俵旽曬吇|愻м芶拏 梖輿尕 袬袶 釓畛芶婞 馨賻珌 愻м芶拏 襓珌畛迋 (陓疻 睋俷蚎玵 倷珌畛迋).

戁 埡匊 迍秸埧 俵騰抸瘃婥衭 欶 畛蟠埡濫戀 倷珌畛迋. 颭 嗩珌 睋й殑尕 孖俵旽捇阽 迍齣杻, 佹 玿孖蹉 趿袹. 轂攪 趿藍疶埧 俷恂 芶怹 橔俵旽曬吇|蟴鼯狣馨恌婥衭. 廱輿尕 厊曬埩づ佹婘 倷狪籣蚆 佮夼恌埧 恔 OK. 臗蟠埡濫蹊 倷珌畛迋 謬霰 珃埡恘訞曬 (恘 恓 倷籤袬恔), 玹恓 孖狦挃 埧剆婘 謬霰 梖邁蹉 埧劼暕 婘痾 珃埡恘袬.

襓珌畛迋 珃埡恘訞曬 - 痽 埧陓眧?

輴Ь 倷珌畛迋 珃埡恔訞屺豁娸 婘痾 珃埡恘袬, 倷珃迍婞 妀 倷 俵枎畷恌 蚕ё賻, 玹恓 孖狦挃 埧剆婘 梖邁椕豁娸 埧劼暕 衲眐佹 珃埡恘訬 倷珌畛迋. 輾婘 赽婞邏豁娸 蚕婭謄奷, 冾Ь 倷珌畛迋 珃埡恔訞屺豁娸, 俵枎瓾 蚕ё賻 (狟殔恘 SIGSEGV), 恔狦晊 ぱ恂蟹, 冾婘眙 趿 趿稌袬籥 巟 衿狣 倷珌畛迋, 恘 蚆虭 恓 畛祴謝轂椕賻. 嗩玵 蚝殌豁 倷珃迍婞尕 玹恘 衲攣 恔岉尕 ぱ恂蟹, 冾婘眙 倅蚆旻 趿 (恔瘃恔 覂砢妅 衄孖佹) 佮夼恌埧 恔 恓. 婘 梖輿籥 袬 芶衲, 冾婘眐ж 趿 蚐珋籥 恔瓾婥 俵孖 畈匟侂 袬袹 倷珌畛迋.

芶怹 橔俵旽曬吇 趿 恔岉籥 冾芩恅, 冾婘砣 袬 俵恔鰍覲娸 騷 睋俷蚎 倷珌畛迋, 俵衖ж豜 珆攽騰, 倷籤椕蹉奷 孖俵旽曬奷 倷珌畛迋 (襓籤椕蹉吇). 鷙笥棸 冾芩恅, 埡侂 佹 蹈梌 赽 訰囁 豳瓬, 倷屺栚蹉 ぱ恂蟹玴賻媓棎 佮避幵趨, 冾婘砣虭 疻冾芶恅桲娸 俵杻硨袬婥衭 騷 俵趿袹恌 剺ち刱屺恘衲 珆攽騰.
埩 ぱ恂蟹 恓 恔衲畛屺謊娸, 恘 迍秸 趿 睋珆尕 谻籣埩 衿珅 訬攽 畛祴謝珆轂 嗩 ぱ恂蟹玴賻媓珃婥?

芶怹 譪痾 珃埡恘袬 趿 恔岉籥 冾芩恅 騷 梌埡恘訬, 蚔晟奷, 訬抸畷恌 趿佮濯曬奷 貥攪曬挃 俵衲珇恄棼 婘畷 珃埡恘袬. 戁 迍秸埧 趿覂衲 衄孖玹 婘畷 珃埡恘袬 玹恘 婘畷 珃埡恘袬. 戁 埡匊 迍秸 梌埡恘訰婥 婘痾 珃埡恘袬, 佮夼挍 旼豜 冼玿冾 阽袶 旼豜 俵旼 衲眐侂 孖狦恘ж 埧剆埡. 颭 訬抸畷恌 趿佮濯曬奷 婘痾 珃埡恘袬 佮夼恌埧 衵鼴恓 冼玿冾 阽袶 恔 婘痾 珃埡恘袬.

籣埧疻恂 恔 釓恓旻 妅衲眙芶拏瓬 俵佹稌袬籥, 痽 gdb 畛蟠埡籥, 嗩玵 蚝殌豁 玴 覂眕尕衭. 輴Ь 玴 覂眕尕衭 蹙衲眐, KDbg 恓 謬霰 倷妅奼轂 冾芩恅 孖俵旽曬奷, 籣旻 玴 貥鄹豁娸 芶騷曬恘, 婘 KDbg 豇尕椕豁 硩醣曬奷 陓疻芶恄棼.

橁に眝謄奻恄棸 玹恔 KDbg

KDbg 趿豜馨 妅に眝謄劦 倷妅奼豁 冾芩恅 畛确弚挃 玹恔. 芶怹 趿 狟恔眙窔埧 冾芩恅 騷 趿硨袬 睋刳椆奷 嗩圮 玹玴. 壧 嗩 玹恔 趿 迍秸埧 畛硰邐轂 埡, 佹 袬 桫狟恘.

鯔覂婬 倷.

鯦鼴梏楦 畛矬攫 衃霰眚轂 俵旼硩棸 衿鼴曬奷 狟 孖俵杻硨袬恌 KDbg.

橕覂衲挃 倷狟旼阽

gdb 4.16 奼齬 倷狟旼阽 狟畛蟠堍珅 佮輾衃 ++ 訰眕桷杻挃 臏硨趿 佮輾衃. (蘅侂 佮輾袃 狟殔恘 赽婞邏謊娸 倷珌畛迋賺, 孖俵杻祰濫圮 CORBA.) 懫 倷籤椕豁娸 俵 畈匟侜 蚥е曬埡蟹, KDbg 衃狟暕籥 婘, 痽 gdb 恓珋厊蹉恘 睋覂砢妀衭. 衃祫旼恌, 嗩奼 恌畷ж 恓杻硢 蚅攫轂. 鷙 倷厊籥衭 陓疻睋俷衲尕 gdb, 趿觴避 俷恂 芶怹 碻帎|橔俵旽捇阽 迍齣杻, 冾婘砣 陓疻睋俷衲尕 蚥衶劦 珆攽騰.

臗衄畇恔袬恌 埩俵 KDbg 畛蟠埡籥 婘杻冾 騷 薺蟯奻埧, 馨恔虭畷蚎 旻恂桲阽 珆攽窔袬攪珅 倷珌畛迋珅.

戧婘

KDbg 畛祴謝珆蹉 Johannes Sixt 俵迍楉 迓珌圮 珃埡杻挃.
餀芩褁旄 衲畛恌藪 KDbg 畛衄玶珋曬 俵 謐疻袀 http://www.kdbg.org/. kdbg-2.5.5/kdbg/doc/ru/localvars.html000066400000000000000000000015241247243200200174060ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 嬥佹杻挃 蟔疻芶恄棸 鯔霰眚蹉吇

懱恘 嬥佹杻挃 蟔疻芶恄棼

懱恘 昑佹杻挃 陓疻芶恄棼 趿稌袬籥衭 趿蟠眐 俷恂埡 芶怹 鼵辮嬥佹杻挃. 靾恄狣 玹恘 珆狟畛祫籥 衃霰眚奼狣 昑佹杻挃 陓疻芶恄棼, 玿疻霰旼恄棼 梖邁蹉恘 埧劼暙 狟攽衲媕 衲攣 (stack frame).

擸狟畛祫攪椋 恔蟠 昑佹杻挃 陓疻芶恄棼 玿疻霰曶籥衭 狟攽衲媕 衲攣 (stack frame), 趿觴蹉恘 玹恓 衲攣.

恔畷恌 陓疻芶恄棼, 巟芶恌軝圮衭 芶秺 珃埡恘袬虭 倷珌畛迋, 珆狟畛祫殮衭 刳輾挃 譙籥玵. kdbg-2.5.5/kdbg/doc/ru/memory.html000066400000000000000000000023711247243200200167310ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 俵杻硨袬埧曶 - 屩畛 釓迕埩 鯔霰眚蹉吇

懱恘 狟畛睋 釓迕埩

婘蹙 珆狟畛硭婥 玹恘 狟畛睋 釓迕埩 挍笥 趿觴轂 鼵辮蟥迕婥. 懫 趿豜馨 衃霰眚奼狣 釓迕埩 倷珌畛迋 俵 抸蹙 謐疻蚆.

颭 倷珃迍婞 衃霰眚奼珌 釓迕埩, 跂鼴尕 挍笥椋 謐疻 俵旼 疻鐘刱奿瓬蹉奷. 慁疻 恓 狟栚轂攫媓 鰍枒曬 睋鐘袬婥衭 袹衲恔鏽轂籤弚恘 に眝 迍秸 睋鐘袬婥衭 趿畛秸恌攪.

戁 迍秸埧 玿疻霰旻婥 に眝轂 珆狟畛秸恌 衃霰眚奼珌 釓迕埩 俵迍楉 趿蟠畛 衃珆覂娸婟梏楦 玿蟹 巟 趿釓鐘濫龔 芶怹, 冾婘眐 趿稌袬籥衭 恔祫埩攪 倷避珅 佮避幵 阽袶.

慁疻蚔棸 趿畛秸恌 睋俵虭恔殮衭 豝珃旼鼯婟圪 迍м 蹙婥 趿稊蹉 巟 趿釓鐘濫龔 衄孖佹. 屩畛埩埧 谻奼蹉吇, 痽 謐疻蚔棸 趿畛秸恌 睋俵虭恔殮衭 谹籣埧 圮 に眝轂玵.

槿旻 趿 恓 衃薺畛籥籣 孖蚝鼴瓬轂 衃霰眚奼狣 釓迕埩, 疻冾芶恅桲娸 癹孖埩婥 趿畛秸恌 埡侂 狟畛硨, 痽狟 衃霰眚奼狣 釓迕埩 恓 趿豜馨昑衯 – 嗩 欳攫弚尕 蚎玾珃婥 倷狪籣蚆 珆攽騰. kdbg-2.5.5/kdbg/doc/ru/pgmoutput.html000066400000000000000000000040401247243200200174600ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 戁豜 襓珌畛迋 鯔霰眚蹉吇

懱恘 戁豜鐘 襓珌畛迋

懱恘 趿豜鐘 倷珌畛迋 迍笥 趿稊轂, 趿觴避 俷恂 芶怹 鼵辮戁豜. 嗩 玹恘 趿豜麵娸 衲蹉鐘眕挃 俵婘侂 趿豜鐘 馨豳恘衲夼 珆攽窔袬攪珅 倷珌畛迋.

懫 恓 俵稊玶捇 跂狦尕 佹侂-旻蟠 鐘恄棸 倷珌畛迋 疻賻巟桲 旻訹 虭恌芩杻挍 嗐梋捙劦 埧眝妅賻: \n (陓疻豜 衲眐侂) 倷欐觴邁桲娸 冾苂妅謄劦 恔瓾昑 衲眐侂-陓疻豜 衲眐侂, \r (恔瓾昑 衲眐侂) 囟恘疶眙籥衭. 埩 豜硰珋恘衲戀 狟殔恘 倷鼴珃埡婘痸 騷 珆攽騰 GUI 倷珌畛迋, 冾婘砣 趿豜麵 珆攽鰍痸棸 衃狟暙恌 衲蹉鐘眕挃 俵婘侂 趿豜鐘 妀 馨豳恘衲夼.

輴Ь 倷珌畛迋 珆攽窔袬籥衭 陓眢椋 畛, 玹恘 趿豜鐘 倷珌畛迋 恓 孖俵杻祰籥衭. 鷕儸 KDbg 恓 硩豁, 鰍衲轂癹恘 旻 倷珌畛迋 衲玶 珌畛恌畷恄棼 豜硰珋恘衲戀 妀 秸 玴 珋厊豁 跂狦 埧眝妅賻. 蟴嗩玵 俵 梠玶瓾恌 孖俵杻祰籥衭 觚轂挃 嗐梋晟玾 埧眝妅賻. 颭 陓疻恔倷避旼恌 趿豜鐘 倷珌畛迋 玹恘 趿豜鐘 恓狟狦奼 倷狦攫轂 蚝鼴梏楦 衖б:

  1. 戁稊轂 馨賻珌瓬狣 玹恘 轀衲眐帊 俵衵鼴衲豜 俷恂埡 芶怹 碻帎|轀衲眐帊.
  2. 戁觴轂 睋佮謐劼 戁豜.
  3. 戁觴轂 譪杻冾 趿豜, 倷珃婘 嗐梋晟玾 埧眝妅賻 佮夼挍婥 恔 冼玿劼 OK.
  4. 蟔疻睋й殑尕 倷珌畛迋 巟 衄孖佹 碻帎|蟴蚝鼴恌 橔俵旽捇阽 糨齣旻.
颭 癹孖堍 衃霰眚奼珌 玹恔 趿藍疶埧 俷恂 檹孖埩婥 赽倢椕謊暙 芶怹, 趿稌袬攪玵 恔祫埩攪 倷避珅 冼玿侂 阽袶 嗩玵 玹恓.

槿旻 俵蚝鼴恮 衲眐佹 玹恔 睋俵旽曬 埧剆婘, 婘 玹恘 倷玹眙瘃袬籥衭 避婘芩埩畷蚎 埡侂 狟畛硨, 痽 俵蚝鼴恮 衲眐佹 赽龔鐘 珃埡籥衭 訰馨迍 倷 俵衲桸旼恌 恘趿 衃狟暙恌. 槿旻 趿 倷玹眙埩埧 玹恘, 婘 珆狟畛祫攪蹊 俵硭蟹 恓 巟芶恌娸. kdbg-2.5.5/kdbg/doc/ru/pgmsettings.html000066400000000000000000000062371247243200200177720ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 轀衲眐帊 襓珌畛迋 鯔霰眚蹉吇

韎賻珌 轀衲眐帊 襓珌畛迋

嗩玵 馨賻珌 迍笥 梖邁轂 恔衲眐帊 冾恂疻婠珅 倷珌畛迋. 颭 龔 趿硨袬 趿藍疶埧 俷恂 芶怹 碻帎|轀衲眐帊. 靾恄棸 恔衲眐帊 謬齣 倷奼曬曬 婘杻冾 埧劼暙 珆攽窔袬攪珅 倷珌畛迋 謬齣 衃畛恓挃 芶秺 蚥衶奷虭 齬 珆攽騰.
鷙笥狣 睋芶瓾恌: 轀衲眐帊 謬齣 倷奼曬曬 婘杻冾 倷 蚝鼴梏暙 睋й殑侜 孖俵旽捇迍ж 迍齣曶 KDbg. 婘 畇恔瓾籥, 痽 俵蚝 恔祫埩 恔 OK 趿 鰍枒挃 陓疻睋й殑尕 孖俵旽捇阽 迍齣杻 俵迍楉 俷恂埡 芶怹 碻帎|橔俵旽捇阽 迍齣旻!!

擸攽巍夼

嗩玵 畛矬攫 趿 迍秸埧 梖邁轂 珆攽巍夼, 冾婘砣 謬霰埧 珆攽窔袬婥 倷珌畛迋.

蹅 趿稊轂 GDB

蠯鼴尕 冾芩恅 騷 趿硨袬 gdb. 擽埡趹埧 嗩 俵旼 俷衲棎 騷 趿硨袬 gdb 俵 梠玶瓾恌, 梖邁蹉恘ж д狟賻媓棼 玿蟹捑. 槿旻 趿 睋恌芩籥籣 刳珃-冾迖妀捙吇 桫賻曬恘 珆攽騰珅, 婘 趿 恔覂眛狣 睋珆尕 孖俵杻硨袬婥 黨梀珅 gdb, 蟠旼 俵饑狦栳圴 騷 冾恂疻婠珅 倢轂に眝. 蟴 梠玶瓾恌 趿稌袬籥衭 gdb --fullname --nx. 醚 睋謬儸埧 梖邁轂 鐘恄棸 玿蟹 倷 巟芶恓恌 孖俵杻祰攪珌 珆攽巍夼. 槿旻 趿 圮 恓 梖輿尕, KDbg 恓 謬霰 畛蟠埡婥.

戁豜

嗩玵 畛矬攫 趿 迍秸埧 梖邁轂 衲瓚曬 嗐梋捙圪 埧眝妅賻, 冾婘眐 謬霰 畛蟠埡婥 倷珌畛迋.

醚 跂狦 趿豜

擸芶婥埧 嗩 玿蟹, 籣旻 袬衖 倷珌畛迋 恓 俵枎瓾籥 觕狦挃 鐘恄棼 埧眝妅賻 趿 恓 珆尕 訰霰婥 婘, 痽 玴 趿豜馨 衲蹉鐘眕挃 俵婘侂 趿豜鐘 馨豳恘衲夼. 壧 衲蹉鐘眕挃 俵婘侂 (stdin, stdout stderr) 陓疻恔倷避曶殮衭 /dev/null.

譪杻冾 趿豜, 倷珃埡 嗐梋捙奷 埧眝妅賻

擸芶婥埧 嗩 玿蟹, 籣旻 袬衖 倷珌畛迋 恓 俵枎瓾籥 觕狦挃 鐘恄棼 埧眝妅賻 (stdin 謬霰 陓疻恔倷避旼 /dev/null), 趿豜 (stdout stderr) 恓 婞鷓桲 蚝珋恘 嗐梋捙圪 埧眝妅賻. 戁豜 謬霰 珆狟畛祫婥衭 玹恓 趿瓬鐘.
鷙笥: 壧婞狣恄椋 嗐梋晟玾 埧眝妅賻 妅埧眓疻埩眙籥 婘杻冾 蚕邰玶 恘豜 衲眐侂 \n (ASCII 10) 陓疻豜 衲眐侂. 懫 狟畛臏婬袬籥 蚕邰玶 陓疻豜鐘 佹疻堍 \r (ASCII 13). 婘ж 豝玶恓 鰍衲轂癹恘 騷 珆狟畛秸恌 倷珃婬 珆攽鰍痸棼 衃狟暙恌, 冾婘砣 狟殔恘 孖俵杻祰殮衭 畛祴謝珆瘃佹虭 倷珌畛迋, 孖俵杻祰濫圮 й谿弚籣侂 妅埧痄戀.

蟴旽蹊 嗐梋捙奷 埧眝妅賻

擸芶婥埧 嗩 玿蟹, 籣旻 袬衖 倷珌畛迋 俵枎瓾籥 鐘恄棸 巟 stdin, 妀 趿豜 stdout or stderr 婞鷓桲 俵旽珅 嗐梋捙圪 埧眝妅賻. 嗩玵 蚝殌豁 謬霰 孖俵杻硨袬 嗐梋晟玾 埧眝妅賻, 梖邁蹉挃 д狟賻媓棼 玿蟹捑.
kdbg-2.5.5/kdbg/doc/ru/registers.html000066400000000000000000000025021247243200200174240ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 鯔霰眚奼狣 疻б衲眐 鯔霰眚蹉吇

懱恘 鯔霰眚奼珌 艣б衲眐

壧捀圴 畛, 冾Ь 倷珈蚧狦尕 珃埡恘 倷珌畛迋, KDbg 趿豜馨 衃霰眚奼狣 疻б衲眐 蜸 衃珆覂娸赹濫攪 玹恓. 颭 婘ж, 痽狟 珆狟畛硭婥 鐘恄狣 玹恘, 趿藍疶埧 鼵辮艣б衲砣.

懱恘 衃霰眚尕 3 冾昑恂:

  1. 輴昑恂 艣б衲 趿豜馨 奼 疻б衲畛.
  2. 輴昑恂 恔畷恌 趿豜馨 衃霰眚奼狣 疻б衲眐 蟠旼 妀 芶恓 恓狟畛蟠埡恄玵 に眝轂. 醚狟畛蟠埡恄椋 に眝轂 狟殔恘 趿豜馨 袹衲恔鏽轂籤弚恘 硩醣曬吇, 鐘秸 騷 衃霰眚奼珌 疻б衲眐 倢避謊暙 婘痾珅.
  3. 輴昑恂 靻冾馨眐袬恄狣 硩醣曬吇 趿豜馨 衃霰眚奼狣 疻б衲眐 霰冾馨眐袬恄珅 に眝. 颭 轄囡芶埩畷蚎圮 疻б衲眐 嗩 狟殔恘 硩賸瓬狣 霰衭埩痸狣 硩醣曬吇, 騷 疻б衲眐 倢避謊暙 婘痾珅 – 瘃蚝 倢避謊暙 婘痾珅, 疻б衲砣 と豳瓬 霰冾馨眙殮衭 奼曬 と豳瓬.
俵迍楉 倷避珅 佮避幵 阽袶 迍笥 趿稊轂 芶怹, 冾婘眐 俵稊玶捇 梌埡恘訰婥 に眝轂 硩醣曬圴 豜 赻玾珅 冾昑恂. kdbg-2.5.5/kdbg/doc/ru/sourcecode.html000066400000000000000000000030011247243200200175430ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 俵杻硨袬埧曶 - 橔狦挃 蠐剆 鯔霰眚蹉吇

懱恘 橔狦恘ж 蠐剆埡

靾恄狣 玹恘 朒曶籥衭 д避挃 赽龔鐘 珆狟畛祫籥衭.

懱恘 孖狦恘ж 埧剆埡 衃霰眚尕 孖狦挃 埧剆 倷珌畛迋. 鯦纔 珆 佹秺珅 衲眐侂 埧剆埡 恔狦尕衭 "賸埩谻蹊 狟攽衲". 懫 衃霰眚尕 梖邁轂攫 恔 衲眐劼 孖狦恘ж 埧剆埡, 冾婘畛 趿俵旽捇娸 埧劼楦 迍芶拏 貥攪曬, 埡匊 梖邁椕豁 埧 衲眐侂 孖狦恘ж 埧剆埡, 冾婘砣 衃霰眚轂 婘痾 珃埡恘袬.

鎯趿 婘痾 珃埡恘袬 梌埡恔訞屺謊娸 恔祫埩攪 旼豜 佮避幵 阽袶 "賸埩谻珅 狟攽衲". 鯕暙衲赹濫蹊 婘痾 珃埡恘袬 迍秸 蹙婥 賸埩訰眐袬恔 妀 霰睋刱屺奿瓬蹉 俵迍楉 衵鼴恓 佮避幵 阽袶.

糨秸 蹙婥 恔祫 硩賸 倢歜 '+' 芶秺 "賸埩谻珅 狟攽衲媕" 衲眐冾 孖狦恘ж 埧剆埡. 婘 倷屺鼴籥 趿豜齣 輾蚥苂旼眛珌 冾鐘 騷 鐘恄珅 衲眐侂. 婘蹙 蚎砣婥 輾蚥苂旼眛椋 冾, 恓狟狦奼 恔祫婥 佮避幵 '-'.

屩殔恘 玹恔 孖狦恘ж 埧剆埡 珆刳椕謊娸 避婘芩埩畷蚎. 婘蹙 珆刳椆 そ帎 孖狦挃 埧剆婘 貥殌挍, 挍笥 恔祫婥 倷避梏 冼玿劼 阽袶 趿觴轂 擸刳椆 孖狦挃 埧剆 妀 趿觴轂 碻帎|擸刳椆 孖狦挃 埧剆.

颭 陓疻佮濯曬奷 芶秺 恓蚎玶媌奼 そ帎趨 孖狦挃虭 埧剆埡虭, 趿藍疶埧 挍笥椋 そ帎 芶怹 懱恘. kdbg-2.5.5/kdbg/doc/ru/stack.html000066400000000000000000000021341247243200200165230ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 鯥攣 鯔霰眚蹉吇

懱恘 鯥攣

懱恘 衲攣 趿稌袬籥衭 趿蟠眐 俷恂埡 芶怹 鼵辮鯥攣. 懱恘 衲攣 衃霰眚尕 衄孖侂 狟攽衲戀 衲攣 (stack frames), 恔倷奼籤, ぱ恂蟹, 冾婘砣 蹙旻 趿稊蹉, 恘 邐 恓 睋覂砢妀孖.

髂芩 谻梊疻恄旄 (訞珋曬恔) 狟攽衲 (芶衲 埧劼暙ж 孖俵旽曬奷 倷珌畛迋) 恔狦尕衭 蚆迍 覂疿 衄孖佹.

颭 陓疻佮濯曬奷 恔 黨梀梏 狟攽衲 衲攣, 倷珃婘 趿藍疶埧 嗩 狟攽衲 阽袷珅. 懱恘 孖狦挃 埧剆婘 珆狟畛祫籥 衲眐侂 孖狦挃 埧剆婘, 冾婘砣 孖俵旽挴娸 倷珌畛迋珅 埧劼楦 迍芶拏, 玹恘 昑佹杻挃 陓疻芶恄棼 玹恘 珆蚝纖屺豁阽 趿畛秸恌 巟芶恮殮衭, 珆狟畛祫 昑佹杻挃 陓疻芶恄棸 趿觴蹉恘 狟攽衲 衲攣. kdbg-2.5.5/kdbg/doc/ru/threads.html000066400000000000000000000031651247243200200170550ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 蟴婘侂 鯔霰眚蹉吇

懱恘 蟴婘冾

懱恘 俵婘冾 迍笥 趿覂衲, 趿觴避 俷恂 芶怹 鼵辮蟴婘侂. 玹恓 俵婘冾 珆狟畛祫籥衭 衄孖玹 賸埩谻棼 俵婘冾 倷珌畛迋.

趨邏蹉吇: 擸攽騰 迓珌玿珆癹挃 倷珌畛迋 鰍枒恔 俵闡籤窔袬婥衭 孖俵杻祰攪珅 覂眑吇 gdb - 嗩 恓 朒曶籥衭 ぱ恂蟹戀 KDbg. 颭 Linux-蚕衲攪 枎睒 孖俵杻硨袬婥 gdb5.

鯔霰眚奼狣 玹恔 俵婘冾 狟恘訞捇娸 倷 佹秺珅 珃埡恘訬 倷珌畛迋 珆攽巍夼玵. (.. 玹恓 珆狟畛祫籥衭 衃衲珇恌 俵婘冾 豜 貥攪 畛蟠婬 倷珌畛迋.)

蟔眢蹊 冾昑恂 珆狟畛祫籥 厊曬埩づ佹婘 俵婘佹, 赻玾蹊 梖邁椕豁 恔 埧劼暙 芶衲 孖俵旽曬奷 鐘恄珌 俵婘佹.

篴皊籤 恔倷珆屺 狦恘 巟 衲眐 梖邁椕豁 恔 埧劼楦 賸埩谻椋 俵婘:

槿旻 佮夼挍婥 恔 黨梀珅 俵婘 衄孖侜, 婘 玴 衲蹉籥 賸埩谻棎 衃珆覂娸婟曬恘 謬霰 巟芶恓恘 衃霰眚奼狣 黨梀圮 玹玴. 瓾衲恘衲, 玹恘 孖狦挃 冾鰍 珆狟畛硭 芶衲, Ь 埧劼楦 俵婘 蹙 珃埡恘訞曬. kdbg-2.5.5/kdbg/doc/ru/tips.html000066400000000000000000000035551247243200200164050ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 蟴旼硩棸 鯔覂婬 鯔霰眚蹉吇

蟴旼硩棸 鯔覂婬

  • 壧龔鐘 梌埡恔訞屺購埧 陓疻芶恄梏 玹眙秸恌 LD_BIND_NOW=1 蚕衲攪賺, 孖俵杻祰濫圮 薺蟯奻埧劼 glibc2. 灃埡恘訬 陓疻芶恄棼 玹眙秸恌 玿孖蹉 矬籣.
  • 戁 迍秸埧 孖俵杻硨袬婥 婘痾 珃埡恘袬, 佹 睋佮謐侂: 倷珃婘 梌埡恘訰埧 婘痾 珃埡恘袬 趿佮濯尕 齬. 蟴稂 趿 蚐珋籥 豜稊畛埩婥衭 嗩珅 婘痾, 佮夼挍 恔 恓 儷 畛睋 衄孖侜 婘畷 珃埡恘袬 (妀 倷珃婘 趿觴避 齬 佮夼挍 恔 冼玿劼 襓珃迍婞籥 橔狦挃 輴). .. 婘痾 珃埡恘袬 朒曶殮衭 俵衲珇恄棎 (.. KDbg 睋俵虭恔籥 圮 畛衄玶珋曬吇 豜衶埡恔訞屺豁 蚝鼴梏暙 蚥衶圪), 婘 倷 趿硨覂 袬袹 倷珌畛迋 恔 珆攽騰 蚝鼴梏楦 畛 赽 婘痾 珃埡恘袬 謬齣 恔 芶衲.
  • 戁 迍秸埧 巟芶恮婥 硩醣曬奷 陓疻芶恄棼 倷珌畛迋: 玹恓 倷珃迍婞 陓疻芶恄棼 (谻巟 衄畛袬) 跂鼴尕 倷孖豜曬吇 var.member=17 佮夼恌埧 俵 冼玿侜 餀臏訰婥. 婘 倷屺鼴籥 恓芶騷曬恘邯 巟芶恓恌 硩醣曬奷 陓疻芶恄珅. 蠐陓眧 袬 恓狟狦奼 桫賻尕 嗩 趿畛秸恌 巟 衄孖佹 (趿觴避 龔 佮夼挍 恔 冼玿劼 囃賻尕). 婘 恓狟狦奼 俵婘邯, 痽 倷珃迍婞 趿畛秸恌 珃殎籣婟曶籥衭 倷 佹秺玵 珃埡恘覂 倷珌畛迋 嗩珅 陓疻芶恄珅 謬霰 倷孖袬屺轂寔 婘秸 硩醣曬吇 蚔瓬 蚔瓬!
  • 戁 迍秸埧 趿豜馨婥 硩醣曬吇 陓疻芶恄棼 玹恘 倷珃迍婞 畛硩棼 に眝轂賺, 孖俵杻祰 迍馨づ佹婘砣 gdb 陓疻 梖邁蹉吇 趿豜馨迍 陓疻芶恄珅. 轀倷奼籤, /x var.member 趿覂霰 硩醣曬吇 var.member 袹蚔謐藪埧疶痸玵 訰霰.
kdbg-2.5.5/kdbg/doc/ru/types.html000066400000000000000000000140341247243200200165640ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 蘅蟯卍 蠖俵 鯔霰眚蹉吇

蘅蟯卍 蠖俵 KDbg

KDbg 迍秸 珆狟畛祫婥 衃霰眚奼狣 珆霰杻恘 跁晟棼 痼曬瓬 衲眙刱梑奿瓬蹉挃 埩俵 鐘恄棼, 埡侂 狟畛硨 珆袀娸婟桲 恓狟狦奼珃婥 畛蚎砣埩 陓疻芶恄棼 玹恓 昑佹杻挃 陓疻芶恄棼玹恓 珆蚝纖屺豁阽 趿畛秸恌. 橁に眝謄奷 婘, 陓疻芶恄蹊 佹冾ж 痼曬 珆狟畛祫籥衭, 畛恌娸 埡蟯卍賺 埩俵. 屩殔恘 袀暙衲赹籥 狦恔 埡蟯卍 恔 畛矬攫捇邯 薺蟯奻埧劼.

蘅蟯卍 埩俵 KDbg 畛衄玶珋曬 佹埡昑Э $KDEDIR/share/apps/kdbg/types. 樿曬 そ帎 埡蟯卍 玹蹉瘃袬殮衭 恔 .kdbgtt. 轀倷奼籤, 埡蟯卍 埩俵 騷 libqt.so 恔稌袬籥衭 qt.kdbgtt.

碻帎 埡蟯卍 埩俵 衃珆覂娸婟梏 衲蹉鐘眕恘邯 蚕拏賸蚕袀 そ帎瓬 冾恇囟梑謄圪 KDE. 碻帎 衃霰眚尕 蚝鼴梏楦 й桸倧:

  • 觰桸俷 [Type Table], 冾婘眐 陓疻瘃蚝曬 埩倧 妅に眝謄奷 婘, 佹 珆攽巍夼 迍秸 玿疻霰旻婥, 蚝妅冾袬恔 旻 倷珌畛迋 嗩珅 薺蟯奻埧冾.
  • 觰桸俷 恔 佹秺椋 倷玿孖蹉挃 埩, 冾婘眐 衃霰眚尕衭 妅に眝謄奷 婘, 佹 KDbg 鰍枒曬 珆狟畛祫婥 鐘恄椋 埩.
颭 玿疻霰旼恌 埡蟯卍 埩俵, 倷奼曬奼棼 珆攽窔袬攪珅 倷珌畛迋, KDbg 睋倷邂屺豁 衄孖玹 畛矬攫捇阽 薺蟯奻埧, 冾婘砣虭 蚝妅冾袬恔 倷珌畛迋. 轂攪 玴 珃殎籣婟曶籥 俵孖 奼曬 嗩圮 薺蟯奻埧 埡蟯卍賺 埩俵 嗌攪曬埡 ShlibRE. 橔俵杻祰殮衭 埧 埡蟯卍, 冾婘砣 蹙旻 恔岉曬 衃珆覂娸婟梏楦 奼曬 薺蟯奻埧. 槿旻 埩 俵朒曶籥衭 恓蚎玶媌圮 埡蟯卍賺, 婘 恓玿疻霰旼恘, 佹冾 秸 巟 玿孖蹉圴 謬霰 趿觴蹉.

觰桸釓 [Type Table]

埡 й桸釓 衃霰眚尕 蚝鼴梏楦 嗌攪曬婬:
  • Types1, Types2, 堐. 埩 嗌攪曬婬 朒曶殮衭 奼曬趨 埩俵. 蹅秺椋 巟 恌 倷鼴衲避曶籥 衃蟠 畛矬攫曬挃 睋倳婬虭 衄孖玹 奼曬 埩俵. 佹秺玵 嗌攪曬埧 迍秸 蹙婥 陓疻瘃蚝曬 抸蟠 冾旻畷衲豜 埩俵. (樿曬 埩俵 迍笥 畛睌尕 恔 恓蚎玶媌 衲眐, 痽狟 玴 衲眐侂 恓 俵枎瓾旻衯 蚝幵冾 騷妅挃虭.) 嗩圮 衲眐佹 恓鰍俷衲奼 蚕邰玶 倷狟攫. 旼芶拏 鰍枒挃 挍芶眐袬婥衭 俵蚝鼴瓬轂攫媓 (KDbg 倷攣畛暕籥 痽曬吇 恔 陓眢玵 秸 倷玿梌侜), 狦恔冾 嗌攪曬婬 迍м 蹙婥 俷衲 (.. 豜狟暙 恓 衃霰眚轂 埩俵). 橁珌鐘 俵眒鰍 陓疻瘃蚝曬奷 奼曬 奼齬 硩醣曬吇 (蚐. 倷奼籤 Alias 恌秸).
  • ShlibRE. KDbg 孖俵杻祰籥 嗩珆 嗌攪曬 騷 玿疻霰旼恌, 孖俵杻硨袬婥 旻 鐘恄梏 埡蟯卍 埧劼暙 珆攽窔袬攪珅 倷珌畛迋. 颭 嗩珌 KDbg 玿疻霰曶籥 畛矬攫捇阽 薺蟯奻埧侂, 孖俵杻祰攪棸 倷珌畛迋珅. 槿旻 珆 蹙 狦恔 巟 恌 衃豝謐豁 衃 硩醣曬吇 嗩珌 嗌攪曬埡, 埡蟯卍 孖俵杻祰籥衭. 橔俵杻祰攪棸 疻м曶眛棸 趿畛秸恌 衃豝謐謊 疻м曶眛棎 趿畛秸恌敊 Qt (芶埡蚕邰玶 .*?[]^$\ 畛衄畇恔殮衭 狟殔挃 狟畛硨, 狦恔冾 珆袀娸赹籥 豜硰珋恘衲 й桸倅眐袬婥 蚕邰玶.)
  • LibDisplayName. 婘 嗌攪曬 孖俵杻祰籥衭 衄孖佹, 冾婘砣 鰍衲桸挃 埡蟯卍 埩俵 陓疻瘃蚝曬 騷 梖邁蹉奷 鐘恄珅 埡蟯卍 埩俵.

  • 轀 鐘恄椋 迍芶拏 嗩 恓 孖俵杻祰籥衭.

觰桸釓 埩釓

轀 佹秺椋 睋朒旼挃 埩 鰍枒恔 蹙婥 睋覂霰恔 й桸釓, 恔稊蹉恔 奼曬攪 埩釓. 轀 鐘恄椋 迍芶拏 衖蟯玴 ++ 恓 俵闡籤窔袬殮衭. 蹅秺蹊 й桸釓 衃霰眚尕 蚝鼴梏楦 嗌攪曬婬:
  • Display 梖邁椕豁, 佹 KDbg 鰍枒曬 珆狟畛祫婥 硩醣曬吇 嗩珌 埩釓. 鯥眐佹 迍秸 衃霰眚轂 珆 1 鰍 5 蚕邰玶瓬 '%'. 懫 睋芶恮殮衭 恔 疻祰杻埡婬 趿畛秸恌, 玿孖蹉挃 嗌攪曬埡 Exprx.
  • 巀妅 妀 蟠旼 Expr1, Expr2, 堐. 蹅秺椋 巟 恌 鰍枒曬 衃霰眚轂 婘杻冾 狦挍 俵蚝鼴瓬轂攫媓珃婥 %s, 冾婘畛 謬霰 睋芶恓恔 趿畛秸恌攪, 睕 硩醣曬吇 恓狟狦奼 俵枎瘃婥. 蘅侂 趿畛秸恌 陓疻鐘殮衭 gdb, 疻祰杻埡 睋恘蚕娸 恔 芶衲 衃珆覂娸婟梏暙ж 蚕邰玶 倷狪曬埡 嗌攪曬埧 Display.
  • Alias 梖邁椕豁 恔 埩-倬纔鰍恌. 槿旻 倷孖梊衲赹籥 鐘恄蹊 睋倅衯, 婘 鐘恄棎 埩俵 狟狦晟衭 埡匊, 佹 埧, 恔 冾婘砣 玴 梖邁椕豁. 婘 埩-倬纔鰍恌 鰍秸 蹙婥 玿孖蹉 陓痁 衶椗謊楦邲 恔 恓ж 埩俵 嗌攪曬埡 Typesx й桸倧 [Type Table].
轀 鐘恄椋 迍芶拏 冾旻畷衲豜 趿畛秸恌 騷 佹秺珌 埩釓 珌畛恌畷恘 倳婥. 婘 迍秸 蹙婥 旼г珃婥 巟芶恓恘, 恘 恓 疻冾芶恅梏 豜狟暙 倷匟旻祫婥衭 鐘恄玵 眙藍笝 - 嗩 婘杻冾 睋婘眝畇尕 倷狪籣 珆攽騰.

KDbg 畛衄畇恔籥 衄鷗匢杻恘 畛衴奿曬吇, 冾婘眐 孖俵杻祰籥衭 騷 趿豜鐘 衲眐 Qt 2.0 unicode: 槿旻 陓疻 Exprx 衲珈 /QString::Data, 俵黨邁梠纔豁娸, 痽 疻祰杻埡 玿籤謄圪 朒曶籥衭 梖邁轂攫攪 恔 QString::Data. 戁豜馨迍 硩醣曬吇 朒曶籥衭 衲眐冾 unicode, 倷鼴衲避旼恄狣 QString::Data (冾婘眐 迍秸 蹙婥 QString::null, 籣旻 嗩 俷衲蹊 衲眐佹 Qt, 妀 (null), 籣旻 unicode 痼曬 衲眙刱梑 朒曶籥衭 挍旼趿 梖邁轂攫攪). 颭 倷奼籤 蚐. qt2.kdbgtt.

鯔覂: 鯔赽攪 恓狟栚轂攫媓 玿孖椕轂 恔蚝鼴桲阽 埩倧, 籣旻 玴 鰍枒挃 狟畛臏婬袬婥衭 埡匊 佹 臏硨趿 佮輾 - KDbg 迍秸 玿疻霰旻婥 恔蚝鼴瓬蹉吇 孖俵杻硨袬婥 玿孖蹉吇 埩釓 陓眢珌 (蚝纔) 臏硨豜ж 佮輾蚆. 戁 迍秸埧 孖俵杻硨袬婥 嗌攪曬 Alias 騷 蹙衲眐ж 梖邁蹉奷 佮輾蚆 倷 迓珋籣婟曬恘 恔蚝鼴瓬蹉圪, 珆旻痸珌 珆 陓眢珌 蚝纔.

襓奼籤

婘 倷奼籤 俵佹稌袬籥, 佹 QString QObject 玿孖蹉 qt.kdbgtt. 餀俵旽尕攫媓 玿疻霰旼 QTableView, 衶椗謊楦弝 恔 QObject. 婘 倷奼籤 倷奼曬奼 Qt 1.x, 冾婘砣 畛衄玶珋曬 畛矬攫捇阽 薺蟯奻埧佹, 奼曬 冾婘砣 玹蹉瘃袬殮衭 佹 libqt.so.1.
[Type Table]
Types1=QString
Types2=QObject,QTableView
LibDisplayName=libqt 1.x
ShlibRE=libqt\.so\.1$
[QString]
Display={ % }
Expr1=(%s).shd->data
[QObject]
Display={ name=% #chld=% }
Expr1=(%s).objname
Expr2=(%s).childObjects->numNodes
[QTableView]
Alias=QObject
趨邏蹉吇: ж畛矬 藍硨釓蚔齬 睋佮濯轂 %s 蚎狟侂. kdbg-2.5.5/kdbg/doc/ru/watches.html000066400000000000000000000017301247243200200170550ustar00rootroot00000000000000 KDbg - 藑冾豜鼯婟 蟴杻硨袬埧曶 - 擸蚝纖屺豁阽 戁畛秸恌 鯔霰眚蹉吇

懱恘 擸蚝纖屺豁阽 戁畛秸恌

懱恘 珆蚝纖屺豁阽 趿畛秸恌 趿稌袬籥衭 趿蟠眐 俷恂埡 芶怹 鼵辮擸蚝纖屺豁阽 戁畛秸恌. 懫 珆狟畛祫籥 倷珈稊玶媓棸 趿畛秸恌.

颭 鰍臏訞曬奷 趿畛秸恌, 跂鼴尕 龔 俵旼 疻鐘刱奿瓬蹉奷 恔笴尕 Enter 妀 佮夼恌埧 恔 冼玿劼 餀臏訰婥. 颭 桫賻曬奷 趿畛秸恌, 趿藍疶埧 龔 (趿薺畛彸 冾疻挎 趿畛秸恌?) 佮夼恌埧 恔 冼玿劼 Del.

擸蚝纖屺豁阽 趿畛秸恌 衃畛恮殮衭 芶秺 蚥衶奷虭 珆攽騰. 蟴嗩玵 疻冾芶恅桲娸 桫賻晟 趿畛秸恌, 冾婘砣虭 趿 欶 恓 俵杻祰籥籣, .. 嗩 俵趿蚕 蚎玾珃婥 珆攽騰. kdbg-2.5.5/kdbg/envvar.h000066400000000000000000000010611247243200200150050ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef ENVVAR_H #define ENVVAR_H /* * Description of environment variables. Note that the name of the variable * is given as the key in the map, so we don't repeat it here. */ class QTreeWidgetItem; struct EnvVar { QString value; enum EnvVarStatus { EVclean, EVdirty, EVnew, EVdeleted }; EnvVarStatus status; QTreeWidgetItem* item; }; #endif // ENVVAR_H kdbg-2.5.5/kdbg/exprwnd.cpp000066400000000000000000000513211247243200200155320ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "exprwnd.h" #include "exprwnd.moc" #include "typetable.h" #include #include #include #include #include #include #include #include /* icons */ #include /* i18n */ #include "mydebug.h" VarTree::VarTree(VarTree* parent, ExprValue* v) : QTreeWidgetItem(parent), m_varKind(v->m_varKind), m_nameKind(v->m_nameKind), m_type(0), m_exprIndex(0), m_exprIndexUseGuard(false), m_baseValue(v->m_value), m_baseChanged(false), m_structChanged(false) { setText(v->m_name); updateValueText(); if (v->m_child != 0 || m_varKind == VarTree::VKpointer) setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); else setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator); setExpanded(v->m_initiallyExpanded); } VarTree::VarTree(ExprWnd* parent, ExprValue* v) : QTreeWidgetItem(parent), m_varKind(VKsimple), m_nameKind(VarTree::NKplain), m_type(0), m_exprIndex(0), m_exprIndexUseGuard(false), m_baseValue(v->m_value), m_baseChanged(false), m_structChanged(false) { setText(v->m_name); updateValueText(); } VarTree::~VarTree() { } QString VarTree::computeExpr() const { // top-level items are special if (isToplevelExpr()) return getText(); // get parent expr VarTree* par = static_cast(parent()); QString parentExpr = par->computeExpr(); // skip this item's name if it is a base class or anonymous struct or union if (m_nameKind == NKtype || m_nameKind == NKanonymous) { return parentExpr; } /* augment by this item's text */ QString result; /* if this is an address, dereference it */ if (m_nameKind == NKaddress) { ASSERT(par->m_varKind == VKpointer); result = "*" + parentExpr; return result; } switch (par->m_varKind) { case VKarray: { QString index = getText(); int i = 1; // skip past the index while (index[i].isDigit()) i++; /* * Some array indices are actually ranges due to repeated array * values. We use the first index in these cases. */ if (index[i] != ']') { // remove second index index.remove(i, index.length()-i-1); } result = "(" + parentExpr + ")" + index; } break; case VKstruct: result = "(" + parentExpr + ")." + getText(); break; case VKsimple: /* parent can't be simple */ case VKpointer: /* handled in NKaddress */ case VKdummy: /* can't occur at all */ ASSERT(false); result = parentExpr; /* paranoia */ break; } return result; } bool VarTree::isToplevelExpr() const { return parent() == 0; } bool VarTree::isAncestorEq(const VarTree* child) const { const QTreeWidgetItem* c = child; while (c != 0 && c != this) { c = c->parent(); } return c != 0; } bool VarTree::updateValue(const QString& newValue) { // check whether the value changed bool prevValueChanged = m_baseChanged; if ((m_baseChanged = m_baseValue != newValue)) { m_baseValue = newValue; updateValueText(); setForeground(1, QBrush(QColor(Qt::red))); } else if (prevValueChanged) { setForeground(1, treeWidget()->palette().text()); } /* * We must repaint the cell if the value changed. If it did not change, * we still must repaint the cell if the value changed previously, * because the color of the display must be changed (from red to * black). */ return m_baseChanged || prevValueChanged; } bool VarTree::updateStructValue(const QString& newValue) { // check whether the value changed bool prevValueChanged = m_structChanged; if ((m_structChanged = m_structValue != newValue)) { m_structValue = newValue; updateValueText(); setForeground(1, QBrush(QColor(Qt::red))); } else if (prevValueChanged) { setForeground(1, treeWidget()->palette().text()); } /* * We must repaint the cell if the value changed. If it did not change, * we still must repaint the cell if the value changed previously, * because the color of the display must be changed (from red to * black). */ return m_structChanged || prevValueChanged; } void VarTree::updateValueText() { if (m_baseValue.isEmpty()) { setText(1, m_structValue); } else if (m_structValue.isEmpty()) { setText(1, m_baseValue); } else { setText(1, m_baseValue + " " + m_structValue); } } void VarTree::inferTypesOfChildren(ProgramTypeTable& typeTable) { /* * Type inference works like this: We use type information of those * children that have a type name in their name (base classes) or in * their value (pointers) */ // first recurse children for (int i = 0; i < childCount(); i++) { child(i)->inferTypesOfChildren(typeTable); } // if this is a pointer, get the type from the value (less the pointer) if (m_varKind == VKpointer) { if (isWcharT()) { /* * wchart_t pointers must be treated as struct, because the array * of characters is printed similar to how QStrings are decoded. */ m_varKind = VKstruct; setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator); } // don't know how to do this cleanly } else if (m_varKind == VKstruct) { // check if this is a base class part if (m_nameKind == NKtype) { const QString& typeName = getText().mid(1, getText().length()-2); // strip < and > m_type = typeTable.lookup(typeName); /* if we don't have a type yet, get it from the base class */ if (m_type == 0) { m_type = inferTypeFromBaseClass(); /* * If there is a known type now, it is the one from the * first base class whose type we know. */ } /* * If we still don't have a type, the type is really unknown. */ if (m_type == 0) { m_type = TypeInfo::unknownType(); } } // else /* * This is not a base class part. We don't assign a type so * that later we can ask gdb. */ } } // the value contains the pointer type in parenthesis bool VarTree::isWcharT() const { return value().startsWith("(const wchar_t *)") || value().startsWith("(wchar_t *)"); } /* * Get the type of the first base class whose type we know. */ const TypeInfo* VarTree::inferTypeFromBaseClass() { if (m_varKind == VKstruct) { for (int i = 0; i < childCount(); i++) { VarTree* child = VarTree::child(i); // only check base class parts (i.e. type names) if (child->m_nameKind != NKtype) break; if (child->m_type != 0 && child->m_type != TypeInfo::unknownType()) { // got a type! return child->m_type; } } } return 0; } ExprValue::ExprValue(const QString& name, VarTree::NameKind aKind) : m_name(name), m_varKind(VarTree::VKsimple), m_nameKind(aKind), m_child(0), m_next(0), m_initiallyExpanded(false) { } ExprValue::~ExprValue() { delete m_child; delete m_next; } void ExprValue::appendChild(ExprValue* newChild) { if (m_child == 0) { m_child = newChild; } else { // walk chain of children to find the last one ExprValue* last = m_child; while (last->m_next != 0) last = last->m_next; last->m_next = newChild; } newChild->m_next = 0; // just to be sure } int ExprValue::childCount() const { int i = 0; ExprValue* c = m_child; while (c) { ++i; c = c->m_next; } return i; } ExprWnd::ExprWnd(QWidget* parent, const QString& colHeader) : QTreeWidget(parent), m_edit(0) { QTreeWidgetItem* pHeaderItem = new QTreeWidgetItem(); pHeaderItem->setText(0, colHeader); pHeaderItem->setText(1, i18n("Value")); setHeaderItem(pHeaderItem); header()->setResizeMode(0, QHeaderView::Interactive); header()->setResizeMode(1, QHeaderView::Interactive); setSortingEnabled(false); // do not sort items setRootIsDecorated(true); setAllColumnsShowFocus(true); m_pixPointer = UserIcon("pointer.xpm"); if (m_pixPointer.isNull()) TRACE("Can't load pointer.xpm"); } ExprWnd::~ExprWnd() { } QStringList ExprWnd::exprList() const { QStringList exprs; for (int i = 0; i < topLevelItemCount(); i++) { exprs.append(topLevelItem(i)->getText()); } return exprs; } VarTree* ExprWnd::insertExpr(ExprValue* expr, ProgramTypeTable& typeTable) { // append a new dummy expression VarTree* display = new VarTree(this, expr); // replace it right away updateExpr(display, expr, typeTable); return display; } void ExprWnd::updateExpr(ExprValue* expr, ProgramTypeTable& typeTable) { // search the root variable VarTree* item = 0; for (int i = 0; i < topLevelItemCount(); i++) { if (topLevelItem(i)->getText() == expr->m_name) { item = topLevelItem(i); break; } } if (item == 0) { return; } // now update it updateExprRec(item, expr, typeTable); collectUnknownTypes(item); } void ExprWnd::updateExpr(VarTree* display, ExprValue* newValues, ProgramTypeTable& typeTable) { updateExprRec(display, newValues, typeTable); collectUnknownTypes(display); } /* * returns true if there's a visible change */ void ExprWnd::updateExprRec(VarTree* display, ExprValue* newValues, ProgramTypeTable& typeTable) { bool isExpanded = display->isExpanded(); /* * If we are updating a pointer without children by a dummy, we don't * collapse it, but simply insert the new children. This happens when a * pointer has just been expanded by the user. */ if (display->m_varKind == VarTree::VKpointer && display->childCount() == 0 && newValues->m_varKind == VarTree::VKdummy) { replaceChildren(display, newValues); return; } /* * If the display and newValues have different kind or if their number * of children is different, replace the whole sub-tree. */ if (// the next two lines mean: not(m_varKind remains unchanged) !(newValues->m_varKind == VarTree::VKdummy || display->m_varKind == newValues->m_varKind) || (display->childCount() != newValues->childCount() && /* * If this is a pointer and newValues doesn't have children, we * don't replace the sub-tree; instead, below we mark this * sub-tree for requiring an update. */ (display->m_varKind != VarTree::VKpointer || newValues->m_child != 0))) { if (isExpanded) { display->setExpanded(false); } // since children changed, it is likely that the type has also changed display->m_type = 0; /* will re-evaluate the type */ // display the new value updateSingleExpr(display, newValues); replaceChildren(display, newValues); // update the m_varKind if (newValues->m_varKind != VarTree::VKdummy) { display->m_varKind = newValues->m_varKind; if (newValues->m_child != 0 || newValues->m_varKind == VarTree::VKpointer) display->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); else display->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator); } // get some types (after the new m_varKind has been set!) display->inferTypesOfChildren(typeTable); // (note that the new value might not have a sub-tree at all) return; } // display the new value updateSingleExpr(display, newValues); /* * If this is an expanded pointer, record it for being updated. */ if (display->m_varKind == VarTree::VKpointer) { if (isExpanded && // if newValues is a dummy, we have already updated this pointer newValues->m_varKind != VarTree::VKdummy) { m_updatePtrs.push_back(display); } /* * If the visible sub-tree has children, but newValues doesn't, we * can stop here. */ if (newValues->m_child == 0) { return; } } ASSERT(display->childCount() == newValues->childCount()); // go for children ExprValue* vNew = newValues->m_child; for (int i = 0; i < display->childCount(); i++) { VarTree* vDisplay = display->child(i); // check whether the names are the same if (vDisplay->getText() != vNew->m_name) { // set new name vDisplay->setText(vNew->m_name); } // recurse updateExprRec(vDisplay, vNew, typeTable); vNew = vNew->m_next; } } void ExprWnd::updateSingleExpr(VarTree* display, ExprValue* newValue) { /* * If newValues is a VKdummy, we are only interested in its children. * No need to update anything here. */ if (newValue->m_varKind == VarTree::VKdummy) { return; } /* * If this node is a struct and we know its type then we know how to * find a nested value. So register the node for an update. * * wchar_t types are also treated specially here: We consider them * as struct (has been set in inferTypesOfChildren()). */ if (display->m_varKind == VarTree::VKstruct && display->m_type != 0 && display->m_type != TypeInfo::unknownType()) { ASSERT(newValue->m_varKind == VarTree::VKstruct); if (display->m_type == TypeInfo::wchartType()) { display->m_partialValue = "L"; } else display->m_partialValue = display->m_type->m_displayString[0]; m_updateStruct.push_back(display); } display->updateValue(newValue->m_value); } void ExprWnd::updateStructValue(VarTree* display) { ASSERT(display->m_varKind == VarTree::VKstruct); display->updateStructValue(display->m_partialValue); // reset the value display->m_partialValue = ""; display->m_exprIndex = -1; } void ExprWnd::replaceChildren(VarTree* display, ExprValue* newValues) { ASSERT(display->childCount() == 0 || display->m_varKind != VarTree::VKsimple); // delete all children of display while (VarTree* c = display->child(0)) { unhookSubtree(c); delete c; } // insert copies of the newValues for (ExprValue* v = newValues->m_child; v != 0; v = v->m_next) { VarTree* vNew = new VarTree(display, v); // recurse replaceChildren(vNew, v); } } void ExprWnd::collectUnknownTypes(VarTree* var) { QTreeWidgetItemIterator i(var); for (; *i; ++i) { checkUnknownType(static_cast(*i)); } } void ExprWnd::checkUnknownType(VarTree* var) { ASSERT(var->m_varKind != VarTree::VKpointer || var->m_nameKind != VarTree::NKtype); if (var->m_type == 0 && var->m_varKind == VarTree::VKstruct && var->m_nameKind != VarTree::NKtype && var->m_nameKind != VarTree::NKanonymous) { if (!var->isWcharT()) { /* this struct node doesn't have a type yet: register it */ m_updateType.push_back(var); } else { var->m_type = TypeInfo::wchartType(); var->m_partialValue = "L"; m_updateStruct.push_back(var); } } // add pointer pixmap to pointers if (var->m_varKind == VarTree::VKpointer) { var->setPixmap(m_pixPointer); } } QString ExprWnd::formatWCharPointer(QString value) { int pos = value.indexOf(") "); if (pos > 0) value = value.mid(pos+2); return value + " L"; } VarTree* ExprWnd::topLevelExprByName(const QString& name) const { for (int i = 0; i < topLevelItemCount(); i++) { if (topLevelItem(i)->getText() == name) return topLevelItem(i); } return 0; } VarTree* ExprWnd::ptrMemberByName(VarTree* v, const QString& name) { // v must be a pointer variable, must have children if (v->m_varKind != VarTree::VKpointer || v->childCount() == 0) return 0; // the only child of v is the pointer value that represents the struct VarTree* item = v->child(0); return memberByName(item, name); } VarTree* ExprWnd::memberByName(VarTree* v, const QString& name) { // search immediate children for name for (int i = 0; i < v->childCount(); i++) { if (v->child(i)->getText() == name) return v->child(i); } // try in base classes and members that are anonymous structs or unions for (int i = 0; i < v->childCount(); i++) { VarTree* item = v->child(i); if (item->m_nameKind == VarTree::NKtype || item->m_nameKind == VarTree::NKanonymous) { item = memberByName(item, name); if (item != 0) return item; } } return 0; } void ExprWnd::removeExpr(VarTree* item) { unhookSubtree(item); delete item; } void ExprWnd::unhookSubtree(VarTree* subTree) { // must remove any pointers scheduled for update from the list unhookSubtree(m_updatePtrs, subTree); unhookSubtree(m_updateType, subTree); unhookSubtree(m_updateStruct, subTree); emit removingItem(subTree); } void ExprWnd::unhookSubtree(std::list& list, VarTree* subTree) { if (subTree == 0) return; std::list::iterator i = list.begin(); while (i != list.end()) { std::list::iterator checkItem = i; ++i; if (subTree->isAncestorEq(*checkItem)) { // checkItem is an item from subTree list.erase(checkItem); } } } void ExprWnd::clearPendingUpdates() { m_updatePtrs.clear(); m_updateType.clear(); m_updateStruct.clear(); } VarTree* ExprWnd::nextUpdatePtr() { VarTree* ptr = 0; if (!m_updatePtrs.empty()) { ptr = m_updatePtrs.front(); m_updatePtrs.pop_front(); } return ptr; } VarTree* ExprWnd::nextUpdateType() { VarTree* ptr = 0; if (!m_updateType.empty()) { ptr = m_updateType.front(); m_updateType.pop_front(); } return ptr; } VarTree* ExprWnd::nextUpdateStruct() { VarTree* ptr = 0; if (!m_updateStruct.empty()) { ptr = m_updateStruct.front(); m_updateStruct.pop_front(); } return ptr; } void ExprWnd::editValue(VarTree* item, const QString& text) { if (m_edit == 0) m_edit = new ValueEdit(this); QRect r = visualItemRect(item); int x = columnViewportPosition(1); int y = r.y(); int w = columnWidth(1); int h = r.height(); /* * Make the edit widget at least 5 characters wide (but not wider than * this widget). If less than half of this widget is used to display * the text, scroll this widget so that half of it shows the text (or * less than half of it if the text is shorter). */ QFontMetrics metr = m_edit->font(); int wMin = metr.width("88888"); if (w < wMin) w = wMin; int wThis = viewport()->width(); if (x >= wThis/2 && // less than half the width displays text x+w > wThis) // not all text is visible { // scroll so that more text is visible QScrollBar* pScrollBar = horizontalScrollBar(); int wScroll = qMin(x-wThis/2, x+w-wThis); pScrollBar->setValue(pScrollBar->value() + wScroll); x -= wScroll; } else if (x < 0) { // don't let the edit move out at the left x = 0; } // make the edit box as wide as the visible column QRect rect(x,y, wThis-x,h); m_edit->setText(text); m_edit->selectAll(); m_edit->setGeometry(rect); m_edit->m_finished = false; m_edit->m_item = item; m_edit->show(); m_edit->setFocus(); } bool ExprWnd::isEditing() const { return m_edit != 0 && m_edit->isVisible(); } ValueEdit::ValueEdit(ExprWnd* parent) : QLineEdit(parent->viewport()) { setFrame(false); hide(); lower(); // lower the window below scrollbars connect(parent, SIGNAL(itemActivated(QTreeWidgetItem*,int)), SLOT(slotSelectionChanged())); connect(parent, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(slotSelectionChanged())); connect(parent, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotSelectionChanged())); connect(parent, SIGNAL(itemCollapsed(QTreeWidgetItem*)), SLOT(slotSelectionChanged())); connect(this, SIGNAL(done(VarTree*, const QString&)), parent, SIGNAL(editValueCommitted(VarTree*, const QString&))); } ValueEdit::~ValueEdit() { } void ValueEdit::terminate(bool commit) { TRACE(commit?"ValueEdit::terminate(true)":"ValueEdit::terminate(false)"); if (!m_finished) { m_finished = true; hide(); // will call focusOutEvent, that's why we need m_finished if (commit) { emit done(m_item, text()); } } } void ValueEdit::keyPressEvent(QKeyEvent *e) { if(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) terminate(true); else if(e->key() == Qt::Key_Escape) terminate(false); else QLineEdit::keyPressEvent(e); } void ValueEdit::paintEvent(QPaintEvent* e) { QLineEdit::paintEvent(e); QPainter p(this); p.drawRect(rect()); } void ValueEdit::focusOutEvent(QFocusEvent* ev) { TRACE("ValueEdit::focusOutEvent"); QFocusEvent* focusEv = static_cast(ev); if (focusEv->reason() == Qt::ActiveWindowFocusReason) { // Switching to a different window should terminate the edit, // because if the window with this variable display is floating // then that different window could be the main window, where // the user had clicked one of the Execute buttons. This in turn // may pull the item away that we are editing here. terminate(false); } // Don't let a RMB close the editor else if (focusEv->reason() != Qt::PopupFocusReason) { terminate(true); } } void ValueEdit::slotSelectionChanged() { TRACE("ValueEdit::slotSelectionChanged"); terminate(false); } kdbg-2.5.5/kdbg/exprwnd.h000066400000000000000000000142611247243200200152010ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef EXPRWND_H #define EXPRWND_H #include #include #include #include class ProgramTypeTable; class TypeInfo; struct ExprValue; class ExprWnd; class QStringList; /*! \brief a variable's value is the tree of sub-variables */ class VarTree : public QTreeWidgetItem { public: enum VarKind { VKsimple, VKpointer, VKstruct, VKarray, VKdummy //!< used to update only children }; VarKind m_varKind; enum NameKind { NKplain, NKstatic, NKtype, NKanonymous, //!< an anonymous struct or union NKaddress //!< a dereferenced pointer }; NameKind m_nameKind; const TypeInfo* m_type; //!< the type of struct if it could be derived int m_exprIndex; //!< used in struct value update bool m_exprIndexUseGuard; //!< ditto; if guard expr should be used QString m_partialValue; //!< while struct value update is in progress VarTree(VarTree* parent, ExprValue* v); VarTree(ExprWnd* parent, ExprValue* v); virtual ~VarTree(); public: QString computeExpr() const; bool isToplevelExpr() const; /** is this element an ancestor of (or equal to) child? */ bool isAncestorEq(const VarTree* child) const; /** update the regular value; returns whether a repaint is necessary */ bool updateValue(const QString& newValue); /** update the "quick member" value; returns whether repaint is necessary */ bool updateStructValue(const QString& newValue); /** find out the type of this value using the child values */ void inferTypesOfChildren(ProgramTypeTable& typeTable); /** get the type from base class part */ const TypeInfo* inferTypeFromBaseClass(); /** returns whether the pointer is a wchar_t */ bool isWcharT() const; QString getText() const { return text(0); } using QTreeWidgetItem::setText; void setText(const QString& t) { QTreeWidgetItem::setText(0, t); } void setPixmap(const QPixmap& p) { QTreeWidgetItem::setIcon(0, QIcon(p)); } QString value() const { return m_baseValue; } VarTree* child(int i) const { return static_cast(QTreeWidgetItem::child(i)); } private: void updateValueText(); QString m_baseValue; //!< The "normal value" that the driver reported QString m_structValue; //!< The "quick member" value bool m_baseChanged : 1; bool m_structChanged : 1; }; /** * Represents the value tree that is parsed by the debugger drivers. */ struct ExprValue { QString m_name; QString m_value; VarTree::VarKind m_varKind; VarTree::NameKind m_nameKind; ExprValue* m_child; /* the first child expression */ ExprValue* m_next; /* the next sibling expression */ bool m_initiallyExpanded; ExprValue(const QString& name, VarTree::NameKind kind); ~ExprValue(); void appendChild(ExprValue* newChild); int childCount() const; }; class ValueEdit : public QLineEdit { Q_OBJECT public: ValueEdit(ExprWnd* parent); ~ValueEdit(); void terminate(bool commit); VarTree* m_item; bool m_finished; protected: void keyPressEvent(QKeyEvent *e); void focusOutEvent(QFocusEvent* ev); void paintEvent(QPaintEvent* e); public slots: void slotSelectionChanged(); signals: void done(VarTree*, const QString&); }; class ExprWnd : public QTreeWidget { Q_OBJECT public: ExprWnd(QWidget* parent, const QString& colHeader); ~ExprWnd(); /** returns the list with the expressions at the topmost level */ QStringList exprList() const; /** appends a copy of expr to the end of the tree at the topmost level; * returns a pointer to the inserted top-level item */ VarTree* insertExpr(ExprValue* expr, ProgramTypeTable& typeTable); /** updates an existing expression */ void updateExpr(ExprValue* expr, ProgramTypeTable& typeTable); void updateExpr(VarTree* display, ExprValue* newValues, ProgramTypeTable& typeTable); /** updates the value and repaints it for a single item (not the children) */ void updateSingleExpr(VarTree* display, ExprValue* newValues); /** updates only the value of the node */ void updateStructValue(VarTree* display); /** get a top-level expression by name */ VarTree* topLevelExprByName(const QString& name) const; /** return a member of the struct that pointer \a v refers to */ static VarTree* ptrMemberByName(VarTree* v, const QString& name); /** return a member of the struct \a v */ static VarTree* memberByName(VarTree* v, const QString& name); /** removes an expression; must be on the topmost level*/ void removeExpr(VarTree* item); /** clears the list of pointers needing updates */ void clearPendingUpdates(); /** returns a pointer to update (or 0) and removes it from the list */ VarTree* nextUpdatePtr(); VarTree* nextUpdateType(); VarTree* nextUpdateStruct(); void editValue(VarTree* item, const QString& text); /** tells whether the a value is currently edited */ bool isEditing() const; VarTree* selectedItem() const { return static_cast(QTreeWidget::currentItem()); } VarTree* topLevelItem(int i) const { return static_cast(QTreeWidget::topLevelItem(i)); } protected: void updateExprRec(VarTree* display, ExprValue* newValues, ProgramTypeTable& typeTable); void replaceChildren(VarTree* display, ExprValue* newValues); void collectUnknownTypes(VarTree* item); void checkUnknownType(VarTree* item); static QString formatWCharPointer(QString value); QPixmap m_pixPointer; std::list m_updatePtrs; //!< dereferenced pointers that need update std::list m_updateType; //!< structs whose type must be determined std::list m_updateStruct; //!< structs whose nested value needs update ValueEdit* m_edit; /** remove items that are in the subTree from the list */ void unhookSubtree(VarTree* subTree); static void unhookSubtree(std::list& list, VarTree* subTree); signals: void removingItem(VarTree*); void editValueCommitted(VarTree*, const QString&); }; #endif // EXPRWND_H kdbg-2.5.5/kdbg/gdbdriver.cpp000066400000000000000000002154471247243200200160260ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "gdbdriver.h" #include "exprwnd.h" #include #include #include #include /* i18n */ #include #include #include /* strtol, atoi */ #include /* strcpy */ #include "assert.h" #include "mydebug.h" static void skipString(const char*& p); static void skipNested(const char*& s, char opening, char closing); static ExprValue* parseVar(const char*& s); static bool parseName(const char*& s, QString& name, VarTree::NameKind& kind); static bool parseValue(const char*& s, ExprValue* variable); static bool parseNested(const char*& s, ExprValue* variable); static bool parseVarSeq(const char*& s, ExprValue* variable); static bool parseValueSeq(const char*& s, ExprValue* variable); #define PROMPT "(kdbg)" #define PROMPT_LEN 6 // TODO: make this cmd info stuff non-static to allow multiple // simultaneous gdbs to run! struct GdbCmdInfo { DbgCommand cmd; const char* fmt; /* format string */ enum Args { argNone, argString, argNum, argStringNum, argNumString, argString2, argNum2 } argsNeeded; }; #if 0 // This is how the QString data print statement generally looks like. // It is set by KDebugger via setPrintQStringDataCmd(). static const char printQStringStructFmt[] = // if the string data is junk, fail early "print ($qstrunicode=($qstrdata=(%s))->unicode)?" // print an array of shorts "(*(unsigned short*)$qstrunicode)@" // limit the length "(($qstrlen=(unsigned int)($qstrdata->len))>100?100:$qstrlen)" // if unicode data is 0, report a special value ":1==0\n"; #endif static const char printQStringStructFmt[] = "print (0?\"%s\":$kdbgundef)\n"; /* * The following array of commands must be sorted by the DC* values, * because they are used as indices. */ static GdbCmdInfo cmds[] = { { DCinitialize, "", GdbCmdInfo::argNone }, { DCtty, "tty %s\n", GdbCmdInfo::argString }, { DCexecutable, "file \"%s\"\n", GdbCmdInfo::argString }, { DCtargetremote, "target remote %s\n", GdbCmdInfo::argString }, #ifdef __FreeBSD__ { DCcorefile, "target FreeBSD-core %s\n", GdbCmdInfo::argString }, #else { DCcorefile, "target core %s\n", GdbCmdInfo::argString }, #endif { DCattach, "attach %s\n", GdbCmdInfo::argString }, { DCinfolinemain, "kdbg_infolinemain\n", GdbCmdInfo::argNone }, { DCinfolocals, "kdbg__alllocals\n", GdbCmdInfo::argNone }, { DCinforegisters, "info all-registers\n", GdbCmdInfo::argNone}, { DCexamine, "x %s %s\n", GdbCmdInfo::argString2 }, { DCinfoline, "info line %s:%d\n", GdbCmdInfo::argStringNum }, { DCdisassemble, "disassemble %s %s\n", GdbCmdInfo::argString2 }, { DCsetargs, "set args %s\n", GdbCmdInfo::argString }, { DCsetenv, "set env %s %s\n", GdbCmdInfo::argString2 }, { DCunsetenv, "unset env %s\n", GdbCmdInfo::argString }, { DCsetoption, "setoption %s %d\n", GdbCmdInfo::argStringNum}, { DCcd, "cd %s\n", GdbCmdInfo::argString }, { DCbt, "bt\n", GdbCmdInfo::argNone }, { DCrun, "run\n", GdbCmdInfo::argNone }, { DCcont, "cont\n", GdbCmdInfo::argNone }, { DCstep, "step\n", GdbCmdInfo::argNone }, { DCstepi, "stepi\n", GdbCmdInfo::argNone }, { DCnext, "next\n", GdbCmdInfo::argNone }, { DCnexti, "nexti\n", GdbCmdInfo::argNone }, { DCfinish, "finish\n", GdbCmdInfo::argNone }, { DCuntil, "until %s:%d\n", GdbCmdInfo::argStringNum }, { DCkill, "kill\n", GdbCmdInfo::argNone }, { DCbreaktext, "break %s\n", GdbCmdInfo::argString }, { DCbreakline, "break %s:%d\n", GdbCmdInfo::argStringNum }, { DCtbreakline, "tbreak %s:%d\n", GdbCmdInfo::argStringNum }, { DCbreakaddr, "break *%s\n", GdbCmdInfo::argString }, { DCtbreakaddr, "tbreak *%s\n", GdbCmdInfo::argString }, { DCwatchpoint, "watch %s\n", GdbCmdInfo::argString }, { DCdelete, "delete %d\n", GdbCmdInfo::argNum }, { DCenable, "enable %d\n", GdbCmdInfo::argNum }, { DCdisable, "disable %d\n", GdbCmdInfo::argNum }, { DCprint, "print %s\n", GdbCmdInfo::argString }, { DCprintDeref, "print *(%s)\n", GdbCmdInfo::argString }, { DCprintStruct, "print %s\n", GdbCmdInfo::argString }, { DCprintQStringStruct, printQStringStructFmt, GdbCmdInfo::argString}, { DCframe, "frame %d\n", GdbCmdInfo::argNum }, { DCfindType, "whatis %s\n", GdbCmdInfo::argString }, { DCinfosharedlib, "info sharedlibrary\n", GdbCmdInfo::argNone }, { DCthread, "thread %d\n", GdbCmdInfo::argNum }, { DCinfothreads, "info threads\n", GdbCmdInfo::argNone }, { DCinfobreak, "info breakpoints\n", GdbCmdInfo::argNone }, { DCcondition, "condition %d %s\n", GdbCmdInfo::argNumString}, { DCsetpc, "set variable $pc=%s\n", GdbCmdInfo::argString }, { DCignore, "ignore %d %d\n", GdbCmdInfo::argNum2}, { DCprintWChar, "print ($s=%s)?*$s@wcslen($s):0x0\n", GdbCmdInfo::argString }, { DCsetvariable, "set variable %s=%s\n", GdbCmdInfo::argString2 }, }; #define NUM_CMDS (int(sizeof(cmds)/sizeof(cmds[0]))) #define MAX_FMTLEN 200 GdbDriver::GdbDriver() : DebuggerDriver() { #ifndef NDEBUG // check command info array const char* perc; for (int i = 0; i < NUM_CMDS; i++) { // must be indexable by DbgCommand values, i.e. sorted by DbgCommand values assert(i == cmds[i].cmd); // a format string must be associated assert(cmds[i].fmt != 0); assert(strlen(cmds[i].fmt) <= MAX_FMTLEN); // format string must match arg specification switch (cmds[i].argsNeeded) { case GdbCmdInfo::argNone: assert(strchr(cmds[i].fmt, '%') == 0); break; case GdbCmdInfo::argString: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc+2, '%') == 0); break; case GdbCmdInfo::argNum: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc+2, '%') == 0); break; case GdbCmdInfo::argStringNum: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); perc = strchr(perc+2, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc+2, '%') == 0); break; case GdbCmdInfo::argNumString: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); perc = strchr(perc+2, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc+2, '%') == 0); break; case GdbCmdInfo::argString2: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); perc = strchr(perc+2, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc+2, '%') == 0); break; case GdbCmdInfo::argNum2: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); perc = strchr(perc+2, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc+2, '%') == 0); break; } } assert(strlen(printQStringStructFmt) <= MAX_FMTLEN); #endif } GdbDriver::~GdbDriver() { } QString GdbDriver::driverName() const { return "GDB"; } QString GdbDriver::defaultGdb() { return "gdb" " --fullname" /* to get standard file names each time the prog stops */ " --nx"; /* do not execute initialization files */ } QString GdbDriver::defaultInvocation() const { if (m_defaultCmd.isEmpty()) { return defaultGdb(); } else { return m_defaultCmd; } } QStringList GdbDriver::boolOptionList() const { // no options return QStringList(); } bool GdbDriver::startup(QString cmdStr) { if (!DebuggerDriver::startup(cmdStr)) return false; static const char gdbInitialize[] = /* * Work around buggy gdbs that do command line editing even if they * are not on a tty. The readline library echos every command back * in this case, which is confusing for us. */ "set editing off\n" "set confirm off\n" "set print static-members off\n" "set print asm-demangle on\n" /* * Sometimes, gdb prints [New Thread ...] during 'info threads'; * we will not look at thread events anyway, so turn them off. */ "set print thread-events off\n" /* * We do not want Python pretty printer support, because their * output is unpredictable, and we cannot parse it. */ "set auto-load python off\n" /* * Nevertheless, some Python messages get through, for example, * when a backtrace is printed without the Python gdb module loaded. */ "set python print-stack none\n" /* * Don't assume that program functions invoked from a watch expression * always succeed. */ "set unwindonsignal on\n" /* * Write a short macro that prints all locals: local variables and * function arguments. */ "define kdbg__alllocals\n" "info locals\n" /* local vars supersede args with same name */ "info args\n" /* therefore, arguments must come last */ "end\n" /* * Work around a bug in gdb-6.3: "info line main" crashes gdb. */ "define kdbg_infolinemain\n" "list\n" "info line\n" "end\n" // change prompt string and synchronize with gdb "set prompt " PROMPT "\n" ; executeCmdString(DCinitialize, gdbInitialize, false); // assume that QString::null is ok cmds[DCprintQStringStruct].fmt = printQStringStructFmt; return true; } void GdbDriver::commandFinished(CmdQueueItem* cmd) { // command string must be committed if (!cmd->m_committed) { // not commited! TRACE("calling " + (__PRETTY_FUNCTION__ + (" with uncommited command:\n\t" + cmd->m_cmdString))); return; } switch (cmd->m_cmd) { case DCinitialize: { /* * Check for GDB 7.1 or later; the syntax for the disassemble * command has changed. * This RE picks the last version number in the first line, * because at least OpenSUSE writes its own version number * in the first line (but before GDB's version number). */ QRegExp re( " " // must be preceded by space "[(]?" // SLES 10 embeds in parentheses "(\\d+)\\.(\\d+)" // major, minor "[^ ]*\\n" // no space until end of line ); int pos = re.indexIn(m_output); const char* disass = "disassemble %s %s\n"; if (pos >= 0) { int major = re.cap(1).toInt(); int minor = re.cap(2).toInt(); if (major > 7 || (major == 7 && minor >= 1)) { disass = "disassemble %s, %s\n"; } } cmds[DCdisassemble].fmt = disass; } break; default:; } /* ok, the command is ready */ emit commandReceived(cmd, m_output.constData()); switch (cmd->m_cmd) { case DCcorefile: case DCinfolinemain: case DCinfoline: case DCframe: case DCattach: case DCrun: case DCcont: case DCstep: case DCstepi: case DCnext: case DCnexti: case DCfinish: case DCuntil: parseMarker(cmd); default:; } } int GdbDriver::findPrompt(const QByteArray& output) const { /* * If there's a prompt string in the collected output, it must be at * the very end. * * Note: It could nevertheless happen that a character sequence that is * equal to the prompt string appears at the end of the output, * although it is very, very unlikely (namely as part of a string that * lingered in gdb's output buffer due to some timing/heavy load * conditions for a very long time such that that buffer overflowed * exactly at the end of the prompt string look-a-like). */ int len = output.length(); if (len >= PROMPT_LEN && strncmp(output.data()+len-PROMPT_LEN, PROMPT, PROMPT_LEN) == 0) { return len-PROMPT_LEN; } return -1; } /* * The --fullname option makes gdb send a special normalized sequence print * each time the program stops and at some other points. The sequence has * the form "\032\032filename:lineno:charoffset:(beg|middle):address". */ void GdbDriver::parseMarker(CmdQueueItem* cmd) { char* startMarker = strstr(m_output.data(), "\032\032"); if (startMarker == 0) return; // extract the marker startMarker += 2; TRACE(QString("found marker: ") + startMarker); char* endMarker = strchr(startMarker, '\n'); if (endMarker == 0) return; *endMarker = '\0'; // extract filename and line number static QRegExp MarkerRE(":(\\d+):\\d+:[begmidl]+:0x"); int lineNoStart = MarkerRE.indexIn(startMarker); if (lineNoStart >= 0) { int lineNo = MarkerRE.cap(1).toInt(); // get address unless there is one in cmd DbgAddr address = cmd->m_addr; if (address.isEmpty()) { const char* addrStart = startMarker + lineNoStart + MarkerRE.matchedLength() - 2; address = QString(addrStart).trimmed(); } // now show the window startMarker[lineNoStart] = '\0'; /* split off file name */ emit activateFileLine(startMarker, lineNo-1, address); } } /* * Escapes characters that might lead to problems when they appear on gdb's * command line. */ static void normalizeStringArg(QString& arg) { /* * Remove trailing backslashes. This approach is a little simplistic, * but we know that there is at the moment no case where a trailing * backslash would make sense. */ while (!arg.isEmpty() && arg[arg.length()-1] == '\\') { arg = arg.left(arg.length()-1); } } QString GdbDriver::makeCmdString(DbgCommand cmd, QString strArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argString); normalizeStringArg(strArg); if (cmd == DCcd) { // need the working directory when parsing the output m_programWD = strArg; } else if (cmd == DCsetargs && !m_redirect.isEmpty()) { /* * Use saved redirection. We prepend it in front of the user's * arguments so that the user can override the redirections. */ strArg = m_redirect + " " + strArg; } QString cmdString; cmdString.sprintf(cmds[cmd].fmt, strArg.toUtf8().constData()); return cmdString; } QString GdbDriver::makeCmdString(DbgCommand cmd, int intArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argNum); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, intArg); return cmdString; } QString GdbDriver::makeCmdString(DbgCommand cmd, QString strArg, int intArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argStringNum || cmds[cmd].argsNeeded == GdbCmdInfo::argNumString || cmd == DCexamine || cmd == DCtty); normalizeStringArg(strArg); QString cmdString; if (cmd == DCtty) { /* * intArg specifies which channels should be redirected to * /dev/null. It is a value or'ed together from RDNstdin, * RDNstdout, RDNstderr. We store the value for a later DCsetargs * command. * * Note: We rely on that after the DCtty a DCsetargs will follow, * which will ultimately apply the redirection. */ static const char* const runRedir[8] = { "", "/dev/null", "/dev/null", "2>/dev/null", "/dev/null", ">/dev/null 2>&1", "/dev/null 2>&1" }; if (strArg.isEmpty()) intArg = 7; /* failsafe if no tty */ m_redirect = runRedir[intArg & 7]; return makeCmdString(DCtty, strArg); /* note: no problem if strArg empty */ } if (cmd == DCexamine) { // make a format specifier from the intArg static const char size[16] = { '\0', 'b', 'h', 'w', 'g' }; static const char format[16] = { '\0', 'x', 'd', 'u', 'o', 't', 'a', 'c', 'f', 's', 'i' }; assert(MDTsizemask == 0xf); /* lowest 4 bits */ assert(MDTformatmask == 0xf0); /* next 4 bits */ int count = 16; /* number of entities to print */ char sizeSpec = size[intArg & MDTsizemask]; char formatSpec = format[(intArg & MDTformatmask) >> 4]; assert(sizeSpec != '\0'); assert(formatSpec != '\0'); // adjust count such that 16 lines are printed switch (intArg & MDTformatmask) { case MDTstring: case MDTinsn: break; /* no modification needed */ default: // all cases drop through: switch (intArg & MDTsizemask) { case MDTbyte: case MDThalfword: count *= 2; case MDTword: count *= 2; case MDTgiantword: count *= 2; } break; } QString spec; spec.sprintf("/%d%c%c", count, sizeSpec, formatSpec); return makeCmdString(DCexamine, spec, strArg); } if (cmds[cmd].argsNeeded == GdbCmdInfo::argStringNum) { // line numbers are zero-based if (cmd == DCuntil || cmd == DCbreakline || cmd == DCtbreakline || cmd == DCinfoline) { intArg++; } if (cmd == DCinfoline) { // must split off file name part strArg = QFileInfo(strArg).fileName(); } cmdString.sprintf(cmds[cmd].fmt, strArg.toUtf8().constData(), intArg); } else { cmdString.sprintf(cmds[cmd].fmt, intArg, strArg.toUtf8().constData()); } return cmdString; } QString GdbDriver::makeCmdString(DbgCommand cmd, QString strArg1, QString strArg2) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argString2); normalizeStringArg(strArg1); normalizeStringArg(strArg2); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, strArg1.toUtf8().constData(), strArg2.toUtf8().constData()); return cmdString; } QString GdbDriver::makeCmdString(DbgCommand cmd, int intArg1, int intArg2) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argNum2); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, intArg1, intArg2); return cmdString; } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, bool clearLow) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == GdbCmdInfo::argNone); if (cmd == DCrun) { m_haveCoreFile = false; } return executeCmdString(cmd, cmds[cmd].fmt, clearLow); } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, QString strArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg), clearLow); } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, int intArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, intArg), clearLow); } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, QString strArg, int intArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg, intArg), clearLow); } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, QString strArg1, QString strArg2, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg1, strArg2), clearLow); } CmdQueueItem* GdbDriver::executeCmd(DbgCommand cmd, int intArg1, int intArg2, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, intArg1, intArg2), clearLow); } CmdQueueItem* GdbDriver::queueCmd(DbgCommand cmd, QueueMode mode) { return queueCmdString(cmd, cmds[cmd].fmt, mode); } CmdQueueItem* GdbDriver::queueCmd(DbgCommand cmd, QString strArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg), mode); } CmdQueueItem* GdbDriver::queueCmd(DbgCommand cmd, int intArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, intArg), mode); } CmdQueueItem* GdbDriver::queueCmd(DbgCommand cmd, QString strArg, int intArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg, intArg), mode); } CmdQueueItem* GdbDriver::queueCmd(DbgCommand cmd, QString strArg1, QString strArg2, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg1, strArg2), mode); } void GdbDriver::terminate() { if (m_state != DSidle) { ::kill(pid(), SIGINT); m_state = DSinterrupted; } flushCommands(); closeWriteChannel(); } void GdbDriver::detachAndTerminate() { ::kill(pid(), SIGINT); flushCommands(); executeCmdString(DCinitialize, "detach\nquit\n", true); } void GdbDriver::interruptInferior() { ::kill(pid(), SIGINT); // remove accidentally queued commands flushHiPriQueue(); } static bool isErrorExpr(const char* output) { return strncmp(output, "Cannot access memory at", 23) == 0 || strncmp(output, "Attempt to dereference a generic pointer", 40) == 0 || strncmp(output, "Attempt to take contents of ", 28) == 0 || strncmp(output, "Attempt to use a type name as an expression", 43) == 0 || strncmp(output, "There is no member or method named", 34) == 0 || strncmp(output, "A parse error in expression", 27) == 0 || strncmp(output, "No symbol \"", 11) == 0 || strncmp(output, "Internal error: ", 16) == 0; } /** * Returns true if the output is an error message. If wantErrorValue is * true, a new ExprValue object is created and filled with the error message. * If there are warnings, they are skipped and output points past the warnings * on return (even if there \e are errors). */ static bool parseErrorMessage(const char*& output, ExprValue*& variable, bool wantErrorValue) { while (isspace(*output)) output++; // skip warnings while (strncmp(output, "warning:", 8) == 0) { const char* end = strchr(output+8, '\n'); if (end == 0) output += strlen(output); else output = end+1; while (isspace(*output)) output++; } if (isErrorExpr(output)) { if (wantErrorValue) { // put the error message as value in the variable variable = new ExprValue(QString(), VarTree::NKplain); const char* endMsg = strchr(output, '\n'); if (endMsg == 0) endMsg = output + strlen(output); variable->m_value = QString::fromLatin1(output, endMsg-output); } else { variable = 0; } return true; } return false; } #if QT_VERSION >= 300 union Qt2QChar { short s; struct { uchar row; uchar cell; } qch; }; #endif void GdbDriver::setPrintQStringDataCmd(const char* cmd) { // don't accept the command if it is empty if (cmd == 0 || *cmd == '\0') return; assert(strlen(cmd) <= MAX_FMTLEN); cmds[DCprintQStringStruct].fmt = cmd; } ExprValue* GdbDriver::parseQCharArray(const char* output, bool wantErrorValue, bool qt3like) { ExprValue* variable = 0; /* * Parse off white space. gdb sometimes prints white space first if the * printed array leaded to an error. */ while (isspace(*output)) output++; // special case: empty string (0 repetitions) if (strncmp(output, "Invalid number 0 of repetitions", 31) == 0) { variable = new ExprValue(QString(), VarTree::NKplain); variable->m_value = "\"\""; return variable; } // check for error conditions if (parseErrorMessage(output, variable, wantErrorValue)) return variable; // parse the array // find '=' const char* p = output; p = strchr(p, '='); if (p == 0) { goto error; } // skip white space do { p++; } while (isspace(*p)); if (*p == '{') { // this is the real data p++; /* skip '{' */ // parse the array QString result; QString repeatCount; enum { wasNothing, wasChar, wasRepeat } lastThing = wasNothing; /* * A matrix for separators between the individual "things" * that are added to the string. The first index is a bool, * the second index is from the enum above. */ static const char* separator[2][3] = { { "\"", 0, ", \"" }, /* normal char is added */ { "'", "\", '", ", '" } /* repeated char is added */ }; while (isdigit(*p)) { // parse a number char* end; unsigned short value = (unsigned short) strtoul(p, &end, 0); if (end == p) goto error; /* huh? no valid digits */ // skip separator and search for a repeat count p = end; while (isspace(*p) || *p == ',') p++; bool repeats = strncmp(p, "'); /* search end and advance */ if (p == 0) goto error; p++; /* skip '>' */ repeatCount = QString::fromLatin1(start, p-start); while (isspace(*p) || *p == ',') p++; } // p is now at the next char (or the end) // interpret the value as a QChar // TODO: make cross-architecture compatible QChar ch; if (qt3like) { ch = QChar(value); } else { #if QT_VERSION < 300 (unsigned short&)ch = value; #else Qt2QChar c; c.s = value; ch.setRow(c.qch.row); ch.setCell(c.qch.cell); #endif } // escape a few frequently used characters char escapeCode = '\0'; switch (ch.toLatin1()) { case '\n': escapeCode = 'n'; break; case '\r': escapeCode = 'r'; break; case '\t': escapeCode = 't'; break; case '\b': escapeCode = 'b'; break; case '\"': escapeCode = '\"'; break; case '\\': escapeCode = '\\'; break; case '\0': if (value == 0) { escapeCode = '0'; } break; } // add separator result += separator[repeats][lastThing]; // add char if (escapeCode != '\0') { result += '\\'; ch = escapeCode; } result += ch; // fixup repeat count and lastThing if (repeats) { result += "' "; result += repeatCount; lastThing = wasRepeat; } else { lastThing = wasChar; } } if (*p != '}') goto error; // closing quote if (lastThing == wasChar) result += "\""; // assign the value variable = new ExprValue(QString(), VarTree::NKplain); variable->m_value = result; } else if (strncmp(p, "true", 4) == 0) { variable = new ExprValue(QString(), VarTree::NKplain); variable->m_value = "QString::null"; } else if (strncmp(p, "false", 5) == 0) { variable = new ExprValue(QString(), VarTree::NKplain); variable->m_value = "(null)"; } else goto error; return variable; error: if (wantErrorValue) { variable = new ExprValue(QString(), VarTree::NKplain); variable->m_value = "internal parse error"; } return variable; } static ExprValue* parseVar(const char*& s) { const char* p = s; // skip whitespace while (isspace(*p)) p++; QString name; VarTree::NameKind kind; /* * Detect anonymouse struct values: The 'name =' part is missing: * s = { a = 1, { b = 2 }} * Note that this detection works only inside structs when the anonymous * struct is not the first member: * s = {{ a = 1 }, b = 2} * This is misparsed (by parseNested()) because it is mistakenly * interprets the second opening brace as the first element of an array * of structs. */ if (*p == '{') { name = i18n(""); kind = VarTree::NKanonymous; } else { if (!parseName(p, name, kind)) { return 0; } // go for '=' while (isspace(*p)) p++; if (*p != '=') { TRACE("parse error: = not found after " + name); return 0; } // skip the '=' and more whitespace p++; while (isspace(*p)) p++; } ExprValue* variable = new ExprValue(name, kind); if (!parseValue(p, variable)) { delete variable; return 0; } s = p; return variable; } static void skipNested(const char*& s, char opening, char closing) { const char* p = s; // parse a nested type int nest = 1; p++; /* * Search for next matching `closing' char, skipping nested pairs of * `opening' and `closing'. */ while (*p && nest > 0) { if (*p == opening) { nest++; } else if (*p == closing) { nest--; } p++; } if (nest != 0) { TRACE(QString().sprintf("parse error: mismatching %c%c at %-20.20s", opening, closing, s)); } s = p; } /** * This function skips text that is delimited by nested angle bracktes, '<>'. * A complication arises because the delimited text can contain the names of * operator<<, operator>>, operator<, and operator>, which have to be treated * specially so that they do not count towards the nesting of '<>'. * This function assumes that the delimited text does not contain strings. */ static void skipNestedAngles(const char*& s) { const char* p = s; int nest = 1; p++; // skip the initial '<' while (*p && nest > 0) { // Below we can check for p-s >= 9 instead of 8 because // *s is '<' and cannot be part of "operator". if (*p == '<') { if (p-s >= 9 && strncmp(p-8, "operator", 8) == 0) { if (p[1] == '<') p++; } else { nest++; } } else if (*p == '>') { if (p-s >= 9 && strncmp(p-8, "operator", 8) == 0) { if (p[1] == '>') p++; } else { nest--; } } p++; } if (nest != 0) { TRACE(QString().sprintf("parse error: mismatching <> at %-20.20s", s)); } s = p; } /** * Find the end of line that is not inside braces */ static void findEnd(const char*& s) { const char* p = s; while (*p && *p!='\n') { while (*p && *p!='\n' && *p!='{') p++; if (*p=='{') { p++; skipNested(p, '{', '}'); p--; } } s = p; } static bool isNumberish(const char ch) { return (ch>='0' && ch<='9') || ch=='.' || ch=='x'; } void skipString(const char*& p) { // wchar_t strings begin with L if (*p == 'L') ++p; moreStrings: // opening quote char quote = *p++; while (*p != quote) { if (*p == '\\') { // skip escaped character // no special treatment for octal values necessary p++; } // simply return if no more characters if (*p == '\0') return; p++; } // closing quote p++; /* * Strings can consist of several parts, some of which contain repeated * characters. */ if (quote == '\'') { // look ahaead for const char* q = p+1; while (isspace(*q)) q++; if (strncmp(q, "' */ } } } // Is the string continued? If so, there is no L in wchar_t strings if (*p == ',') { // look ahead for another quote const char* q = p+1; while (isspace(*q)) q++; if (*q == '"' || *q == '\'') { // yes! p = q; goto moreStrings; } // some strings can end in if (strncmp(q, "' */ } } } /* * There's a bug in gdb where it prints the beginning of the string * continuation and the comma-blank in the wrong order if the new string * begins with an incomplete multi-byte character. For now, let's check * for this in a very narrow condition, particularly, where the next * character is given in octal notation. Example: * 'a' "\240, b" */ if (*p == '"' && p[1] == '\\' && isdigit(p[2])) { int i = 3; while (isdigit(p[i])) ++i; if (p[i] == ',' && p[i+1] == ' ') { // just treat everything beginning at the dquote as string goto moreStrings; } } /* very long strings are followed by `...' */ if (*p == '.' && p[1] == '.' && p[2] == '.') { p += 3; } } static void skipNestedWithString(const char*& s, char opening, char closing) { const char* p = s; // parse a nested expression int nest = 1; p++; /* * Search for next matching `closing' char, skipping nested pairs of * `opening' and `closing' as well as strings. */ while (*p && nest > 0) { if (*p == opening) { nest++; } else if (*p == closing) { nest--; } else if (*p == '\'' || *p == '\"') { skipString(p); continue; } p++; } if (nest > 0) { TRACE(QString().sprintf("parse error: mismatching %c%c at %-20.20s", opening, closing, s)); } s = p; } inline void skipName(const char*& p) { // allow : (for enumeration values) and $ and . (for _vtbl.) while (isalnum(*p) || *p == '_' || *p == ':' || *p == '$' || *p == '.') p++; } static bool parseName(const char*& s, QString& name, VarTree::NameKind& kind) { kind = VarTree::NKplain; const char* p = s; // examples of names: // name // // ,7> > if (*p == '<') { skipNestedAngles(p); name = QString::fromLatin1(s, p - s); kind = VarTree::NKtype; } else { // name, which might be "static"; allow dot for "_vtbl." skipName(p); if (p == s) { TRACE(QString().sprintf("parse error: not a name %-20.20s", s)); return false; } int len = p - s; if (len == 6 && strncmp(s, "static", 6) == 0) { kind = VarTree::NKstatic; // its a static variable, name comes now while (isspace(*p)) p++; s = p; skipName(p); if (p == s) { TRACE(QString().sprintf("parse error: not a name after static %-20.20s", s)); return false; } len = p - s; } name = QString::fromLatin1(s, len); } // return the new position s = p; return true; } static bool parseValue(const char*& s, ExprValue* variable) { variable->m_value = ""; repeat: if (*s == '{') { // Sometimes we find the following output: // {} 0x40012000 // {} // {} if (strncmp(s, "{m_value = QString::fromLatin1(start, s-start); variable->m_value += ' '; // add only a single space while (isspace(*s)) s++; goto repeat; } else { s++; if (!parseNested(s, variable)) { return false; } // must be the closing brace if (*s != '}') { TRACE("parse error: missing } of " + variable->m_name); return false; } s++; // final white space while (isspace(*s)) s++; } } // Sometimes we find a warning; it ends at the next LF else if (strncmp(s, "warning: ", 9) == 0) { const char* end = strchr(s, '\n'); s = end ? end : s+strlen(s); // skip space at start of next line while (isspace(*s)) s++; goto repeat; } else { // examples of leaf values (cannot be the empty string): // 123 // -123 // 23.575e+37 // 0x32a45 // @0x012ab4 // (DwContentType&) @0x8123456: {...} // 0x32a45 "text" // 10 '\n' // // 0x823abc virtual table> // 0x40240f "test" // (void (*)()) 0x8048480 // (E *) 0xbffff450 // red // &parseP (HTMLClueV *, char *) // Variable "x" is not available. // The value of variable 'x' is distributed... // -nan(0xfffff081defa0) const char*p = s; // check for type QString type; if (*p == '(') { skipNested(p, '(', ')'); while (isspace(*p)) p++; variable->m_value = QString::fromLatin1(s, p - s); } bool reference = false; if (*p == '@') { // skip reference marker p++; reference = true; } const char* start = p; if (*p == '-') p++; // some values consist of more than one token bool checkMultiPart = false; if (p[0] == '0' && p[1] == 'x') { // parse hex number p += 2; while (isxdigit(*p)) p++; /* * Assume this is a pointer, but only if it's not a reference, since * references can't be expanded. */ if (!reference) { variable->m_varKind = VarTree::VKpointer; } else { /* * References are followed by a colon, in which case we'll * find the value following the reference address. */ if (*p == ':') { p++; } else { // Paranoia. (Can this happen, i.e. reference not followed by ':'?) reference = false; } } checkMultiPart = true; } else if (isdigit(*p)) { // parse decimal number, possibly a float while (isdigit(*p)) p++; if (*p == '.') { /* TODO: obey i18n? */ // In long arrays an integer may be followed by '...'. // We test for this situation and don't gobble the '...'. if (p[1] != '.' || p[0] != '.') { // fractional part p++; while (isdigit(*p)) p++; } } if (*p == 'e' || *p == 'E') { p++; // exponent if (*p == '-' || *p == '+') p++; while (isdigit(*p)) p++; } // for char variables there is the char, eg. 10 '\n' checkMultiPart = true; } else if (*p == '<') { // e.g. skipNestedAngles(p); } else if (*p == '"' || *p == '\'') { // character may have multipart: '\000' checkMultiPart = *p == '\''; // found a string skipString(p); } else if (*p == 'L' && (p[1] == '"' || p[1] == '\'')) { // ditto for wchar_t strings checkMultiPart = p[1] == '\''; skipString(p); } else if (*p == '&') { // function pointer p++; skipName(p); while (isspace(*p)) { p++; } if (*p == '(') { skipNested(p, '(', ')'); } } else if (strncmp(p, "Variable \"", 10) == 0) { // Variable "x" is not available. p += 10; // skip to " skipName(p); if (strncmp(p, "\" is not available.", 19) == 0) { p += 19; } } else if (strncmp(p, "The value of variable '", 23) == 0) { p += 23; skipName(p); const char* e = strchr(p, '.'); if (e == 0) { p += strlen(p); } else { p = e+1; } } else { moreEnum: // must be an enumeration value skipName(p); // nan (floating point Not a Number) is followed by a number in () // enum values can look like A::(anonymous namespace)::blue if (*p == '(') { bool isAnonNS = strncmp(p+1, "anonymous namespace)", 20) == 0; skipNested(p, '(', ')'); if (isAnonNS) goto moreEnum; } } variable->m_value += QString::fromLatin1(start, p - start); // remove line breaks from the value; this is ok since // string values never contain a literal line break variable->m_value.replace('\n', ' '); while (checkMultiPart) { // white space while (isspace(*p)) p++; // may be followed by a string or <...> // if this was a pointer with a string, // reset that pointer flag since we have now a value start = p; checkMultiPart = false; if (*p == '"' || *p == '\'') { skipString(p); variable->m_varKind = VarTree::VKsimple; } else if (*p == 'L' && (p[1] == '"' || p[1] == '\'')) { skipString(p); // wchar_t string variable->m_varKind = VarTree::VKsimple; } else if (*p == '<') { // if this value is part of an array, it might be followed // by , which we don't skip here if (strncmp(p, "m_value += QString::fromLatin1(start-1, (p - start)+1); } } if (variable->m_value.length() == 0) { TRACE("parse error: no value for " + variable->m_name); return false; } // final white space while (isspace(*p)) p++; s = p; /* * If this was a reference, the value follows. It might even be a * composite variable! */ if (reference) { goto repeat; } } return true; } static bool parseNested(const char*& s, ExprValue* variable) { // could be a structure or an array while (isspace(*s)) s++; const char* p = s; bool isStruct = false; /* * If there is a name followed by an = or an < -- which starts a type * name -- or "static", it is a structure */ if (*p == '<' || *p == '}') { isStruct = true; } else if (strncmp(p, "static ", 7) == 0) { isStruct = true; } else if (isalpha(*p) || *p == '_' || *p == '$') { // look ahead for a comma after the name skipName(p); while (isspace(*p)) p++; if (*p == '=') { isStruct = true; } p = s; /* rescan the name */ } if (isStruct) { if (!parseVarSeq(p, variable)) { return false; } variable->m_varKind = VarTree::VKstruct; } else { if (!parseValueSeq(p, variable)) { return false; } variable->m_varKind = VarTree::VKarray; } s = p; return true; } static bool parseVarSeq(const char*& s, ExprValue* variable) { // parse a comma-separated sequence of variables ExprValue* var = variable; /* var != 0 to indicate success if empty seq */ for (;;) { if (*s == '}') break; if (strncmp(s, "}", 17) == 0) { // no member variables, so break out immediately s += 16; /* go to the closing brace */ break; } var = parseVar(s); if (var == 0) break; /* syntax error */ variable->appendChild(var); if (*s != ',') break; // skip the comma and whitespace s++; while (isspace(*s)) s++; } return var != 0; } static bool parseValueSeq(const char*& s, ExprValue* variable) { // parse a comma-separated sequence of variables int index = 0; bool good; for (;;) { QString name; name.sprintf("[%d]", index); ExprValue* var = new ExprValue(name, VarTree::NKplain); good = parseValue(s, var); if (!good) { delete var; return false; } // a value may be followed by "" if (strncmp(s, "", 7) != 0) { // should not happen delete var; return false; } TRACE(QString().sprintf("found in array", l)); // replace name and advance index name.sprintf("[%d .. %d]", index, index+l-1); var->m_name = name; index += l; // skip " times>" and space s = end+7; // possible final space while (isspace(*s)) s++; } else { index++; } variable->appendChild(var); // long arrays may be terminated by '...' if (strncmp(s, "...", 3) == 0) { s += 3; ExprValue* var = new ExprValue("...", VarTree::NKplain); var->m_value = i18n(""); variable->appendChild(var); break; } if (*s != ',') { break; } // skip the comma and whitespace s++; while (isspace(*s)) s++; // sometimes there is a closing brace after a comma // if (*s == '}') // break; } return true; } /** * Parses a stack frame. */ static void parseFrameInfo(const char*& s, QString& func, QString& file, int& lineNo, DbgAddr& address) { const char* p = s; // next may be a hexadecimal address if (*p == '0') { const char* start = p; p++; if (*p == 'x') p++; while (isxdigit(*p)) p++; address = QString::fromLatin1(start, p-start); if (strncmp(p, " in ", 4) == 0) p += 4; } else { address = DbgAddr(); } const char* start = p; // check for special signal handler frame if (strncmp(p, "", 23) == 0) { func = QString::fromLatin1(start, 23); file = QString(); lineNo = -1; s = p+23; if (*s == '\n') s++; return; } /* * Skip the function name. It is terminated by a left parenthesis * which does not delimit "(anonymous namespace)" and which is * outside the angle brackets <> of template parameter lists * and is preceded by a space. */ while (*p != '\0') { if (*p == '<') { // check for operator<< and operator< if (p-start >= 8 && strncmp(p-8, "operator", 8) == 0) { p++; if (*p == '<') p++; } else { // skip template parameter list skipNestedAngles(p); } } else if (*p == '(') { // this skips "(anonymous namespace)" as well as the formal // parameter list of the containing function if this is a member // of a nested class skipNestedWithString(p, '(', ')'); } else if (*p == ' ') { ++p; if (*p == '(') break; // parameter list found } else { p++; } } if (*p == '\0') { func = start; file = QString(); lineNo = -1; s = p; return; } /* * Skip parameters. But notice that for complicated conversion * functions (eg. "operator int(**)()()", ie. convert to pointer to * pointer to function) as well as operator()(...) we have to skip * additional pairs of parentheses. Furthermore, recent gdbs write the * demangled name followed by the arguments in a pair of parentheses, * where the demangled name can end in "const". */ do { skipNestedWithString(p, '(', ')'); while (isspace(*p)) p++; // skip "const" if (strncmp(p, "const", 5) == 0) { p += 5; while (isspace(*p)) p++; } } while (*p == '('); // check for file position if (strncmp(p, "at ", 3) == 0) { p += 3; const char* fileStart = p; // go for the end of the line while (*p != '\0' && *p != '\n') p++; // search back for colon const char* colon = p; do { --colon; } while (*colon != ':'); file = QString::fromLatin1(fileStart, colon-fileStart); lineNo = atoi(colon+1)-1; // skip new-line if (*p != '\0') p++; } else { // check for "from shared lib" if (strncmp(p, "from ", 5) == 0) { p += 5; // go for the end of the line while (*p != '\0' && *p != '\n') p++; // skip new-line if (*p != '\0') p++; } file = ""; lineNo = -1; } // construct the function name (including file info) if (*p == '\0') { func = start; } else { func = QString::fromLatin1(start, p-start-1); /* don't include \n */ } s = p; /* * Replace \n (and whitespace around it) in func by a blank. We cannot * use QString::simplified() for this because this would also * simplify space that belongs to a string arguments that gdb sometimes * prints in the argument lists of the function. */ ASSERT(!isspace(func[0].toLatin1())); // there must be non-white before first \n int nl = 0; while ((nl = func.indexOf('\n', nl)) >= 0) { // search back to the beginning of the whitespace int startWhite = nl; do { --startWhite; } while (isspace(func[startWhite].toLatin1())); startWhite++; // search forward to the end of the whitespace do { nl++; } while (isspace(func[nl].toLatin1())); // replace func.replace(startWhite, nl-startWhite, " "); /* continue searching for more \n's at this place: */ nl = startWhite+1; } } /** * Parses a stack frame including its frame number */ static bool parseFrame(const char*& s, int& frameNo, QString& func, QString& file, int& lineNo, DbgAddr& address) { // Example: // #1 0x8048881 in Dl::Dl (this=0xbffff418, r=3214) at testfile.cpp:72 // Breakpoint 3, Cl::f(int) const (this=0xbffff3c0, x=17) at testfile.cpp:155 // must start with a hash mark followed by number // or with "Breakpoint " followed by number and comma if (s[0] == '#') { if (!isdigit(s[1])) return false; s++; /* skip the hash mark */ } else if (strncmp(s, "Breakpoint ", 11) == 0) { if (!isdigit(s[11])) return false; s += 11; /* skip "Breakpoint" */ } else return false; // frame number frameNo = atoi(s); while (isdigit(*s)) s++; // space and comma while (isspace(*s) || *s == ',') s++; parseFrameInfo(s, func, file, lineNo, address); return true; } void GdbDriver::parseBackTrace(const char* output, std::list& stack) { QString func, file; int lineNo, frameNo; DbgAddr address; while (::parseFrame(output, frameNo, func, file, lineNo, address)) { stack.push_back(StackFrame()); StackFrame* frm = &stack.back(); frm->frameNo = frameNo; frm->fileName = file; frm->lineNo = lineNo; frm->address = address; frm->var = new ExprValue(func, VarTree::NKplain); } } bool GdbDriver::parseFrameChange(const char* output, int& frameNo, QString& file, int& lineNo, DbgAddr& address) { QString func; return ::parseFrame(output, frameNo, func, file, lineNo, address); } bool GdbDriver::parseBreakList(const char* output, std::list& brks) { // skip first line, which is the headline const char* p = strchr(output, '\n'); if (p == 0) return false; p++; if (*p == '\0') return false; // split up a line const char* end; char* dummy; while (*p != '\0') { Breakpoint bp; // get Num bp.id = strtol(p, &dummy, 10); /* don't care about overflows */ p = dummy; // check for continued breakpoint if (*p == '.' && isdigit(p[1])) { // continuation: skip type and disposition } else { // get Type while (isspace(*p)) p++; if (strncmp(p, "breakpoint", 10) == 0) { p += 10; } else if (strncmp(p, "hw watchpoint", 13) == 0) { bp.type = Breakpoint::watchpoint; p += 13; } else if (strncmp(p, "watchpoint", 10) == 0) { bp.type = Breakpoint::watchpoint; p += 10; } while (isspace(*p)) p++; if (*p == '\0') break; // get Disp bp.temporary = *p++ == 'd'; } while (*p != '\0' && !isspace(*p)) /* "keep" or "del" */ p++; while (isspace(*p)) p++; if (*p == '\0') break; // get Enb bp.enabled = *p++ == 'y'; while (*p != '\0' && !isspace(*p)) /* "y" or "n" */ p++; while (isspace(*p)) p++; if (*p == '\0') break; // the address, if present if (bp.type == Breakpoint::breakpoint && strncmp(p, "0x", 2) == 0) { const char* start = p; while (*p != '\0' && !isspace(*p)) p++; bp.address = QString::fromLatin1(start, p-start); while (isspace(*p) && *p != '\n') p++; if (*p == '\0') break; } // remainder is location, hit and ignore count, condition end = strchr(p, '\n'); if (end == 0) { bp.location = p; p += bp.location.length(); } else { // location of a filled in from subsequent breakpoints if (strncmp(p, "", 10) != 0) bp.location = QString::fromLatin1(p, end-p).trimmed(); p = end+1; /* skip over \n */ } // may be continued in next line while (isspace(*p)) { /* p points to beginning of line */ // skip white space at beginning of line while (isspace(*p)) p++; // seek end of line end = strchr(p, '\n'); if (end == 0) end = p+strlen(p); if (strncmp(p, "breakpoint already hit", 22) == 0) { // extract the hit count p += 22; bp.hitCount = strtol(p, &dummy, 10); TRACE(QString("hit count %1").arg(bp.hitCount)); } else if (strncmp(p, "stop only if ", 13) == 0) { // extract condition p += 13; bp.condition = QString::fromLatin1(p, end-p).trimmed(); TRACE("condition: "+bp.condition); } else if (strncmp(p, "ignore next ", 12) == 0) { // extract ignore count p += 12; bp.ignoreCount = strtol(p, &dummy, 10); TRACE(QString("ignore count %1").arg(bp.ignoreCount)); } else { // indeed a continuation bp.location += " " + QString::fromLatin1(p, end-p).trimmed(); } p = end; if (*p != '\0') p++; /* skip '\n' */ } if (brks.empty() || brks.back().id != bp.id) { brks.push_back(bp); } else { // this is a continuation; fill in location if not yet set // otherwise, drop this breakpoint Breakpoint& mbp = brks.back(); if (mbp.location.isEmpty() && !bp.location.isEmpty()) { mbp.location = bp.location; mbp.address = bp.address; } else if (mbp.address.isEmpty() && !bp.address.isEmpty()) { mbp.address = bp.address; } } } return true; } std::list GdbDriver::parseThreadList(const char* output) { std::list threads; if (strcmp(output, "\n") == 0 || strncmp(output, "No stack.", 9) == 0 || strncmp(output, "No threads.", 11) == 0) { // no threads return threads; } bool newFormat = false; const char* p = output; while (*p != '\0') { ThreadInfo thr; // seach look for thread id, watching out for the focus indicator thr.hasFocus = false; while (isspace(*p)) /* may be \n from prev line: see "No stack" below */ p++; // recent GDBs write a header line; skip it if (threads.empty() && strncmp(p, "Id Target", 11) == 0) { p = strchr(p, '\n'); if (p == NULL) break; newFormat = true; continue; // next line please, '\n' is skipped above } if (*p == '*') { thr.hasFocus = true; p++; // there follows only whitespace } const char* end; char *temp_end = NULL; /* we need a non-const 'end' for strtol to use...*/ thr.id = strtol(p, &temp_end, 10); end = temp_end; if (p == end) { // syntax error: no number found; bail out return threads; } p = end; // skip space while (isspace(*p)) p++; /* * Now follows the thread's SYSTAG. */ if (!newFormat) { // In the old format, it is terminated by two blanks. end = strstr(p, " "); if (end == 0) { // syntax error; bail out return threads; } end += 2; } else { // In the new format lies crazyness: there is no definitive // end marker. At best we can guess when the SYSTAG ends. // A typical thread list on Linux looks like this: // // Id Target Id Frame // 2 Thread 0x7ffff7854700 (LWP 10827) "thrserver" 0x00007ffff7928631 in clone () from /lib64/libc.so.6 // * 1 Thread 0x7ffff7fcc700 (LWP 10808) "thrserver" main () at thrserver.c:84 // // Looking at GDB's code, the Target Id ends in tokens that // are bracketed by parentheses or quotes. Therefore, // we skip (at most) two tokens ('Thread' and the address), // and then all parts that are in parentheses or quotes. int n = 0; end = p; while (*end) { if (*end == '"') { skipString(end); n = 2; } else if (*end == '(') { skipNested(end, '(', ')'); n = 2; } else if (n < 2) { while (*end && !isspace(*end)) ++end; ++n; } else { break; } while (isspace(*end)) ++end; } } thr.threadName = QString::fromLatin1(p, end-p).trimmed(); p = end; /* * Now follows a standard stack frame. Sometimes, however, gdb * catches a thread at an instant where it doesn't have a stack. */ if (strncmp(p, "[No stack.]", 11) != 0) { ::parseFrameInfo(p, thr.function, thr.fileName, thr.lineNo, thr.address); } else { thr.function = "[No stack]"; thr.lineNo = -1; p += 11; /* \n is skipped above */ } threads.push_back(thr); } return threads; } static bool parseNewBreakpoint(const char* o, int& id, QString& file, int& lineNo, QString& address); static bool parseNewWatchpoint(const char* o, int& id, QString& expr); bool GdbDriver::parseBreakpoint(const char* output, int& id, QString& file, int& lineNo, QString& address) { // skip lines of that begin with "(Cannot find" while (strncmp(output, "(Cannot find", 12) == 0 || strncmp(output, "Note: breakpoint", 16) == 0) { output = strchr(output, '\n'); if (output == 0) return false; output++; /* skip newline */ } if (strncmp(output, "Breakpoint ", 11) == 0) { output += 11; /* skip "Breakpoint " */ return ::parseNewBreakpoint(output, id, file, lineNo, address); } else if (strncmp(output, "Temporary breakpoint ", 21) == 0) { output += 21; return ::parseNewBreakpoint(output, id, file, lineNo, address); } else if (strncmp(output, "Hardware watchpoint ", 20) == 0) { output += 20; return ::parseNewWatchpoint(output, id, address); } else if (strncmp(output, "Watchpoint ", 11) == 0) { output += 11; return ::parseNewWatchpoint(output, id, address); } return false; } static bool parseNewBreakpoint(const char* o, int& id, QString& file, int& lineNo, QString& address) { // breakpoint id char* p; id = strtoul(o, &p, 10); if (p == o) return false; // check for the address if (strncmp(p, " at 0x", 6) == 0) { char* start = p+4; /* skip " at ", but not 0x */ p += 6; while (isxdigit(*p)) ++p; address = QString::fromLatin1(start, p-start); } /* * Mostly, GDB responds with this syntax: * * Breakpoint 1 at 0x400b94: file multibrkpt.cpp, line 9. (2 locations) * * but sometimes it uses this syntax: * * Breakpoint 4 at 0x804f158: lotto739.cpp:95. (3 locations) */ char* fileEnd, *numStart = 0; char* fileStart = strstr(p, "file "); if (fileStart != 0) { fileStart += 5; fileEnd = strstr(fileStart, ", line "); if (fileEnd != 0) numStart = fileEnd + 7; } if (numStart == 0 && p[0] == ':' && p[1] == ' ') { fileStart = p+2; while (isspace(*fileStart)) ++fileStart; fileEnd = strchr(fileStart, ':'); if (fileEnd != 0) numStart = fileEnd + 1; } if (numStart == 0) return !address.isEmpty(); /* parse error only if there's no address */ QString fileName = QString::fromLatin1(fileStart, fileEnd-fileStart); int line = strtoul(numStart, &p, 10); if (numStart == p) return false; file = fileName; lineNo = line-1; /* zero-based! */ return true; } static bool parseNewWatchpoint(const char* o, int& id, QString& expr) { // watchpoint id char* p; id = strtoul(o, &p, 10); if (p == o) return false; if (strncmp(p, ": ", 2) != 0) return false; p += 2; // all the rest on the line is the expression expr = QString::fromLatin1(p, strlen(p)).trimmed(); return true; } void GdbDriver::parseLocals(const char* output, std::list& newVars) { // check for possible error conditions if (strncmp(output, "No symbol table", 15) == 0) { return; } while (*output != '\0') { while (isspace(*output)) output++; if (*output == '\0') break; // skip occurrences of "No locals" and "No args" if (strncmp(output, "No locals", 9) == 0 || strncmp(output, "No arguments", 12) == 0) { output = strchr(output, '\n'); if (output == 0) { break; } continue; } ExprValue* variable = parseVar(output); if (variable == 0) { break; } // do not add duplicates for (std::list::iterator o = newVars.begin(); o != newVars.end(); ++o) { if ((*o)->m_name == variable->m_name) { delete variable; goto skipDuplicate; } } newVars.push_back(variable); skipDuplicate:; } } ExprValue* GdbDriver::parsePrintExpr(const char* output, bool wantErrorValue) { ExprValue* var = 0; // check for error conditions if (!parseErrorMessage(output, var, wantErrorValue)) { // parse the variable var = parseVar(output); } return var; } bool GdbDriver::parseChangeWD(const char* output, QString& message) { bool isGood = false; message = QString(output).simplified(); if (message.isEmpty()) { message = i18n("New working directory: ") + m_programWD; isGood = true; } return isGood; } bool GdbDriver::parseChangeExecutable(const char* output, QString& message) { message = output; m_haveCoreFile = false; /* * Lines starting with the following do not indicate errors: * Using host libthread_db * (no debugging symbols found) * Reading symbols from */ while (strncmp(output, "Reading symbols from", 20) == 0 || strncmp(output, "done.", 5) == 0 || strncmp(output, "Missing separate debuginfo", 26) == 0 || strncmp(output, "Try: ", 5) == 0 || strncmp(output, "Using host libthread_db", 23) == 0 || strncmp(output, "(no debugging symbols found)", 28) == 0) { // this line is good, go to the next one const char* end = strchr(output, '\n'); if (end == 0) output += strlen(output); else output = end+1; } /* * If we've parsed all lines, there was no error. */ return output[0] == '\0'; } bool GdbDriver::parseCoreFile(const char* output) { // if command succeeded, gdb emits a line starting with "#0 " m_haveCoreFile = strstr(output, "\n#0 ") != 0; return m_haveCoreFile; } uint GdbDriver::parseProgramStopped(const char* output, QString& message) { // optionally: "program changed, rereading symbols", // followed by: // "Program exited normally" // "Program terminated with wignal SIGSEGV" // "Program received signal SIGINT" or other signal // "Breakpoint..." // GDB since 7.3 prints // "[Inferior 1 (process 13400) exited normally]" // "[Inferior 1 (process 14698) exited with code 01]" // go through the output, line by line, checking what we have const char* start = output - 1; uint flags = SFprogramActive; message = QString(); do { start++; /* skip '\n' */ if (strncmp(start, "Program ", 8) == 0 || strncmp(start, "ptrace: ", 8) == 0) { /* * When we receive a signal, the program remains active. * * Special: If we "stopped" in a corefile, the string "Program * terminated with signal"... is displayed. (Normally, we see * "Program received signal"... when a signal happens.) */ if (strncmp(start, "Program exited", 14) == 0 || (strncmp(start, "Program terminated", 18) == 0 && !m_haveCoreFile) || strncmp(start, "ptrace: ", 8) == 0) { flags &= ~SFprogramActive; } // set message const char* endOfMessage = strchr(start, '\n'); if (endOfMessage == 0) endOfMessage = start + strlen(start); message = QString::fromLatin1(start, endOfMessage-start); } else if (strncmp(start, "[Inferior ", 10) == 0) { const char* p = start + 10; // skip number and space while (*p && !isspace(*p)) ++p; while (isspace(*p)) ++p; if (*p == '(') { skipNested(p, '(', ')'); if (strncmp(p, " exited ", 8) == 0) { flags &= ~SFprogramActive; // set message const char* end = strchr(p, '\n'); if (end == 0) end = p + strlen(p); // strip [] from the message message = QString::fromLatin1(start+1, end-start-2); } } } else if (strncmp(start, "Breakpoint ", 11) == 0) { /* * We stopped at a (permanent) breakpoint (gdb doesn't tell us * that it stopped at a temporary breakpoint). */ flags |= SFrefreshBreak; } else if (strstr(start, "re-reading symbols.") != 0) { flags |= SFrefreshSource; } // next line, please start = strchr(start, '\n'); } while (start != 0); /* * Gdb only notices when new threads have appeared, but not when a * thread finishes. So we always have to assume that the list of * threads has changed. */ flags |= SFrefreshThreads; return flags; } QStringList GdbDriver::parseSharedLibs(const char* output) { QStringList shlibs; if (strncmp(output, "No shared libraries loaded", 26) == 0) return shlibs; // parse the table of shared libraries // strip off head line output = strchr(output, '\n'); if (output == 0) return shlibs; output++; /* skip '\n' */ QString shlibName; while (*output != '\0') { // format of a line is // 0x404c5000 0x40580d90 Yes /lib/libc.so.5 // 3 blocks of non-space followed by space for (int i = 0; *output != '\0' && i < 3; i++) { while (*output != '\0' && !isspace(*output)) { /* non-space */ output++; } while (isspace(*output)) { /* space */ output++; } } if (*output == '\0') return shlibs; const char* start = output; output = strchr(output, '\n'); if (output == 0) output = start + strlen(start); shlibName = QString::fromLatin1(start, output-start); if (*output != '\0') output++; shlibs.append(shlibName); TRACE("found shared lib " + shlibName); } return shlibs; } bool GdbDriver::parseFindType(const char* output, QString& type) { if (strncmp(output, "type = ", 7) != 0) return false; /* * Everything else is the type. We strip off any leading "const" and any * trailing "&" on the grounds that neither affects the decoding of the * object. We also strip off all white-space from the type. */ output += 7; if (strncmp(output, "const ", 6) == 0) output += 6; type = output; type.replace(QRegExp("\\s+"), ""); if (type.endsWith("&")) type.truncate(type.length() - 1); return true; } std::list GdbDriver::parseRegisters(const char* output) { std::list regs; if (strncmp(output, "The program has no registers now", 32) == 0) { return regs; } // parse register values while (*output != '\0') { RegisterInfo reg; // skip space at the start of the line while (isspace(*output)) output++; // register name const char* start = output; while (*output != '\0' && !isspace(*output)) output++; if (*output == '\0') break; reg.regName = QString::fromLatin1(start, output-start); // skip space while (isspace(*output)) output++; QString value; /* * If we find a brace now, this is a vector register. We look for * the closing brace and treat the result as cooked value. */ if (*output == '{') { start = output; skipNested(output, '{', '}'); value = QString::fromLatin1(start, output-start).simplified(); // skip space, but not the end of line while (isspace(*output) && *output != '\n') output++; // get rid of the braces at the begining and the end value.remove(0, 1); if (value[value.length()-1] == '}') { value = value.left(value.length()-1); } // gdb 5.3 doesn't print a separate set of raw values if (*output == '{') { // another set of vector follows // what we have so far is the raw value reg.rawValue = value; start = output; skipNested(output, '{', '}'); value = QString::fromLatin1(start, output-start).simplified(); } else { // for gdb 5.3 // find first type that does not have an array, this is the RAW value const char* end=start; findEnd(end); const char* cur=start; while (cur= 0) { reg.cookedValue = value.left(pos); reg.rawValue = value.mid(pos+6); if (reg.rawValue.right(1) == ")") // remove closing bracket reg.rawValue.truncate(reg.rawValue.length()-1); } else { /* * In other cases we split off the first token (separated by * whitespace). It is the raw value. The remainder of the line * is the cooked value. */ int pos = value.indexOf(' '); if (pos < 0) { reg.rawValue = value; reg.cookedValue = QString(); } else { reg.rawValue = value.left(pos); reg.cookedValue = value.mid(pos+1); } } } if (*output != '\0') output++; /* skip '\n' */ regs.push_back(reg); } return regs; } bool GdbDriver::parseInfoLine(const char* output, QString& addrFrom, QString& addrTo) { // "is at address" or "starts at address" const char* start = strstr(output, "s at address "); if (start == 0) return false; start += 13; const char* p = start; while (*p != '\0' && !isspace(*p)) p++; addrFrom = QString::fromLatin1(start, p-start); start = strstr(p, "and ends at "); if (start == 0) { addrTo = addrFrom; return true; } start += 12; p = start; while (*p != '\0' && !isspace(*p)) p++; addrTo = QString::fromLatin1(start, p-start); return true; } std::list GdbDriver::parseDisassemble(const char* output) { std::list code; if (strncmp(output, "Dump of assembler", 17) != 0) { // error message? DisassembledCode c; c.code = output; code.push_back(c); return code; } // remove first line const char* p = strchr(output, '\n'); if (p == 0) return code; /* not a regular output */ p++; // remove last line const char* end = strstr(output, "End of assembler"); if (end == 0) end = p + strlen(p); // remove function offsets from the lines while (p != end) { DisassembledCode c; // skip initial space or PC pointer ("=>", since gdb 7.1) while (p != end) { if (isspace(*p)) ++p; else if (p[0] == '=' && p[1] == '>') p += 2; else break; } const char* start = p; // address while (p != end && !isspace(*p)) p++; c.address = QString::fromLatin1(start, p-start); // function name (enclosed in '<>', followed by ':') while (p != end && *p != '<') p++; if (*p == '<') skipNestedAngles(p); if (*p == ':') p++; // space until code while (p != end && isspace(*p)) p++; // code until end of line start = p; while (p != end && *p != '\n') p++; if (p != end) /* include '\n' */ p++; c.code = QString::fromLatin1(start, p-start); code.push_back(c); } return code; } QString GdbDriver::parseMemoryDump(const char* output, std::list& memdump) { if (isErrorExpr(output)) { // error; strip space QString msg = output; return msg.trimmed(); } const char* p = output; /* save typing */ // the address while (*p != 0) { MemoryDump md; const char* start = p; while (*p != '\0' && *p != ':' && !isspace(*p)) p++; md.address = QString::fromLatin1(start, p-start); if (*p != ':') { // parse function offset while (isspace(*p)) p++; start = p; while (*p != '\0' && !(*p == ':' && isspace(p[1]))) p++; md.address.fnoffs = QString::fromLatin1(start, p-start); } if (*p == ':') p++; // skip space; this may skip a new-line char! while (isspace(*p)) p++; // everything to the end of the line is the memory dump const char* end = strchr(p, '\n'); if (end != 0) { md.dump = QString::fromLatin1(p, end-p); p = end+1; } else { md.dump = QString::fromLatin1(p, strlen(p)); p += strlen(p); } memdump.push_back(md); } return QString(); } QString GdbDriver::editableValue(VarTree* value) { QByteArray ba = value->value().toLatin1(); const char* s = ba.constData(); // if the variable is a pointer value that contains a cast, // remove the cast if (*s == '(') { skipNested(s, '(', ')'); // skip space while (isspace(*s)) ++s; } repeat: const char* start = s; if (strncmp(s, "0x", 2) == 0) { s += 2; while (isxdigit(*s)) ++s; /* * What we saw so far might have been a reference. If so, edit the * referenced value. Otherwise, edit the pointer. */ if (*s == ':') { // a reference ++s; goto repeat; } // a pointer // if it's a pointer to a string, remove the string const char* end = s; while (isspace(*s)) ++s; if (*s == '"') { // a string return QString::fromLatin1(start, end-start); } else { // other pointer return QString::fromLatin1(start, strlen(start)); } } // else leave it unchanged (or stripped of the reference preamble) return s; } QString GdbDriver::parseSetVariable(const char* output) { // if there is any output, it is an error message QString msg = output; return msg.trimmed(); } #include "gdbdriver.moc" kdbg-2.5.5/kdbg/gdbdriver.h000066400000000000000000000100571247243200200154610ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef GDBDRIVER_H #define GDBDRIVER_H #include "dbgdriver.h" class GdbDriver : public DebuggerDriver { Q_OBJECT public: GdbDriver(); ~GdbDriver(); virtual QString driverName() const; virtual QString defaultInvocation() const; virtual QStringList boolOptionList() const; void setDefaultInvocation(QString cmd) { m_defaultCmd = cmd; } static QString defaultGdb(); virtual bool startup(QString cmdStr); virtual void commandFinished(CmdQueueItem* cmd); virtual CmdQueueItem* executeCmd(DbgCommand, bool clearLow = false); virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg, bool clearLow = false); virtual CmdQueueItem* executeCmd(DbgCommand, int intArg, bool clearLow = false); virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg, int intArg, bool clearLow = false); virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg1, QString strArg2, bool clearLow = false); virtual CmdQueueItem* executeCmd(DbgCommand, int intArg1, int intArg2, bool clearLow = false); virtual CmdQueueItem* queueCmd(DbgCommand, QueueMode mode); virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg, QueueMode mode); virtual CmdQueueItem* queueCmd(DbgCommand, int intArg, QueueMode mode); virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg, int intArg, QueueMode mode); virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg1, QString strArg2, QueueMode mode); virtual void terminate(); virtual void detachAndTerminate(); virtual void interruptInferior(); virtual void setPrintQStringDataCmd(const char* cmd); virtual ExprValue* parseQCharArray(const char* output, bool wantErrorValue, bool qt3like); virtual void parseBackTrace(const char* output, std::list& stack); virtual bool parseFrameChange(const char* output, int& frameNo, QString& file, int& lineNo, DbgAddr& address); virtual bool parseBreakList(const char* output, std::list& brks); virtual std::list parseThreadList(const char* output); virtual bool parseBreakpoint(const char* output, int& id, QString& file, int& lineNo, QString& address); virtual void parseLocals(const char* output, std::list& newVars); virtual ExprValue* parsePrintExpr(const char* output, bool wantErrorValue); virtual bool parseChangeWD(const char* output, QString& message); virtual bool parseChangeExecutable(const char* output, QString& message); virtual bool parseCoreFile(const char* output); virtual uint parseProgramStopped(const char* output, QString& message); virtual QStringList parseSharedLibs(const char* output); virtual bool parseFindType(const char* output, QString& type); virtual std::list parseRegisters(const char* output); virtual bool parseInfoLine(const char* output, QString& addrFrom, QString& addrTo); virtual std::list parseDisassemble(const char* output); virtual QString parseMemoryDump(const char* output, std::list& memdump); virtual QString parseSetVariable(const char* output); virtual QString editableValue(VarTree* value); protected: QString m_programWD; /* just an intermediate storage */ QString m_redirect; /* redirection to /dev/null */ bool m_haveCoreFile; QString m_defaultCmd; /* how to invoke gdb */ QString makeCmdString(DbgCommand cmd, QString strArg); QString makeCmdString(DbgCommand cmd, int intArg); QString makeCmdString(DbgCommand cmd, QString strArg, int intArg); QString makeCmdString(DbgCommand cmd, QString strArg1, QString strArg2); QString makeCmdString(DbgCommand cmd, int intArg1, int intArg2); virtual int findPrompt(const QByteArray& output) const; void parseMarker(CmdQueueItem* cmd); }; #endif // GDBDRIVER_H kdbg-2.5.5/kdbg/kdbg.desktop000066400000000000000000000023371247243200200156440ustar00rootroot00000000000000[Desktop Entry] Exec=kdbg -caption "%c" %i Icon=kdbg Type=Application X-DocPath=kdbg/index.html Name=KDbg GenericName=Debugger GenericName[br]=Dizraener GenericName[da]=Afluser GenericName[es]=Depurador GenericName[fi]=Debuggeri GenericName[fr]=D矇bogueur GenericName[is]=Afl繳sun GenericName[no]=Avluser GenericName[pt]=Depurador GenericName[pt_BR]=Depurador GenericName[ro]=Depanator GenericName[ru]=郅訄迡邽郕 GenericName[sk]=Ladiaci program GenericName[sl]=Razhro禳evalnik GenericName[sv]=Avlusare Comment=Debug programs Comment[br]=Goulevio羅 dizraena簽 Comment[ca]=Programes per localitzaci籀 d'errors Comment[cs]=Lad穩d穩 program Comment[da]=Afluseprogrammer Comment[de]=Programme debuggen Comment[es]=Depurador de programas Comment[fi]=Tutki ohjelmien toimintaa Comment[fr]=D矇boguer un programme Comment[is]=kdbg: Forrit til a afl繳sa 繹nnur forrit Comment[no]=Avluse programmer Comment[pl]=Program do debugowania Comment[pt]=Depurador de programas Comment[pt_BR]=Depurador de programas Comment[ro]=Depanator de programe Comment[ru]=郅訄迠邽赲訄迮 郈郋迣訄邾邾 Comment[sk]=Ladiaci program Comment[sl]=Odpravljanje napak v programih Comment[sv]=Avlusar program Terminal=false Categories=Qt;KDE;Development;Debugger; kdbg-2.5.5/kdbg/kdbgrc000066400000000000000000000012141247243200200145120ustar00rootroot00000000000000[MainWindow] State=AAAA/wAAAAD9AAAAAgAAAAEAAAFaAAABUfwCAAAAAfsAAAAMAEwAbwBjAGEAbABzAQAAAEcAAAFRAAAAYQD///8AAAADAAADdwAAAR38AQAAAAL8AAAAAAAAAhsAAADFAP////oAAAAAAQAAAAX7AAAACgBTAHQAYQBjAGsBAAAAAP////8AAABIAP////sAAAAWAEIAcgBlAGEAawBwAG8AaQBuAHQAcwEAAAAA/////wAAAMUA////+wAAAAwATwB1AHQAcAB1AHQBAAAAAP////8AAABIAP////sAAAAMAE0AZQBtAG8AcgB5AQAAAAD/////AAAAbAD////7AAAAEgBSAGUAZwBpAHMAdABlAHIAcwEAAAAA/////wAAAEgA/////AAAAh4AAAFZAAAAmwD////6AAAAAAEAAAAC+wAAAA4AVwBhAHQAYwBoAGUAcwEAAAAA/////wAAAJsA////+wAAAA4AVABoAHIAZQBhAGQAcwEAAAIeAAABWQAAAGwA////AAACGgAAAVEAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAACAAAAAQAAABYAbQBhAGkAbgBUAG8AbwBsAEIAYQByAQAAAAAAAAN3AAAAAAAAAAA= kdbg-2.5.5/kdbg/kdbgui.rc000066400000000000000000000051371247243200200151360ustar00rootroot00000000000000 &File &View E&xecution &Breakpoint &Settings kdbg-2.5.5/kdbg/main.cpp000066400000000000000000000073331247243200200147730ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include #include /* i18n */ #include #include #include #include #include #include "dbgmainwnd.h" #include "typetable.h" #include "version.h" #include /* getenv(3) */ #include "mydebug.h" int main(int argc, char** argv) { KAboutData aboutData("kdbg", "kdbg", ki18n("KDbg"), KDBG_VERSION, ki18n("A Debugger"), KAboutData::License_GPL, ki18n("(c) 1998-2015 Johannes Sixt"), KLocalizedString(), /* any text */ "http://www.kdbg.org/", "j6t@kdbg.org"); aboutData.addAuthor(ki18n("Johannes Sixt"), KLocalizedString(), "j6t@kdbg.org"); aboutData.addCredit(ki18n("Keith Isdale"), ki18n("XSLT debugging"), "k_isdale@tpg.com.au"); aboutData.addCredit(ki18n("Daniel Kristjansson"), ki18n("Register groups and formatting"), "danielk@cat.nyu.edu"); aboutData.addCredit(ki18n("David Edmundson"), ki18n("KDE4 porting"), "david@davidedmundson.co.uk"); KCmdLineArgs::init( argc, argv, &aboutData ); KCmdLineOptions opts; opts.add("t ", ki18n("transcript of conversation with the debugger")); opts.add("r ", ki18n("remote debugging via ")); opts.add("l ", ki18n("specify language: C, XSLT")); opts.add("x", ki18n("use language XSLT (deprecated)")); opts.add("a ", ki18n("specify arguments of debugged executable")); opts.add("p ", ki18n("specify PID of process to debug")); opts.add("+[program]", ki18n("path of executable to debug")); opts.add("+[core]", ki18n("a core file to use")); KCmdLineArgs::addCmdLineOptions(opts); KApplication app; KGlobal::dirs()->addResourceType("types", "data", "kdbg/types"); KGlobal::dirs()->addResourceType("sessions", "data", "kdbg/sessions"); DebuggerMainWnd* debugger = new DebuggerMainWnd; debugger->setObjectName("mainwindow"); /* type libraries */ TypeTable::initTypeLibraries(); // session management bool restored = false; if (app.isSessionRestored()) { if (KMainWindow::canBeRestored(1)) { debugger->restore(1); restored = true; } } debugger->show(); // handle options KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); QString transcript = args->getOption("t"); QString remote = args->getOption("r"); if (!remote.isEmpty()) debugger->setRemoteDevice(remote); QString lang = args->getOption("l"); // deprecated option; overrides -l if (args->isSet("x")){ /* run in xsldbg mode */ lang = "xslt"; } // check environment variable for transcript file name if (transcript.isEmpty()) { transcript = getenv("KDBG_TRANSCRIPT"); } debugger->setTranscript(transcript); QString pid = args->getOption("p"); QString programArgs = args->getOption("a"); if (!restored && args->count() > 0) { // attach to process? if (!pid.isEmpty()) { TRACE("pid: " + pid); debugger->setAttachPid(pid); } // check for core file; use it only if we're not attaching to a process else if (args->count() > 1 && pid.isEmpty()) { debugger->setCoreFile(args->arg(1)); } if (!debugger->debugProgram(args->arg(0), lang)) { // failed TRACE("cannot start debugger"); KMessageBox::error(debugger, i18n("Cannot start debugger.")); debugger->setCoreFile(QString()); debugger->setAttachPid(QString()); } else { if (!programArgs.isEmpty()) { debugger->overrideProgramArguments(programArgs); } } } int rc = app.exec(); return rc; } kdbg-2.5.5/kdbg/memwindow.cpp000066400000000000000000000202271247243200200160520ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "memwindow.h" #include #include #include #include #include #include #include "debugger.h" MemoryWindow::MemoryWindow(QWidget* parent) : QWidget(parent), m_debugger(0), m_expression(this), m_memory(this), m_layout(QBoxLayout::TopToBottom, this), m_format(MDTword | MDThex) { m_expression.setEditable(true); QSize minSize = m_expression.sizeHint(); m_expression.setMinimumSize(minSize); m_expression.setInsertPolicy(QComboBox::NoInsert); m_expression.setMaxCount(15); m_memory.setColumnCount(9); m_memory.setHeaderLabel(i18n("Address")); for (int i = 1; i < 9; i++) { m_memory.hideColumn(i); m_memory.header()->setResizeMode(QHeaderView::ResizeToContents); m_memory.headerItem()->setText(i, QString()); } m_memory.header()->setStretchLastSection(false); m_memory.setSortingEnabled(false); /* don't sort */ m_memory.setAllColumnsShowFocus(true); m_memory.setRootIsDecorated(false); m_memory.header()->setClickable(false); m_memory.setContextMenuPolicy(Qt::NoContextMenu); // defer to parent // create layout m_layout.setSpacing(2); m_layout.addWidget(&m_expression, 0); m_layout.addWidget(&m_memory, 10); m_layout.activate(); connect(&m_expression, SIGNAL(activated(const QString&)), this, SLOT(slotNewExpression(const QString&))); connect(m_expression.lineEdit(), SIGNAL(returnPressed()), this, SLOT(slotNewExpression())); // the popup menu QAction* pAction; pAction = m_popup.addAction(i18n("B&ytes")); pAction->setData(MDTbyte); pAction = m_popup.addAction(i18n("Halfwords (&2 Bytes)")); pAction->setData(MDThalfword); pAction = m_popup.addAction(i18n("Words (&4 Bytes)")); pAction->setData(MDTword); pAction = m_popup.addAction(i18n("Giantwords (&8 Bytes)")); pAction->setData(MDTgiantword); m_popup.addSeparator(); pAction = m_popup.addAction(i18n("He&xadecimal")); pAction->setData(MDThex); pAction = m_popup.addAction(i18n("Signed &decimal")); pAction->setData(MDTsigned); pAction = m_popup.addAction(i18n("&Unsigned decimal")); pAction->setData(MDTunsigned); pAction = m_popup.addAction(i18n("&Octal")); pAction->setData(MDToctal); pAction = m_popup.addAction(i18n("&Binary")); pAction->setData(MDTbinary); pAction = m_popup.addAction(i18n("&Addresses")); pAction->setData(MDTaddress); pAction = m_popup.addAction(i18n("&Character")); pAction->setData(MDTchar); pAction = m_popup.addAction(i18n("&Floatingpoint")); pAction->setData(MDTfloat); pAction = m_popup.addAction(i18n("&Strings")); pAction->setData(MDTstring); pAction = m_popup.addAction(i18n("&Instructions")); pAction->setData(MDTinsn); connect(&m_popup, SIGNAL(triggered(QAction*)), this, SLOT(slotTypeChange(QAction*))); } MemoryWindow::~MemoryWindow() { } void MemoryWindow::contextMenuEvent(QContextMenuEvent* ev) { m_popup.popup(ev->globalPos()); ev->accept(); } void MemoryWindow::slotNewExpression() { slotNewExpression(m_expression.lineEdit()->text()); } void MemoryWindow::slotNewExpression(const QString& newText) { QString text = newText.simplified(); // see if the string is in the list // (note: must count downwards because of removeItem!) for (int i = m_expression.count()-1; i >= 0; i--) { if (m_expression.itemText(i) == text) { // yes it is! // look up the format that was used last time for this expr QMap::iterator pFormat = m_formatCache.find(text); if (pFormat != m_formatCache.end()) { m_format = *pFormat; m_debugger->setMemoryFormat(m_format); } // remove this text, will be inserted at the top m_expression.removeItem(i); } } m_expression.insertItem(0, text); if (!text.isEmpty()) { m_formatCache[text] = m_format; } displayNewExpression(text); } void MemoryWindow::displayNewExpression(const QString& expr) { m_debugger->setMemoryExpression(expr); m_expression.setEditText(expr); // clear memory dump if no dump wanted if (expr.isEmpty()) { m_memory.clear(); m_old_memory.clear(); } } void MemoryWindow::slotTypeChange(QAction* action) { int id = action->data().toInt(); m_old_memory.clear(); // compute new type if (id & MDTsizemask) m_format = (m_format & ~MDTsizemask) | id; if (id & MDTformatmask) m_format = (m_format & ~MDTformatmask) | id; m_debugger->setMemoryFormat(m_format); // change the format in the cache QString expr = m_expression.currentText(); m_formatCache[expr.simplified()] = m_format; // force redisplay displayNewExpression(expr); } void MemoryWindow::slotNewMemoryDump(const QString& msg, const std::list& memdump) { m_memory.clear(); if (!msg.isEmpty()) { new QTreeWidgetItem(&m_memory, QStringList() << QString() << msg); return; } std::list::const_iterator md = memdump.begin(); // show only needed columns QStringList sl = md->dump.split( "\t" ); for (int i = m_memory.columnCount()-1; i > 0; i--) m_memory.setColumnHidden(i, i > sl.count()); QMap tmpMap; for (; md != memdump.end(); ++md) { QString addr = md->address.asString() + " " + md->address.fnoffs; QStringList sl = md->dump.split( "\t" ); // save memory tmpMap[addr] = md->dump; QTreeWidgetItem* line = new QTreeWidgetItem(&m_memory, QStringList(addr) << sl); QStringList tmplist; QMap::Iterator pos = m_old_memory.find( addr ); if( pos != m_old_memory.end() ) tmplist = pos.value().split( "\t" ); for (int i = 0; i < sl.count(); i++) { bool changed = i < tmplist.count() && sl[i] != tmplist[i]; line->setForeground(i+1, changed ? QBrush(QColor(Qt::red)) : palette().text()); } } m_old_memory.clear(); m_old_memory = tmpMap; } static const char MemoryGroup[] = "Memory"; static const char NumExprs[] = "NumExprs"; static const char ExpressionFmt[] = "Expression%d"; static const char FormatFmt[] = "Format%d"; static const char ColumnWidths[] = "ColumnWidths"; void MemoryWindow::saveProgramSpecific(KConfigBase* config) { KConfigGroup g = config->group(MemoryGroup); int numEntries = m_expression.count(); g.writeEntry(NumExprs, numEntries); QString exprEntry; QString fmtEntry; for (int i = 0; i < numEntries;) { QString text = m_expression.itemText(i); i++; /* entries are counted 1-based */ exprEntry.sprintf(ExpressionFmt, i); fmtEntry.sprintf(FormatFmt, i); g.writeEntry(exprEntry, text); QMap::iterator pFormat = m_formatCache.find(text); unsigned fmt = pFormat != m_formatCache.end() ? *pFormat : MDTword | MDThex; g.writeEntry(fmtEntry, fmt); } // column widths QList widths; for (int i = 0; i < 2; i++) { int w = m_memory.columnWidth(i); widths.append(w); } g.writeEntry(ColumnWidths, widths); } void MemoryWindow::restoreProgramSpecific(KConfigBase* config) { KConfigGroup g = config->group(MemoryGroup); int numEntries = g.readEntry(NumExprs, 0); m_expression.clear(); QString exprEntry; QString fmtEntry; // entries are counted 1-based for (int i = 1; i <= numEntries; i++) { exprEntry.sprintf(ExpressionFmt, i); fmtEntry.sprintf(FormatFmt, i); QString expr = g.readEntry(exprEntry, QString()); unsigned fmt = g.readEntry(fmtEntry, MDTword | MDThex); m_expression.addItem(expr); m_formatCache[expr] = fmt & (MDTsizemask | MDTformatmask); } // initialize with top expression if (numEntries > 0) { m_expression.setCurrentIndex(0); QString expr = m_expression.itemText(0); m_format = m_formatCache[expr]; m_debugger->setMemoryFormat(m_format); displayNewExpression(expr); } // column widths QList widths = g.readEntry(ColumnWidths, QList()); QList::iterator w = widths.begin(); for (int i = 0; i < 2 && w != widths.end(); ++i, ++w) { m_memory.setColumnWidth(i, *w); } } #include "memwindow.moc" kdbg-2.5.5/kdbg/memwindow.h000066400000000000000000000023351247243200200155170ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef MEMWINDOW_H #define MEMWINDOW_H #include #include #include #include #include #include "dbgdriver.h" class KDebugger; class KConfigBase; class MemoryWindow : public QWidget { Q_OBJECT public: MemoryWindow(QWidget* parent); ~MemoryWindow(); void setDebugger(KDebugger* deb) { m_debugger = deb; } protected: KDebugger* m_debugger; QComboBox m_expression; QTreeWidget m_memory; QMap m_old_memory; QBoxLayout m_layout; unsigned m_format; QMap m_formatCache; QMenu m_popup; virtual void contextMenuEvent(QContextMenuEvent* ev); void displayNewExpression(const QString& expr); public slots: void slotNewExpression(const QString&); void slotNewExpression(); void slotTypeChange(QAction*); void slotNewMemoryDump(const QString&, const std::list&); void saveProgramSpecific(KConfigBase* config); void restoreProgramSpecific(KConfigBase* config); }; #endif // MEMWINDOW_H kdbg-2.5.5/kdbg/mydebug.h000066400000000000000000000010011247243200200151320ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include #include #include "config.h" #ifdef ASSERT #undef ASSERT #endif #ifdef NDEBUG # define ASSERT(x) do {} while (0) #else # define ASSERT(x) kDebug(!(x)) << "assertion failed: " #x "\n" #endif #ifdef WANT_TRACE_OUTPUT # define TRACE(x) kDebug() << (x) #else # define TRACE(x) do {} while (0) #endif kdbg-2.5.5/kdbg/pgmargs.cpp000066400000000000000000000126721247243200200155110ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "pgmargs.h" #include #include /* i18n */ #include "mydebug.h" PgmArgs::PgmArgs(QWidget* parent, const QString& pgm, const std::map& envVars, const QStringList& allOptions) : QDialog(parent) { setupUi(this); { QFileInfo fi = pgm; QString newText = labelArgs->text().arg(fi.fileName()); labelArgs->setText(newText); } // add options only if the option list is non-empty if (!allOptions.isEmpty()) { xsldbgOptions->addItems(allOptions); } else { delete xsldbgOptionsPage; xsldbgOptionsPage = 0; } EnvVar val; val.status = EnvVar::EVclean; for (std::map::const_iterator i = envVars.begin(); i != envVars.end(); ++i) { val.value = i->second; val.item = new QTreeWidgetItem(envList, QStringList() << i->first << i->second); m_envVars[i->first] = val; } envList->setAllColumnsShowFocus(true); buttonDelete->setEnabled(envList->currentItem() != 0); } PgmArgs::~PgmArgs() { } // initializes the selected options void PgmArgs::setOptions(const QSet& selectedOptions) { if (xsldbgOptionsPage == 0) return; for (int i = 0; i < xsldbgOptions->count(); i++) { if (selectedOptions.contains(xsldbgOptions->item(i)->text())) { xsldbgOptions->item(i)->setSelected(true); } } } // returns the selected options QSet PgmArgs::options() const { QSet sel; if (xsldbgOptionsPage != 0) { for (int i = 0; i < xsldbgOptions->count(); i++) { if (xsldbgOptions->item(i)->isSelected()) sel.insert(xsldbgOptions->item(i)->text()); } } return sel; } // this is a slot void PgmArgs::on_buttonModify_clicked() { modifyVar(true); // re-add deleted entries } void PgmArgs::modifyVar(bool resurrect) { QString name, value; parseEnvInput(name, value); if (name.isEmpty() || name.indexOf(' ') >= 0) // disallow spaces in names return; // lookup the value in the dictionary EnvVar* val; std::map::iterator i = m_envVars.find(name); if (i != m_envVars.end()) { val = &i->second; // see if this is a zombie if (val->status == EnvVar::EVdeleted) { // resurrect if (resurrect) { val->value = value; val->status = EnvVar::EVdirty; val->item = new QTreeWidgetItem(envList, QStringList() << name << value); } } else if (value != val->value) { // change the value val->value = value; val->status = EnvVar::EVdirty; val->item->setText(1, value); } } else { // add the value val = &m_envVars[name]; val->value = value; val->status = EnvVar::EVnew; val->item = new QTreeWidgetItem(envList, QStringList() << name << value); } envList->setCurrentItem(val->item); buttonDelete->setEnabled(true); } // delete the selected item void PgmArgs::on_buttonDelete_clicked() { QTreeWidgetItem* item = envList->currentItem(); if (item == 0) return; QString name = item->text(0); // lookup the value in the dictionary std::map::iterator i = m_envVars.find(name); if (i != m_envVars.end()) { EnvVar* val = &i->second; // delete from list val->item = 0; // if this is a new item, delete it completely, otherwise zombie-ize it if (val->status == EnvVar::EVnew) { m_envVars.erase(i); } else { // mark value deleted val->status = EnvVar::EVdeleted; } } delete item; // there is no selected item anymore buttonDelete->setEnabled(false); } void PgmArgs::parseEnvInput(QString& name, QString& value) { // parse input from edit field QString input = envVar->text(); int equalSign = input.indexOf('='); if (equalSign >= 0) { name = input.left(equalSign).trimmed(); value = input.mid(equalSign+1); } else { name = input.trimmed(); value = QString(); /* value is empty */ } } void PgmArgs::on_envList_currentItemChanged() { QTreeWidgetItem* item = envList->currentItem(); buttonDelete->setEnabled(item != 0); if (item == 0) return; // must get name from list box QString name = item->text(0); envVar->setText(name + "=" + m_envVars[name].value); } void PgmArgs::accept() { // simulate that the Modify button was pressed, but don't revive // dead entries even if the user changed the edit box modifyVar(false); QDialog::accept(); } void PgmArgs::on_wdBrowse_clicked() { // browse for the working directory QString newDir = KFileDialog::getExistingDirectory(wd(), this); if (!newDir.isEmpty()) { setWd(newDir); } } void PgmArgs::on_insertFile_clicked() { QString caption = i18n("Select a file name to insert as program argument"); // use the selection as default QString f = programArgs->selectedText(); f = KFileDialog::getSaveFileName(f, QString::null, this, caption); // don't clear the selection if no file was selected if (!f.isEmpty()) { programArgs->insert(f); } } void PgmArgs::on_insertDir_clicked() { QString caption = i18n("Select a directory to insert as program argument"); // use the selection as default QString f = programArgs->selectedText(); f = KFileDialog::getExistingDirectory(f, this, caption); // don't clear the selection if no file was selected if (!f.isEmpty()) { programArgs->insert(f); } } #include "pgmargs.moc" kdbg-2.5.5/kdbg/pgmargs.h000066400000000000000000000026151247243200200151520ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef PgmArgs_included #define PgmArgs_included #include "ui_pgmargsbase.h" #include #include #include #include "envvar.h" class QStringList; class PgmArgs : public QDialog, private Ui::PgmArgsBase { Q_OBJECT public: PgmArgs(QWidget* parent, const QString& pgm, const std::map& envVars, const QStringList& allOptions); virtual ~PgmArgs(); void setArgs(const QString& text) { programArgs->setText(text); } QString args() const { return programArgs->text(); } void setOptions(const QSet& selectedOptions); QSet options() const; void setWd(const QString& wd) { wdEdit->setText(wd); } QString wd() const { return wdEdit->text(); } const std::map& envVars() { return m_envVars; } protected: std::map m_envVars; void parseEnvInput(QString& name, QString& value); void modifyVar(bool resurrect); virtual void accept(); protected slots: void on_buttonModify_clicked(); void on_buttonDelete_clicked(); void on_envList_currentItemChanged(); void on_wdBrowse_clicked(); void on_insertFile_clicked(); void on_insertDir_clicked(); }; #endif // PgmArgs_included kdbg-2.5.5/kdbg/pgmargsbase.ui000066400000000000000000000301551247243200200161730ustar00rootroot00000000000000 PgmArgsBase 0 0 528 410 Program Arguments true 0 &Arguments Run <i>%1</i> with these arguments: false programArgs Specify the arguments with which the program shall be invoked for this debugging session. You specify the arguments just as you would on the command line, that is, you can even use quotes and environment variables, for example:<p><tt>--message 'start in: ' $HOME</tt> Browse for a file; the full path name will be inserted at the current cursor location in the edit box above. Insert &file name... Alt+F Browse for a directory; the full path name will be inserted at the current cursor location in the edit box above. Insert &directory name... Alt+D Qt::Horizontal QSizePolicy::Expanding 61 20 Qt::Vertical QSizePolicy::Expanding 81 180 &Working Directory Specify here the initial working directory where the program is run. Browse for the initial working directory where the program is run. &Browse... Alt+B Qt::Horizontal QSizePolicy::Expanding 321 31 Qt::Vertical QSizePolicy::Expanding 111 161 &Environment Environment variables (<tt>NAME=value</tt>): false envVar To add a new environment variable or to modify one, specify it here in the form <tt>NAME=value</tt> and click <b>Modify</b>. Environment variables that are set <i>in addition</i> to those that are inherited are listed in this table. To add new environment variables, specify them as <tt>NAME=value</tt> in the edit box above and click <b>Modify</b>. To modify a value, select it in this list and click <b>Modify</b>. To delete an environment variable, select it in this list and click <b>Delete</b>. false false true Name Value Enters the environment variable that is currently specified in the edit box into the list. If the named variable is already in the list, it receives a new value; otherwise, a new entry is created. &Modify Alt+M Deletes the selected environment variable from the list. This cannot be used to delete environment variables that are inherited. &Delete Alt+D Qt::Vertical QSizePolicy::Expanding 51 141 &xsldbg Options QAbstractItemView::MultiSelection QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource KDialogButtonBox QDialogButtonBox
kdialogbuttonbox.h
tabWidget programArgs insertFile insertDir wdEdit wdBrowse envVar buttonModify buttonDelete envList xsldbgOptions kdialogbuttonbox accepted() PgmArgsBase accept() 440 575 440 591 kdialogbuttonbox rejected() PgmArgsBase reject() 521 580 549 588
kdbg-2.5.5/kdbg/pgmsettings.cpp000066400000000000000000000052271247243200200164130ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "pgmsettings.h" #include /* i18n */ #include #include #include #include #include #include #include #include "mydebug.h" ChooseDriver::ChooseDriver(QWidget* parent) : QWidget(parent) { QVBoxLayout* layout = new QVBoxLayout(this); QLabel* label = new QLabel(this); label->setText(i18n("How to invoke &GDB - leave empty to use\n" "the default from the global options:")); label->setMinimumSize(label->sizeHint()); layout->addWidget(label); m_debuggerCmd = new QLineEdit(this); m_debuggerCmd->setMinimumSize(m_debuggerCmd->sizeHint()); layout->addWidget(m_debuggerCmd); label->setBuddy(m_debuggerCmd); layout->addStretch(); this->setLayout(layout); } void ChooseDriver::setDebuggerCmd(const QString& cmd) { m_debuggerCmd->setText(cmd); } QString ChooseDriver::debuggerCmd() const { return m_debuggerCmd->text(); } OutputSettings::OutputSettings(QWidget* parent) : QWidget(parent) { m_group = new QButtonGroup(this); QVBoxLayout* layout = new QVBoxLayout(this); QRadioButton* btn; btn = new QRadioButton(i18n("&No input and output"), this); m_group->addButton(btn, 0); layout->addWidget(btn); btn = new QRadioButton(i18n("&Only output, simple terminal emulation"), this); m_group->addButton(btn, 1); layout->addWidget(btn); btn = new QRadioButton(i18n("&Full terminal emulation"), this); m_group->addButton(btn, 7); layout->addWidget(btn); layout->addStretch(); this->setLayout(layout); // there is no simpler way to get to the active button than // to connect to a signal connect(m_group, SIGNAL(buttonClicked(int)), SLOT(slotLevelChanged(int))); } void OutputSettings::setTTYLevel(int l) { QAbstractButton* button = m_group->button(l); Q_ASSERT(button); button->setChecked(true); m_ttyLevel = l; } void OutputSettings::slotLevelChanged(int id) { m_ttyLevel = id; TRACE("new ttyLevel: " + QString().setNum(id)); } ProgramSettings::ProgramSettings(QWidget* parent, QString exeName) : KPageDialog(parent), m_chooseDriver(this), m_output(this) { // construct title QFileInfo fi(exeName); QString cap = KGlobal::caption(); QString title = i18n("%1: Settings for %2"); setCaption(title.arg(cap, fi.fileName())); addPage(&m_chooseDriver, i18n("Debugger")); addPage(&m_output, i18n("Output")); } #include "pgmsettings.moc" kdbg-2.5.5/kdbg/pgmsettings.h000066400000000000000000000017321247243200200160550ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef PGMSETTINGS_H #define PGMSETTINGS_H #include class QButtonGroup; class QLineEdit; class ChooseDriver : public QWidget { public: ChooseDriver(QWidget* parent); void setDebuggerCmd(const QString& cmd); QString debuggerCmd() const; protected: QLineEdit* m_debuggerCmd; }; class OutputSettings : public QWidget { Q_OBJECT public: OutputSettings(QWidget* parent); void setTTYLevel(int l); int ttyLevel() const { return m_ttyLevel; } protected: int m_ttyLevel; QButtonGroup* m_group; protected slots: void slotLevelChanged(int); }; class ProgramSettings : public KPageDialog { Q_OBJECT public: ProgramSettings(QWidget* parent, QString exeName); public: ChooseDriver m_chooseDriver; OutputSettings m_output; }; #endif kdbg-2.5.5/kdbg/pics/000077500000000000000000000000001247243200200142735ustar00rootroot00000000000000kdbg-2.5.5/kdbg/pics/CMakeLists.txt000066400000000000000000000004601247243200200170330ustar00rootroot00000000000000# line items and other pictograms set(PICTOGRAMS brkena.png brkdis.png brktmp.png brkcond.png brkorph.png pcinner.png pcup.png watchena.png watchdis.png pointer.xpm) install(FILES ${PICTOGRAMS} DESTINATION "${DATA_INSTALL_DIR}/kdbg/pics") kde4_install_icons("${DATA_INSTALL_DIR}/kdbg/icons") kdbg-2.5.5/kdbg/pics/brkcond.png000066400000000000000000000006631247243200200164300ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs3測tEXtSoftwarewww.inkscape.org<0IDAT(c?襖o湯蹐郩鉡{ 順藣tu歡0w蹓(-揫鵗寅l0A[滑*覷s<艦Y^掭m中耄鷟蕅鯔YED試ML瑲饑&"藍jRfㄖ'搫袞蕖扰?味q奶:囿葳鑈pa8蒔衚22UT珪}30翼>x瓀檽藏unh綦&B蒟_x8㎝WWbzr莘W]]髀$i謯閣痤W?|鷻BF~~S礵 矙9N蘑曠#4妴喔倳IEND唇`kdbg-2.5.5/kdbg/pics/brkcond.svg000066400000000000000000000076531247243200200164510ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/brkdis.png000066400000000000000000000011631247243200200162600ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs3測tEXtSoftwarewww.inkscape.org<甓DAT(e窺AЧ{I4XZY1 Pi B: #塈6Ga!*)巉饜歃$棇7鳴騞o腶`族殑:fbm拻 僯}V-rlWk任礵^鉋殂銦0棘檶c|z踝9;k景鍕lWk鶴狼峪%6z>ю}W~UZ]0汙 舸s堂艣蛚}1( 昋 f嗊諆橪_蜉據4RQ灸 (E(仙喕迡蒴撏R慺魍LtU)ォ<,跕雯筆,k 3 D停鈸!齒, X(GoL 擎5d火伭 1Nk霙圪I8z2h8l怊@xw覭A唄譐g|?LMl L`x蟝訇Z]w6_蕻!tβ2:0檁d:4Z]w軸Lf餯Kef\F鸇褬te&'撱LN&yg騢IEND唇`kdbg-2.5.5/kdbg/pics/brkdis.svg000066400000000000000000000111361247243200200162740ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/brkena.png000066400000000000000000000011741247243200200162460ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs3測tEXtSoftwarewww.inkscape.org<襺DAT(e裳A:& 丞Rd仂\J^!狪+1%澤"Xwvw.g( L9O蔙*つ潲票絮殕A?P]_O左/jUl猼 8朻蜵趎t欘}/?zVP詨葙觶庉f捽|N荷x諆坲餰{otwn壁睩b蓧骴か鏄4?~ 肪XO票豇篻*只1F"k(句鸀遇綵h 篿y"ぼs隇N0$蠉孖p4臼.′舡1qPBY"UE5:kㄣ&I志鬫D%- "痋翂 zBUV,琡絣~C *T&%~U C0DH1S慄j0x贍&5\ 呲鴻}ssz艉)炙兀 :G偠鈜1^矣[J阰zz+km=R菖js 秞<憝JVE6>'j5儒0"i^w!zW嚅澒蘣韄?胾Dn繖&IEND唇`kdbg-2.5.5/kdbg/pics/brkorph.png000066400000000000000000000004761247243200200164570ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs3測tEXtSoftwarewww.inkscape.org<膏DAT(縭1J韹攝矧^`A"傎肌 li] 瓾BQ !兼^` /`#D頄l巍J6+R; 霫瀎6漁zkQ跫mR x竇.鶞e}=:]17\垤 誌O俏﹦s pK-s幸8jv ,S ;置+{x$孿'媥Ss/蔇/@-蹩&bIEND唇`kdbg-2.5.5/kdbg/pics/brkorph.svg000066400000000000000000000052521247243200200164670ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/brktmp.png000066400000000000000000000005111247243200200162750ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs3測tEXtSoftwarewww.inkscape.org<顰DAT(1@E,u6拹飣0茷 :#l=E拌AM40朿, 蘧'UE,+"鉤酓 阜s躔EDベTQ嚚:蝒媟<鄉ac苴h8Ь(.I44M 笲k4筑醍qh4搬篨燽,!B杴~貌袱榦裉c梫+◣迍IEND唇`kdbg-2.5.5/kdbg/pics/brktmp.svg000066400000000000000000000054611247243200200163210ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/hi16-app-kdbg.png000066400000000000000000000007061247243200200172360ustar00rootroot00000000000000PNG  IHDRabKGD臠 pHYs  d_tIME 屝SIDATx炅=KA\M j A #几c.糟醣B,R堨菎V慨"6baP \俍ywn+爟f-禬A鵳Z?絣鞔=l廂u崼FPG皓泉4+*4k&pns偟苺矷P逭H'W哳 <狫籍囈%>X僪n`夢粻魛鑾 肉哠衪5U{X\忯揉 *4邁PGSw佇 俓bBACK)bKGD X攩 IHDR譬l;鯧DAT8佽翰猢?RJ; 2 q8X]撙謠1襒2聖毣啤畛﹜C擱霜<N)R鶐B鞡{顅#素# d2喉!劦7頏>7&SA8w呬瀙=蟥'痗兼n(核j4友fcRoN< tD>璘{w沕娛*盃k靨惤cb砓f速蒸充歔W俗み1靨Ebc8琌宬>_偛蓫2m萓\.3NHl68媔M脂<~珮.'@琢M剮6佰jI艕榻喧湁g休:Ar帖赮箅蜡:q7肏_,ow頤僛薤 O籫< Y臙IEND唇` IHDR譬l;鐮DAT8佽?A>,!) 狟懣X a-6糟偽|_"啣BP娷&<6),"Z[X/礓嶀x睪:禢 龕{玶hs 緳 hO隧Iab跏爆輞]=x鷢琠eY:裲V7LI5 IR$&糲瞧'J市攩莎l愴肪縕Zcb荿qn溪霥丈拱 ヲV飄殄3薕{F湑〤z|D珫(M鶸2冇,z諄b`煨8鄉cY稷鮞砟汯蠷O崑枒B彋 ]`杹s穻栘JZa(I*銛$)MSIRE抃鏹8IM&Z.犋6Y庤鏻澭>DQ4MU固$IN,Д絣籛;{r蔠皚|C 妁 轔~穎hω.Z.5狌跏櫡孈篦%砑x h潷x祣蝧銋*繹a菈IEND唇` IHDR譬l;顰DAT8佽?A>查 I鉑駭 [A 6[l>苜aXn■) 擾XlRXD楮 鵰鷑鵹= `<2L&s<浬# |>oL箄t:媔}愆~|vjY 禽 SR@鶝]欺殭縡GN(k鮦鈹砓喈T*腑盺澥G肪篹!驁彋冏絢Jl段E絖4L秝Y噮=<ク$!0 -芃V垮X,|>m舼鰥0H漎蔎(烔.c6叡>齍Fζ&8口)@NGT*u]IR$孓楞l6kw0緳怛f熞腇I趄闣憝膈D緳Y婑騪 P幽端y吼Ons]趹OrHz%i\4x<`8寡櫺N-J%鄉葨q /?礿^/Y^~w頤 蘴33>%洺鬧頃G IEND唇` IHDR譬l;氙DAT8佽?Q敉H!i XLa+(`3 北"0\&0-旭0掯點庾>鵰韣瑍蝢鶆?Ll"J糨踀+PO. s愧.~|^擄v8嗦倦0墟 [R@琢M$M=鎈0鈾蟉縻-[驁鶝 @·稚kM\,q]n溪~縉T*毄 髭4b崑\%勣8"m6⑴Y臝2t栥3Яョ\.3荿1ぼ8稷I'qV 裚仜傑s&a2X苛N忍褧;)籠$戾hP$砓沖咆v$拓n+N蛗$I4h>k琢s#i幽睿 癉[需N鸓^婩tN瀡舍l硹撳愈*k^$>!噲蛝h壯'墨N閣/筳;,K需N橘_阻))j*I 譜引詢瀇l6{塒-狁絇5鸓l1q· N軓t崶C\固F,飄A癉+@轔0>偛OO魨棰Ⅲ;鐖⑨eQ*玤l6祜4鄉cY愯IGqRr過&洬T丼/訌0N拌jfR闀%I鶝]<$9#@栘J($琢-%I逕﹉蓎侻s苛8g菵L犋63H幽RE忴r己誓驈_F罳=裊u]c%>!圛8k總@脂3棋16吵uGA塘k;瓿鶢榩莤H捈遲,宄?9硎7嵕IEND唇` IHDR譬l;姌DAT8佽?Q敉H祡f A 繈仩,,)7`aBa,d 堣h!La寠eB!3\x慮9檹鶀yQf3 H充3-豆O隧I癉蛚馣幽攄 儡粍-刳~謂h4敲 SR@琢MEI9鎈0 鈾蟉縻-瑜.b悉敔禁*8愯轔@鈾70LX.W5鬆需Nみq>垮==↘蓗犋 9椏,* 齍癉8媔eY礣=$袒葬K6ML彋 \蔠岪3艕犯GIRv-I抃T苛%IqK|綈:6{ス)Z,Z脂I庤椎j慉裚Д $承曌F#5阺w灛逶痙嬲'9$4.d8厞齫\ 嗥N侻 鬆鄉葨?礿^/i錚;-灥X<~ㄇ盒`oWIEND唇` IHDR譬l;髟DAT8佽Q敉 Bl細XL璱 K- [BP&0-a0掯' B偑>\xp/誾{;#j $攝Dn |jI#xc浺幽濺捽齠t x|3顈,薕{躨易+忖肪$) Czs煻`f貪ko桓r充a喧P(挋E祜4愯轔@固70Y.5@需NFΞ|>店$鏸栔-烯t欨0o,r嘐|>`需N吼侘儓zH:RT闇d2鵊l菶: <揌F苛3JIOO臥剭$I鈾N\$EQ$Ij煨J&f8\,4Lh崑h稷9ベb浻造A%鸓^婩t翽麉宬\<愁尺m栘;,10 %圛8k嫚@貓7棋1陽n俜r @箤跓^亮璃G3 >%毘:曹 IEND唇` IHDR譬l;髟DAT8佽?Qj1Ar\偽ぞt B 薤)-7``  ca停h1 點 B偑賅趑弇攩wGTI懺欲\| #xe蔠媔盺熾O筥;,K趄V橘bJ 沖咆VI9q脂粅太蛐K跚*X.酺腑蠡|ベh煨檉{ 聶!. f喧Ybc 茌~j, Ih莧:J仙*鷗璥t貫YEみ1a8鄉cYN%JQ犖潃稫KK& Ch緳宬D琢5"K齛>嗲 蔠几&#@栘Jv$抹l*H賬淏^6L幾,mi捃 玤%I苛 燹餓菴槸sG犋"溯峭嬲V茤$`' 罋趄粞嵿[3跂 @鄉_猱?籟/ 耞 H捈遲O宄?/ 師礽IEND唇` IHDR譬l;軱DAT8佽?Q:-EH)脣 紒柊;B塌+ljqAaKS&a7ED 謝甕E嶀X2A嗛yD,[o奼/ow@瞻 p蔖<.筥;痠[呬Ra謍))R$I盺&糲蘊VK?丼v脣B㊣t:飶槆g1q6%NS脂Y脂酺C\,鋈:Fˊ飄驔=- j煨弳宦睾 >J台8;n鄉|>柊0`6N吼蛚i4l甔菪($噓&ㄔ顯q端.@替b寄貓⑸}3)%錔憟A Ir]W<$苛+IR琢eYf鵧蹎z蛹嫚享dH+佧jusㄦ+I肪j0 U.ww|,棰沿w'I<瓮;肵砲鶴C衯iO4MCmb塘V灛D輦{9sh3xuO|鈐+ G330>%洳粨z菠IEND唇` IHDR譬l;陫DAT8佽磬ZQ#oJ.i謠︸3(D螲7 G楜P3t,*:\pp%(介i/|p僰x宨駒Qe|dDb!rx&]剭5l詅熾?^M;,K喧L癉{W'LJ$i2 7e2音{qn湁<み1鈾nk18眅8玤緳I·7`裚鋦 `a券t*@Ng豬8cI<0Dе;[E>Q8鄉cY苛9G祅讄鋹sR毽 礤^涊鈾6E癚>:筘$) 赮勿b!I臥蕛&f鵧99誤_宬軛{ 苛恪 R-恄鐍鱘玸h4槮穚*J|蝜  ..片\栘;t+凈櫰瑣猏0 愯澥蠰  沼荇敪Z慖鮅:n洗陼洗尾 闟g`璋K姱}涓听厂IEND唇` IHDR譬l;惁DAT8佽磬ZQ?F>,薠H 溽$哻x攀熞唇扞?Qpt9:,yKC演p刻蟪謠B謺P齝8p鉰罋{c!PL$- 嚀-,J琢 蛚&朾/袤懋c廄.>濞\J%I烡>褾:zL&袖{"喧 l6艋呬pf傖z&堆礣=み鎦p- 瞚灈K榤睩▔k軝骴R) 777a8媔1V宣S挋Q胺^=是N,~偎@裚呬hI椄%T;?$僥+@艐V$奉+鑭侗w珿*%@_..4N75蛚7芔 劗CtZ凐4 P充<炩%汯'F#y晼;磔Hgg^^貕廯 WWL4瀉遣鑷pz*蛢潎鞣肚櫜_婀駉踱篻鄟以}爻IEND唇` IHDR譬l;甓DAT8佽磬a?  m`fH"-:dS鉯﹤h';,!B -!=C:oP;齴L/燹樞 Q~ ·h4#'| UEL {7-^?Vj樽蘡"oP@Я孓\幽廯丼r7嘴s毽d2嫡濬-,芃\.3f剴臿4鋈:~k跖z=<狪襳辯!蛾趛輐l2朦^oo胲臑侘0M0汲67y>~[+赮羰y&窬eL\濇L馣W邪']_+J m戶p(I*JD"鍔q蘱T錭醷癚7ich·t焐|i暄*&辣F疀 蒪.Jef妙holH暾j8琅wO(FJIn橪B|獄)瀜⑶-.[/浟]_#<歷陂Xy冥9菂瞿K1IEND唇` IHDR譬l;薆DAT8佽糊Za瞎氤RtobH 粱陛C市靳` G`B vp醄CBz~,?S{鈶 蝻秕zQ2@ h鶙<)6 d -x慵鸓侘窬2蠷h行漠*<翛, 鏺鱘婂v踖zぇ#l&昺] |L祜t鶴ЫaB 鶴嫚H"X 8蝸 @苛愯rw蜬綜VHb^]\L i萆ip]P(eY匈鈾~pjD,kt穱藄舢蕪0N胵6丼2溎<nn椳| kgsSR$i0H 難3w ]P+紿澭喑Y呬&2./yc<7 匈霢~j焦稷劫*M鉔昕}濇L~ikK錚孥璒袒(幻HdY鳻]騉饛w(U斀cVV柩&gp%j巧DBy7+3QloK `f5殶堈( 觼御+ 恘逅{1隓雍GGF#忴瀢2瑗菎需g2|蝦7僰鴔D愾訂P 罪 }|'犿!Jq||メ4獺簬蠓$臹磋F!I杼恰t:∠!K$澭$mkg"ベづ%尻]顯麌9 Z)Tsscぬf9iH臏栘jxv州佫R:剔-楻<渀鬑.8#u:z].K暾c"T0馯D肪偞&No猒灑u}菰o?)錹碃醡X祤p喙蝢 ?s場 WweW@x朳鯪-咯pIEND唇` IHDR譬l;胔DAT8佽彗a爓cS致摍[]J:v*(!Cラ矯 t"雔漥! u沏lCK唶I4>貗 瀀魷燹oa>鼆丼?*唒-趼驠脺K3 妨<稃f莩f99陷4怭w,娀是O玤扤r蔣癆戌鷨rm菇鐖8/俗端.Ba4僰醍>鼸~恮1A9WH",j琢欨臐 h6I志Xi呬?鬕>皻:TJy陶覹$I鶴Q鶝=t?tN>$=欿潸飪9 循銈紂$裚H$崁蹦組j坷 虴嶒5~圠=h固縢粣`裚掂殿亍WJE  荿戊3誶GnA5 佰hH{{j喌\整寙蚹利o 0?眨;;伓_斃]飥7p跺W5唪x\趭IEND唇` IHDR譬l;惁DAT8佽彗q?wW# %!C絕d(d0[ 膻 D?﹝t態オ2"4便 "t"uh/oz葔踦稗hO鷩7@IX|09I 穮ZUmw7N1B眣lm韝R>0鶪=赸a偃'}h.{瞰5r奪\檨詿牝荿.悅1 ^蘠ニJ甲rt|霠恩茦8難VH"吥v跂!Lベ逅V挖メ4藕0T6ッ[諈aY礨_T幽婑"柘曩EIR稷尻7 *ooOK蔠&I鼨 礝_>瑿ccsR)棻l螐啁y 鬆勓錼-牒癉掊4緱踔鈾$9>猒'鞥 駝悅tqt(Tsq志僛揃秠陴羰y;=c8穆1~bw;@HU?;p3菳繼J#0;IEND唇` IHDR譬l;艐DAT8佽1kZQ癹D沊琚 IT Q!P枟趎行tp(8?FGv嵩A d( ]  !蚆猇蒑讅{鈶騜篦庣VZ@7/?瀤gG^吐鏒uw[_茥楜*'M[禭0茷+紫y祛>/捧@$疐緧L'p6靸H%諷兟])滘_c葔睩^ 8殿嬪嚚睭癌x峻szw淖洭0泏佫洗灊Ut]⑦覿苛魾8Gk 偌纏 欋r廁- 藏5M箜O志(玄踠c0獰-..h4A充A)5o湇t4M儇寣臩c摧2<9R拐繾呬 CI$"穚毅曷丫,LFDDjH-h崋 貨+Tf整z煙},刨c4MA[0K稯'駢 芣6Nq"D%IEND唇` IHDR譬l;嘌DAT8佽密q?gNN 皓 凡!酏,4`詴n兼摭P?$B:h薄pB2t(d橤E"鏏LSRsI根oz濷黶覛輝h94 破&豎祴鏚rR^ux4miV$鎢紎^鶝RF篰悰)S{淨y++<槦眣嵁P`'諙 '屬悌_X鉠觭H// 鱢&蒸魷憺[n 拫6?..8隰h趖Hb赫;H,沺:_恘h>鯃Ek轏E固歌>P晞8$ド帣8:;馯覈=詗婑ur奪Ma薸志iL$G<Od2"夷1 `濛穚\Fㄐ碻 5 鸔{R圾|>$BA橘+JI碃?熳z陶3nFl$U*I蔣1纋n$5肭哢E琢\.O;薡 5L杼)U?t0=`jcp |%'堷]*uV IEND唇` IHDR譬l;軱DAT8佽彗a%詛燊釕%mR僮濎 循?1'C ;HOK@):dI茵q汲Ⅰ銚wz鵁覛稗踢x|$ 路朼?z掖i銼x斐牠鵋琊|~>咺($K僈 7N釵B壹眚 5;8蕪蘌甕L憟%^p)]\碓(謷砓;譙3z秞VHb\葬{cF酺9X,b圁Z唆メ#砓汴,JvK%zK暾匯羝摫p檛a揌4q蔰矉煡:|犖僛> * 夷0營Y籜}僥+@NG愯&yT般蒆.坯W隘"餳N鷨y9=啁y鐉}N玴悜(dY鸓瓊#)6 查Z唆メ N汽*I67鳺Z淥恄豶"輀蔦9L蚅騧螑(鷴p營 -._XR奈Be脂燹勓煬彋nb軻(周衎迷=\.$U幽↖.hk~~僁p]W凐4$I栘鑲Tc?!i q=v&鶝=賹龒L&Τ%蛚'緬7艦Fxp nU芨4N 莇t7MIEND唇` IHDR譬l;洍DAT8佽=k腍K JE(謐Dl@Rd忐婧wN;8 2( 48!b劻^p:5萵>L/恮s洝=cg,岏}L.澡fry魚V波虜蝸款<`e懽驈^悌a玗弁藨燹l&ek赫劼 真}5跱焦崑鞀偍案| C擂搨鮂呠k〧$ a im跖z=〧㎞砓嚫蟘赫K固}赮N煨跱<~孱)<蔦9V苛C)蔠300葠襉0啞荶|Rj13%心懱`0BA%b瓃k+nL刨,KDD俙\dcC 仃^pGDD絣8龤J婆D熞秈{塕th琢Y荀\Dq侮* 鬆 鯀嗚_扑Eg 宄?K隑?r睼G炅3iIEND唇` IHDR譬l;渢DAT8佽=a1 蕤 h!L3)m[, ho MBPp 芠+lDYDYBb0鎍L龕3蝵s 1 -鸓嬝 -鼀°,bB'總Sp|鵳0 玤3嵨拽j瀔 盺%I蔥'\.勵<昶Xlg檃`ベ摹研SeQ固X,反姱4 z赫肕:立3鷛B剮6WEa丼鋈:鬣柳0芥貏覃:vx<魄繫Z-OO坱軨"..t檍鱕彋@ 赮+0裞z|6M2~?瀅 X 鷣2Q喧n楞總動潧W祜拔d3禁*i>+LJ忴殰羬R韕(蛪9a蛚$奉涔l跏獎;?!i ^盜秤佰j^ュ-F蛨H$勓搪獢G側>}騄熬c@ >#g{襆[4姵IEND唇` IHDR譬l;渢DAT8佽彗ZQ澉煚i矯Rx8嵑fs:(8:(L (肆`K>txAD疚秞宨篦赯葙QnL"-嗡"'P素GI緳荿0~~Vj蛚fZ俳s鄅LE I烆<6 7 =塴2鑴厂轔P鏻|'鷩:H$佰j, >罽 蔦9絣6醜齍<軓0 鬻宏%) Xl&奾錴纏1容a蜋qtuV慎玤I&奏8t:F挐=GGRt膘蔠卜$@緳YJ驈澸^ 夯Tq]Y暔蓎 ~膳嫚裘僥持ty/+羰境暾$坦陋嬂跂|r蠷/I勇霨腢v ?湣浼Lc&鶝楗螶J疋癉摨蹌G婦壝樽3鯇b踸熏f迅彌Mi蘗IEND唇` IHDR譬l;顰DAT8佽?Q敉淌9柑懣 a 鄄蚜/毢旭I!0[衰a︺1`aa壁2點庾X舂3\xp/誾{;#=Id2\|Yxe浺媔}1柉J3粍-刳f被吹盧J 沂涔VI9q脂B墏簉9[姬,KJ甲奊cb砓pN岔v誑\.榡鴛8d:$68c修k 譂%醪DQ曾椏,* 蜤$Ip 鳽=<4E浾)肪*鸓~拻rF#k懍5 S)<$5M @鈭躨/IJg3瀄V-P羝狽+EQ$@厂鶴軛[iJ迉>^]gV咱4MU,%I癉Y> C}蜓;腲裹wn霨萶:wrHz&i5H貓趄X鋍$nu]Wq侀疄;N骫?{5剆x 噘h潷x磍蹂9朾.rIEND唇` IHDR譬l;洍DAT8佽Q捍C6,旭愎fXL苜2,-嵌 AAXna衰a娊),L溫pRl4H鏄愬{9s腲 E厹,>P/@5|(S婑uL蚍玤佡 -磥ah琢抿蕡JTP@JEA飺NGf蛄{/挃舵, 譀栻B侘h琢盃k靨. 而壈鉎F#-K艗跇A%/=畈煔充霥 燹XJa$|L利"悅陏K廕.Lf{N& C匋軞葠RM薕琁4 $坷 P稷$棤-@稨藉G濎N汸籟整 銛M&侻鏔4Ma(==澿迋yi4 鬆鈾N剮6w篚^O鴰2: xCw6ベ";(璻I;2D礿憝欺磻> 衪鄉k44疌'攠暷?谾 蠡W<3隑_<匾6溼IEND唇` IHDR譬l;柟DAT8佽Q扇3dI 0.紒~聚唷O朽>))l"-a0掯'hV}緷韣瑍蝢鶆?<?D"X篽o@% |>oL綾}ベ&刌澥蟳巽侘廄.螫絖*(L縡趄6H志k柶攲崑d6呬赫K*Kl渚值踠禁*剕ク5 Z,婂v瑞K漟櫝{貫Y !齍T*8X貏|噱C剽 zz/E崑劋犡{鄉~財`固碫扲栘J肪躨/I佁2銛$)c澺Y爚[%M耡E 鬆F而68T痀 R脂Д紱$戾h懥 P苛;揫q7n<瓮7rH4太芔無}躨[39萸9G=_w頤瞬_g?~z挈5k悈IEND唇` IHDR譬l;囗DAT8佽?Q敉Hl7`駭 [A a d;謝俳KY嵌 Aa ZXlRXD偽p螃▉R,U鑸鉰{9檹s腲Qぜ3 鶴T熏g蠁F1熠>|^~猦86 禁[R@緳Y廁衍膫需浪H志gko桓r崑d鈾玤珋Z蔦9\蚰愯喊篸踠禁*0 玤5FZ脂孲K潃鏢p喋8 & Q廕.ш剆瑪G$瑤E坏(卜怔9H0 ,Jニ*wwvR酺9IR琢F!I軓捽u傌(殼h2斤K漟0誶,艕:愯G·懦m,芃蜍クt闇%)<洷X,衣|>氡6H叡>齍f赧&E琢$琢- @8僥+IJD婩t犺俅q 鬆迉6M軛;%m煨太(I狁IR煨}モxx誅y吼Ons]趹OrHz!i\4h4`0寡7嬭椻8(m蛪v澓紕狤;- X<~[:XIEND唇`MEND! 孍kdbg-2.5.5/kdbg/pics/hi22-action-pulse.xml000066400000000000000000000351401247243200200201650ustar00rootroot00000000000000 Clips Media White 0.000000e+00, 1.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 6.500000e+00, 1.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 8.590909e+00, 1.640909e+01, -5.909090e-01, -2.545456e+00, 8.181820e-01, -3.545455e+00 1.300000e+01, 1.909091e+00, -8.181820e-01, -1.818181e-01, 6.363640e-01, 4.545462e-02 1.536364e+01, 1.222727e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.800000e+01, 1.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.200000e+01, 1.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.200000e+01, 1.200000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.800000e+01, 1.200000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.468182e+01, 1.504545e+01, 5.000000e-01, 0.000000e+00, -6.363640e-01, 0.000000e+00 1.272727e+01, 6.318182e+00, 3.181820e-01, -7.727273e-01, -3.181810e-01, 5.000000e-01 8.363637e+00, 1.904545e+01, 2.090908e+00, -1.272728e+00, -6.818180e-01, -5.000000e-01 5.772700e+00, 1.200000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 0.000000e+00, 1.200000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 3.000000e+00, 1.000000e+00, -2.919846e+00, 3.058505e-02, 3.128208e+00, 1.865485e-02 1.900000e+01, 1.000000e+00, -9.967632e-01, 3.559867e-02, 2.990291e+00, 3.559858e-02 2.200000e+01, 4.000000e+00, 0.000000e+00, -2.919094e+00, 2.990292e+00, -2.385113e+00 8.466020e+00, -6.293528e+01, -1.907349e-06, -2.990291e+00, 1.922329e+00, -7.119727e-02 0.000000e+00, 4.000000e+00, -5.449749e+00, -6.654691e-01, 6.980991e-02, -2.956489e+00 0.000000e+00, 1.800000e+01, -1.293845e+01, 2.234233e+01, -3.042877e-02, 3.027367e+00 3.000000e+00, 2.100000e+01, -2.990291e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.900000e+01, 2.100000e+01, -1.317152e+00, 0.000000e+00, 2.990292e+00, -3.559875e-02 2.200000e+01, 1.800000e+01, 8.273602e-03, 2.919092e+00, 3.620749e+01, 2.604206e+01 Video 1 8.954546e+00, 4.545455e-02, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.131818e+01, 2.272727e-01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.204545e+01, 2.177273e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 9.954546e+00, 2.172727e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.829126e+01, 2.634304e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.061489e+01, 2.563107e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.113636e+01, 7.409091e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.995455e+01, 6.636364e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 -2.000000e+00, 7.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.000000e+00, 6.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.000000e+00, 1.500000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 -2.000000e+00, 1.400000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 4.285700e+00, 4.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 7.285714e+00, 2.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 7.285714e+00, 2.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 4.285700e+00, 1.800000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.450000e+01, 2.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.750000e+01, 2.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.750000e+01, 2.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.450000e+01, 2.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.528571e+01, 2.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.828570e+01, 4.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.828570e+01, 1.800000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.528571e+01, 2.000000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.000000e+01, 5.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.300000e+01, 7.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.300000e+01, 1.500000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.000000e+01, 1.700000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.829126e+01, 2.634304e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.061489e+01, 2.563107e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.113636e+01, 7.409091e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.995455e+01, 6.636364e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 White Line 0.000000e+00, 8.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 1.300000e+01, 1.505758e+00, -6.904849e+00, -1.818181e-01, 6.063031e+00, -2.845454e-01 2.200000e+01, 8.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 2.200000e+01, 1.400000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 8.620300e+00, 2.047545e+01, 3.484241e+00, -9.427280e-01, -7.538484e+00, 1.233349e-01 0.000000e+00, 1.400000e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 kdbg-2.5.5/kdbg/pics/hi22-action-pulse000000.png000066400000000000000000000007731247243200200206150ustar00rootroot00000000000000PNG  IHDR譬l;點DAT茧Q YBR.啡懣X a 孕D`-7M aM!衰a哷娷雞 G圇异擬蒠廢獚懰 _@Y4砐.< 暴蔠尖愆耆襝#ka鋯8(品能;YA琢-IRチニ丫,^齝餃k趄r頌73啜8X鰥0輅唱禨, 41 嫚醾ytA$Q·F!I皻:婂v%I玤S靨檛袍8#Ij煨銛$伅mr]7 .I橘+殶ベ+ CZ.犋6怛4棚錧V 橘+IJ%IR貓b 交&隑uO淩漁n所律-cIzBCV稿 宬旟~w)沸%夷~u|=途霝滅s籫b' Y臙蜇IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000001.png000066400000000000000000000007741247243200200206170ustar00rootroot00000000000000PNG  IHDR譬l;餿DAT茧1Q?莁$CH鵝La+07 Bpa c!K&ED),?p珙Btヌ鷙鷑鵹;WXO櫞·8^蟔霓]_y脰襶尖煞l膟 |~褉0 A礉/j琢$I艡L&:胡叵5犩*{ブV侷 8e19婑黦n6岪3絇鶣戴9%^而i馭梱擿#JS$eav豉4 %qcY夷b桎鴐卞TxG鈾昴充鸓啃l淅,h煨蠿pG婩t兔餥l 荿%IiJ|綈崑杶ケ( CZ苛猋4 棚錧&裚扣肪$i0 P煨稽y抒娹漁nQ橩vKD姺kW襝儲<你_禎鄉EQ$4o8熰碲檚鎑> 蹥>?*繹z kIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000002.png000066400000000000000000000007751247243200200206210ustar00rootroot00000000000000PNG  IHDR譬l;鯧DAT茧1Q?%軓T迉6M3$N6蠷8U,%I愯齂絣爟;=髐逶答[Tz菰(3砬UF#? 搘[ス2へ7 噘{祣饛H橪:%IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000003.png000066400000000000000000000007741247243200200206210ustar00rootroot00000000000000PNG  IHDR譬l;餿DAT茧1Qjw!) Xla+`c梨 釱%[Zho A謝&兜ZXlRXD柁 4褅A趮儋謊y3w\sO纚n鬧頃豇IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000004.png000066400000000000000000000007771247243200200206250ustar00rootroot00000000000000PNG  IHDR譬l;顰DAT茧1a華%KH[ + "陞,lR ka衰a娊a 笑螾嘜s.娙of稙,G@i4/讋'倞素4U蠷eY棎f7鑌 ;ma鋯8h<艕$)4齌獺NR(料for琢e煨P*料v]蛚澨zG忴蠀莌5而)錴U隗=@^&Ib_麇闀iⅢ;鐨爐6K2A充a鈾!鄉cYa厞t肌k抃m&齍 `苛c崑臿4珛燼]IR喧 裚%I蔠8%ING鈾.GQ屯l&@幽J趄6鎉嗦繌祜tД籠$招虋蓎Z俳篱;=鷵6砓t K祚[Et揀 總癗>掎A 侘n8麧碲闟鍷>~s狨纚n!硎tIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000005.png000066400000000000000000000010011247243200200206030ustar00rootroot00000000000000PNG  IHDR譬l;IDAT茧1a騩%KH忴<啡謫C 瓨,,-煩 gBP陔"`"〣[X8Vx B趮鄚```ww>xGi37$J仳'|hd素觜*\覂4匽j詠3p<JZ奄絣v礝華$T脂%Ia&O|劌驤梢K吒幽喢6鑒Ke栔v湅呬v宬礪頌8q志弦菢 贈>揟=>Ⅲ;tu悖捙zzb< R0侘0M0儓zH:秞農緳壽姱蚯&x0玭4夃Q瑤$5Mr]Wd蛚U俗IRE$砓丼甒幾,彭畚i1h需 )" IR志9譖劑V哎9=鬼Z匪]0 %擉 I,A~}p*匍N2M鯜^.操X瞟^涓'#洭X葠#9硎比 IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000006.png000066400000000000000000000010001247243200200206030ustar00rootroot00000000000000PNG  IHDR譬l;ケDAT茧1a琪r聯瀉as驛7 BP娷&rlRXD幾娷霤c7E!zkr鷙牆剄峗3鯰ox(d2[|9 x& 砓0M3障lf|~糸0 躨j4(窅F:b悉7{K錴:需r頌75p充螻,>ъj詠:嶽0NY脂/妙q絖4Lbя楥凳澶喧,l琢緳 @Xi總0@d5枉($z>g>$ t]鶴A喧LW岋$拌j 蔠$蛚qIR孓楞\.n(烑6捽伕v隿粌@;姲憝箅充I婑欂儩麉愯葰樓sOlsG楣鐠睨Q$IgeH+W 2渲餮Qm臹2M鯡C7霆Y曉督=洭 _蜉# ㄇ盒&榛IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000007.png000066400000000000000000000010101247243200200206050ustar00rootroot00000000000000PNG  IHDR譬l;柟DAT茧a.YBl[ Zmca螔 K+[Z(\i Aa 擾XlRXD幾X 笑螾嵽,娙fx37慫59(刪怔Xi+ 荿,螝稷->vj籜<洑-'IA渀uIRIC悴>6癰)W俗嗦-鶴闒nb谼呻6皿褦8(疔\幽L&染俐s檞髮ъ齃cI鴇 楸螄d儗廧W6 J氐b 紱,ea~IG~縡 鈾.i岪3x琢鸓N圁FE)剮6u]Im8$)"IR志Q:N傳嫫拚t*@呬R&Y嗦篰珗艋E* 孓暍慴簭煟Vぜ/@q 彭h0D鵃KB犋P2夗}U,r嘐d2 Cl袸eYt蒸"失rq礁NF]荵<S幽榤QL&乏Cw77銛$) 8弔n'Ij琢J充壚xu{拽礎茤1&m6 工u禾聜譀$拓n?劑z羯橢6Hm蜼\煬l&I毖'爅0郴荂U狋^*c昲8鄡嚬杇=u躲 洭 X_蜉# / 師閤аIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000009.png000066400000000000000000000010171247243200200206160ustar00rootroot00000000000000PNG  IHDR譬l;焍DAT茧磬q?3E筄pC3 nq蕆扞︾S0#聖"魰P$*:88 (<]蛉^x 玹騞8U蠷eY扞op<[姆Z. 鄍陼枚*片|'>>q志犺;c灖r固b6呬vぢ&敁鵷貽喧d稷S(^稞.剕/нx0h崑P煨滃5D蹸&鏜囗4M"0 彩侘0MV宣弼R*蠹t:jZ2心D , C<'E0太S}>; 裚%I赮孔j%I臥2 #G瑞tww折taeE今Zmkuy#Ij4x杼拽o{x(]]孟}-Ir]Wl橁q_\H q}|遛愯荂搪u4號eYV矱嚬杇揱歷i洭 _蜉# 粨V熵IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000010.png000066400000000000000000000010111247243200200206000ustar00rootroot00000000000000PNG  IHDR譬l;粁DAT茧磬?F/包Gpp(  袗糢魰 8:鋝n0C!98演腹〡,A摛〝46y譇霜鞤Q社(吐拌,>4xd緂宬40Msg4 ~w蜋fj羰頌沷+qIU*I烠:幁<\.煬w'Iド2P(嫉&.XE需f琢Q*啽]za>J酴Ah6 P煨]k,q跦-盛廉鈾f8Eea&a剞tgc)跠w鬻}~N&﹣頨.j讓} 鐇觡弋>/@鄉K迉$抹l*N)鳽覡 ビ45i稷O M唗閿汀B苛霙餓琢藗莧*嬁\Hl臹-:n衶S澬Z0LJ漂?睩蟥嚲橤GX訝WW2喧G酟|=悽J絻 o涓听d咆IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000011.png000066400000000000000000000010111247243200200206010ustar00rootroot00000000000000PNG  IHDR譬l;粁DAT茧磬q?F銠,皤72Itnq粵拰*tLGz\:" X畛﹜坽摋b沾滕 屪騞?_▇,[m儡>WQ疏T*媔}4獙 ~F邴鶴 鐩P·$玤(麠蘊VKJ史b廨>g:N囪b#g2ョ^秦Z值f剴C檞>N宬8r{羰著蔥xo魖毲珿7M"A.c0!粼6爂-E>鬾ㄎveYt蒸M}艂蜍S,"sr"申 P殣R鈭y'IZ.大答誦g壯撤$鴅熸丼蒬m{CZ.[膲やC2) 肪jOA汽*魅mK冬6+ |!DH-:d鐌作!C蹊 .N壆躬uP>濋綿#珋\8p嫟檭赯蔌xめM0DS|艟 E·徽,隴Ix6S4u疽詠貽X(ㄒ#IR煨 娛*蓆WWgjy玤凳`ggg64xoc蛚)J C2岟戴}艕:Ngq鈮堉脂隴} x*$1fww\D地翷sV@媔eY牝棇cjふ鰔^懺鷇i浵4F极r4M<{*{[[祜拔%T嵋悅8僥+I 刃惆h4wONt捲"@?t}~>歠5羰蓳荇榩銓xWAfy砱暪郫魕捽4 忴藜N霈背暾*騆銛r毽5O姤擙稨姷橪>D"|瑤你L$N驛8跲毾雖58@X洭祋9菂洉IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000013.png000066400000000000000000000010451247243200200206120ustar00rootroot00000000000000PNG  IHDR譬l;閹DAT茧磬ZQ?<憌"(奮:d1(Ap毌C %KW蟋颶  ..枟釓A ..;!(|;T嗆 諗={pd& "罶xS|. 嚀聵,譀EMoL] M詖PxCJ寙詔@!#廂;ZxS CA,t歖PQZH髣E剿_食p佗s跪{\''y" 'h>8/'y8>:竅若愯7LN9靷&b1儚憃猻鳦 礨wW瑣V3s胥.ㄡ@.#柮狋\稄um袷VV太>=e8R,溠靇j桄t~J巃n燹Ba峬6ケ 鈺1\驆蠷O&C"宬MX瞧湳uzjYm俚* P苛$狁著縭∴碓(H^斀 苕,&棤6G$荿F? <9/騆z詗c3絇霯Cv]W =Z]I褊f=柎琢6}8R賒w籠L1FT恄入E綞|Q鋈矩罨A$蹦遙2zR梠 }<8惇E;9觭?R@?蕨[ 撕鯪-%{IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000015.png000066400000000000000000000010151247243200200206110ustar00rootroot00000000000000PNG  IHDR譬l;髟DAT茧磬a?爓cS致摍[]J:v*(!Cラ[:4 d竑 t涎@+-C | E錼パ擭;<砓y砓廚|4桄a O]&豌湹qmm葠pw堧闆悰ll r耆弨{rgii錔8>= @6%坫~05纔紎l 8匹メ]房彋( ?鴟鑴t4:簙靷''ぼDV幽?帎>距彋侘0Mr彰W//拷J匆m 驁_濦K8zu<砑7/ 栘J貏z遢-9/P訟禴U當碓鶩蓐 閟棇? 訖鱱賠LべqHw毾糯n)&p?蕨1閃m墼\崀ZIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000016.png000066400000000000000000000010151247243200200206120ustar00rootroot00000000000000PNG  IHDR譬l;髟DAT茧磬a?wW# %Bji丮睨J鴣)提!C祜 Zp]]J%)B,r︵c瑩秞濻<盺y<砓射yd鴛-> 聹RQuoo_ 6O呬YM`c^蟛i聸0嵋漦\1- 黤5r奪TM/栘.\\]%c澗J亙呯4黈茶塝-\I杜*q9籜陳BI 輀閂圉8|播 檉丼28m4芨瑵Д紱=殔\Wu大答nOREIR苛揋*o僾K燹淙IPr[FQ 魤輤WcJFcR['}綈с(丈K涌酖KNG鶝}睄H6x'Iz{r"琢G +(nntu|(TS賳愯謷}8)k>釸39飭CF_K眯i 葄wh椵G繼J IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000017.png000066400000000000000000000010371247243200200206170ustar00rootroot00000000000000PNG  IHDR譬l;潬DAT茧密Q?&濴EMBA0 q!NI瀜t坽誧C!fPp(p:" 9%` 9uP,牾k<纚碏煰貓嬼 Lc x> |盧?-&駂 嶯V祽z嘩&'鈿C@fZ繗4帊鏀竷付 掃@"蜳膮X稛趍$犺g~蔡簡邵鼀檴l壎5噥.錢呯4=眅匴{0|"(3M蹭迍'|s]嚌暩E4M#耹4哺稚,プ蝥Ndn汸N恄n祐TE壆固G( [>GUU忴=頎 壯欺mt]0 TU}擬,4{{r撲s疳*藤C拌j~e=\脂e8J&憝暵笱aH琢/F BADD穻H+dR4+庸忐T$BAa*NK>擤塣嚜梳mo姥蛚%IJEd秤+J橘K玤T麃^Q苛(涷[NM充肪jъQ瑁u|Mcx杴q1謮廩]*狨IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000019.png000066400000000000000000000010211247243200200206120ustar00rootroot00000000000000PNG  IHDR譬l;陫DAT茧磬SQQ每!R 富!p﹠B 3{2牢 (凗K館丫%膝E瑽碕姠朏宨8W#.謮忔婷@眠v晾2)O{捶e鵘琊zq1)忁HN .mn蠉\?)42J[[<4 Y笭癌鰔樵z姮2,/-嬽+懧漒B搽g|'喁s祒&伯邊綜2F扤r|8>+彬Y"琢禫齻@霥\籠$i愁嵹Nk{mM伭8?!蹠766汽*9餡堀礤_栘 蔠皻:蕉(H奶z]/蘾F=錆跫僧 L&%I捽u?X]掝>?宰 7l$5MIm凸1昺}_0倖琇幽宬SZ5H侑n+芮.7_s猗w'@>銊}@IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000020.png000066400000000000000000000010131247243200200206030ustar00rootroot00000000000000PNG  IHDR譬l;洍DAT茧磬a?9/= M嶀慲A![::X蟴pL vC [N咕88 -+|,J4%樹懍y裚y驓セ$J鍊 |鞍?)倓廅m8NR\Lz4kng++緦齬嚓A剕89=石'伯摬2,\逜蓛搤 `V:M苛k>18V6R$I稌 hc~^礵7R枉(`&A僣!_恘x遞輕D充4eE 鬆絣:/6 躨^lmz离鍊rYq皁IR琢謵v⑶蔠了!Ip撫tIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000021.png000066400000000000000000000010051247243200200206050ustar00rootroot00000000000000PNG  IHDR譬l;姌DAT茧磬a?櫡(P%88L2u循蝝A!3N0C%C &D8B{1摋 惉5<洝鴯蜍 O齵'@"鄹 >09^餖煣m豖~, ,K?珫u暑;/{軧k/趼(d2鞷胯F嘲&33稚,ry} 菹 8J企tp濫=鑱KM撿獀檞>稷+颶RHb0,芃P(芔洪秏:系:=z搶F骸<鑽禖骴o?煝,緌殢y1蠷?#襉 _雛:11=Q) Cj煨皻:#柟$4t])崍迋i7\.5摨$命虈zH岶輶蔠凡&I2 c掄"dQ*蚪!綃8\ggfj圩峭琶捧 T($I稢垔!盺8灑n=玤F撲罾$鄉S苛Y,及拻r廁-;瀟:e00LvB錸綜24M祜4愯鎱}r@-EOO+觱*-轔0癉栜蜧軵"/.挎0 T*"8 ,褶>_-殼盺;飭贅 褆u]艕zKD4蕩NO1嗩$蹅緳Y齍\DBT固V輵K}鈉朡#亍$)扢廲:+<2鴢哺詼lP脂i7м彋dY痋y:移鸐年8癵=鉖=凶襆[瑐"IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000023.png000066400000000000000000000010211247243200200206050ustar00rootroot00000000000000PNG  IHDR譬l;陫DAT茧磬a? w Xh )\烑CG fp(聖p鋂`吸A摛〝采l滕撿欒yVx*Z玻"+P6頤貄(肪*鄉A ~'4M玤3u:穌TP固$巔\試j曋褊dv'9,,U霙d&鈾總@E 黂p./栳椯齍?" 彌MsIEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000024.png000066400000000000000000000007751247243200200206250ustar00rootroot00000000000000PNG  IHDR譬l;鯧DAT茧1k"Q?c1f瓝9%B旭贛f 7R啡rD`J 癇 Aa -&-,-旭p@嫮@4c6雷徶w葙攩髼M (蔦寤X y |R燹尖趁, 颽﹠f ^杅CVP@FC$I嚓~_;+JGs柶斢蔠染+*庍嗌粼Y愯癉K琢}輈髭4b6(彭h8鎯9礬槉f0佰jL&8ぎ,沶s +tI拎'I0 h:j鈾蟃夷*MSi菸烋扣忴$承<Ao77+o攩焮赹)*=:nIH莉Q z豬}|鄩蛚EL<菊7鐻虋 {橾wH朾j眢IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000025.png000066400000000000000000000010051247243200200206110ustar00rootroot00000000000000PNG  IHDR譬l;姌DAT茧?k"aFa驚r-l0陭薵|[鎂旲9寋B翡PX 邇燧 -6la嫠)BX廜F@4螗20蟟 ;鯦?xGiw@q4Hl'紁_O@&N粼箬|>.'耡#5 C錴Z栘暹$) 8髮R(R嫸倖rT* l6鈾n溪f部\. p稷`41狘舠燹Z苛4艬K%{tH}罭崑pvv775圉種貽幽b稷S,_稞.厞N/扳x4i鈾 P脂wr,蔙0lo6 R怯x< "l袸,綷霆]d魤楥磽離}r奪闤&轔`衈r嘐簐 淝鏒T葬+I肪j$夯L FCI沌(H俙x臥+o鶈<珃!*;nqK窌^t蒸絣?-h蚼緀4价拴+x媱ze}媰葄0噬惼z挈IEND唇`kdbg-2.5.5/kdbg/pics/hi22-action-pulse000027.png000066400000000000000000000010001247243200200206060ustar00rootroot00000000000000PNG  IHDR譬l;ケDAT茧1Q?莁$$ ,旭bd;謝俳KY嵌 Aa ca衰a娊` Nu`auヌ鷘韣煐諀s慫59P欨2 4鹿W !M愯4胱錴K嘓髻輀渰 譜~蔠臬"-(F!I(M~z隒h不J戊鈷t揙嗦-J嶚nj跱焦·`0p8佰jo儥.軓捽*pj 茇丼Or,媸輎0侈, 0匕(`&a謺棰└]_˙閨T8C崑L庣\揌4苴]羰9tTT俗IR幽n+I,Kl$巔,I縥+氻(噊-Km6$ff粨t.H脂S*才,覭絣欈;>魖6蛚uJ[E揍V 蜤嫚韄>忘h不濺IR喧N#I烯[\$GIR佘喲8ca(@呬R&c苬誓@ 哢xT鈾$u需g嚭x染哎麼恘=屍u]摃珓Д$=!茁h4`0荎絺禎鄉EQ$c怑鵧絩zc{絟@?蕨G` |/[:IEND唇`kdbg-2.5.5/kdbg/pics/hi32-app-kdbg.png000066400000000000000000000023211247243200200172270ustar00rootroot00000000000000PNG  IHDR szzbKGD臠 pHYs  d_tIME 纋)^IDATxhe?洑Lon4mb鐼璅訑B]e榖)B6C52P$W午B0Pd(存?zA+ %Ps裳蚖薚婼踳鷑瀦&A賅碏齏漕瞥/E|墽#` v空 8螤g輞懿9Q`@B旨e z5謢  D軹M4 -P硯Z效$Q 同C|塌?呸~smK$誂bH鼶)P慀Ь瞡湆j濎3W.澿z暯Z%Tk&&聵懻守@)Ar-u餒鄸觤H盓x屺eI<甜賱髕2(e  2 鉊7鳹齈醏毰 碓2A^?=aF﹗w糕1ベ]& Q1鞜夯o 6X郝嬿F蘗盃峋喊搬 /鵻鼵勰{-b怐$&H迒e幎?牟糠鰾;搿?Q5鉅8R恄l^zt$竇q鮕v6彫峘,+羈樽L..R(#顜tge1vn勯eml?Ht<鄲 B嫫v6鯓黻蓻3氀q> 牆Q鼏)枴鯜15O# пqh 艗﹗此[sTJl?溾#P汌Fhob #liheBe5Uzc豋c抔(2b 嫀DlD4FD囡1s縡{~}%:2き{棷w*諵旒p!Z,D,D; 舿擛^$0_IEND唇`kdbg-2.5.5/kdbg/pics/hi48-app-kdbg.png000066400000000000000000000036421247243200200172450ustar00rootroot00000000000000PNG  IHDR00WbKGD臠 pHYs  砯~tIME 隰/IDATxmTW諗y]-RZqm)h-%-h-讋-~(4A5bl!)%1b&h瓏RIABH kvgvw箵s拺;3偵陶3m'鈤昫昫v.L吨L吨L釣郭 "<]b;sG 8(甐z璣9醙4阤癱)筐磠S劣4E tGj蹳FbZ瘨V"c5i第=採o&7`夎/誽'@g;-;8{5K`>兕 E驛 -=P2688箤=l軾Kt≦0x _D=;'趿堰睟[H0l# Sm斧o頄%sA hs:蟂={/螔<473絖粔;魋 旐b{]?Jyp6rw蘙+Xk*Nu諼:狠褆R 饕gKS洫[拲|z鋷ZJ蘪獾 +:>狊錫 嗣y)栚#醨s6鞤[AL<湇,q\=5懷cT溴;_^?禊i就△_m+38Wb禂GL\`]<8c\廓疝O=|管0C儱橡/釘=~笀9r弦=hZ$3齏=gv強鬕牖 Z黏W 〡D |濎90畚簷}x~柍接k峊qg觭脭E}=覂 螵繆凵~淲淼S|馧]|l獍l虌l^}5E漈璨皺鱞坍旽@zQ癿+駴楰!觡憤f砥}姘>qv鈞-b狃砥g#8O兣塘_朐;J}麒/Q乿T磩唚>V+ 入4J)苗媦$0lG{!J(矛9Kw黀гz氿萹4 &齤柮噸O<[D [{ 疧" 陡}臸h/.靳娛違Y3X[B杸'85E噩樆)萊JE#L袬R*躞&F:>d"恘槙sL戴4"娥嶼-槙 蝣3jΥx-癠5ЯQq荃騠O 悗)6 .t+巃 a]洍u}荼9諞歆燔嗌%鳿凎 ,錕牖~V矺I愻槌Zlc蓂'//i9t彿5ku篡夫7r徵etyA砢堇5漏Y嬯,4a儐 7=g鑩:@i幼C\鑳"偉+fAf/ w1(斡J萹Jn,_9檠(T(+W]squ斒-7SrB橢戌H:sJ9;厂傻濠8篜閘i6B繡頻r鼠JT.鐽cm56艷bBn齏fd K\H 4~琩傑罪5詎12R 1e複冥塉6x'紙矻菳伓},襜置麈d椸IEND唇`kdbg-2.5.5/kdbg/pics/lo16-app-kdbg.png000066400000000000000000000006621247243200200172510ustar00rootroot00000000000000PNG  IHDRagAMA abKGD膚 pHYs  砯~tIME !!UN5,/IDATx將1 ? 楟0f 腏(廋ce琠ey fx牢U嶨3\鵱腋槾籯楰>痍壚f廬懽プ\q 啊nAK餟W鮇駟c|鬺 I4).:楔9欱]P倎滿姻葩f%!護韽'j踜s怦@S#袃渡X擰荈- sE笨]s捎&c ~ f魶{#s )靋鳵箑峽)謹{?"1綮螣B奉BRu符^幹35$堆"mO(沆找?p5Lx*z姩呥煞(鐑IEND唇`kdbg-2.5.5/kdbg/pics/lo32-app-kdbg.png000066400000000000000000000014361247243200200172470ustar00rootroot00000000000000PNG  IHDR szzgAMA abKGD膚 pHYs  d_tIME ,' IDATx=r1 ?x差 T彉} 萺u om]ヘ性3# V芀*☆"鄭 >晸せ7髒;蔗M腰碘鰡{禍B茴*P軾厘尼;羯矌z]c9*郘:f洫BW/?蕭Zu< 瘉崳E莿剌o估a:A 旚TU囤d dL忽+Y苲bP~ 趌絽醇 x><連n59&k;羵蘧e褆B9郳Is$c鍛uG├SPG;蒹]cc"b1崨OG晇v趿KuH諢A刊s&4_Y)D苃^B`|LD8絢1紋鯰佚f 捺T藂!pIz.窇#9j l愴睩^8綡H5@咱X;灚[蒙/g瓁K@VR7$: }>YV涑:kxu.^塎"裔f_N菼w9Bm0礑盾EY;9愛olLk上lL7K搓澱z5捕x2j&. 芭g摍l6>投5藙0鷁MMy鑊 1摦wEⅥ1$t幭<錤xc瞍1)楴Jx3抇瓷Tueqb鶚%?麍繖[Co擐/峆IEND唇`kdbg-2.5.5/kdbg/pics/ox16-action-brkpt.png000066400000000000000000000012361247243200200201730ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYsvv}tEXtSoftwarewww.inkscape.org<IDAT8泩A3_h 磺W&0` 斖B/5hzI4絑~聝PLL,ONy^QUgj7"i%i{輓勣(NN(Sg?鴩絘韣=縱kq+]厞鴆蚑鏕惍B5:cr聳9>{,|8l-n-?~t苰J+4qggT1n<壯>}紾賰s{ae AX跡XD_>1 泱66引n蘙E9笒>噷趜6Lp1淰?EA,悸XX_褱歕矛堮uRBt%$h罌壤K.@E婇m遒 閔>杙7!砉)繈<'9&Iz"~PzAc$VX,#L橿腕蕓|7:i6ZA5Px摿o-8Aブ膼老@1F\E, B蝂,("嶵{擉魄砸 @╰勉"к烋謒笻D2FL%3:棜"f.-Ec_﹃5F9b竽2!l樖e1qoS庬v<IEND唇`kdbg-2.5.5/kdbg/pics/ox16-action-debug-run.png000066400000000000000000000010261247243200200207360ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs:懠tEXtSoftwarewww.inkscape.org<IDAT8炅筲Za~>馧PE+$顗*]9!od渠7x/  j !紮_飪sN諏脡e匰=/瀀蟦砓!/鶶啕$扙f章:緳齸志銥誑p8\yP H| Bk.z躇041靄'(狸葩}耔饋/煠n芻8 91 "3廁g4M抹脂_晡#@, E+p蟧7^M劉&呻朒y~u純6=!J櫨!拏暠m牧Be轔pH 0!3B'."\6尟志飁旺待n盈j趯*示聇駢嚪脆滅td5,縣IEND唇`kdbg-2.5.5/kdbg/pics/ox16-action-document-open-executable.png000066400000000000000000000013511247243200200237430ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs:懠tEXtSoftwarewww.inkscape.org<fIDAT8Ak\U禠&M)b癸+ 敨-~n\d袒1_8m.j茄'颮閍s蔇Э闢lp署9諀s,-&很葔6'悷0Vf?>m螴Y~}蓔?葙a貓hwww袽888囔鳷h剕甗酕礵{飹nn;WPUbx1◥|鵯蘡z街犩畣M姱 )/9g而)f0端.羌*6椳)酎咷4妒*篝鬱砉1煰666ヮ*4qHH摐元T霰冾Bi鍪銨溘/l^x霥姖褲_n礐|u徶簟[搨nZUu肛2g6+312Y敞/柯蝦菴"GT孺Cr^湧 佽H)LxIL碖1&'≡驟E岈!攏遐!9gf趪斿坒u偎潿6ㄅU]CD@跾G#YvE簥楺嚍犖lP痶W:)eR6*a.4(T|N- Jb童塺:;N憌_iS3s2 U)/}9ォ誑夼躆/ns(汰露螒p~v﹜!Ac IEND唇`kdbg-2.5.5/kdbg/pics/ox22-action-brkpt.png000066400000000000000000000016601247243200200201710ustar00rootroot00000000000000PNG  IHDR譬l;sBIT|d pHYs樞tEXtSoftwarewww.inkscape.org<-IDAT8積Eu樂:%1l"%┼HQ!dK4~?萺4九)c戈}R$rl ,瀦昵C1{/H鬨V+矹裐3FU?抻簎柰鶠[7VT抩皓雀}州璇鱆z鎮T7oVW姊毹B`墝隳GF窆蓿霓褯9Fv螛6祩KH3b隰G?=州纋sl}4羛r4斲櫍_.~[段u @yd bc闕c柞$Μ,覬罰恨鷓昔(P}@鯀k%!0瓅=蠻Aa:yb{F! [:s`弨@俴伢己"M釋9U怋8嶄U4&lX蝎&舲Ur獧G姓擿埂鱗O輿ウIg蝁bul1rFp[虷_呲j雝結2*泊LYbSX1蜿\n蕼纇o奚#0鋦wx鷾嗔5氈店 *2kQ.螄c愔ヅ7_h沫Φ佳'KBS:V氻=箇耆o蝫 m{!, +H焋b;#Qcku摍T啿蜞x善芽eШ@俔 9Y羶/諳4[瀛愜JWIEND唇`kdbg-2.5.5/kdbg/pics/ox22-action-debug-run.png000066400000000000000000000014341247243200200207360ustar00rootroot00000000000000PNG  IHDR譬l;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDAT8顈OHq豵詙u[m- C:t鵊%X$ Dt I霍蹅=-啁 靚Q$$銵d坫牉 醠醠恟螈薍v蜌⑦}x熨摍?=閐*--=J光;;;Zf璇氪絻D677&&&ap4L$鍕摽3 餃m_+---嬿|^QVeYS$ef}vw1K%"鼶>癰*R$I縣怗*dY^錮D^nil(D栜霥5M栘4=7c瀔}aZn彋 臇m.祄淀箙DD[my楥楶總0]QQ扞b柼P~$Dla蔂鋠恌jl嶞瞠q狁_撚蚙抯RU鈾粼=耐Q4,/庈4逍鉔擤 hZD覡"Q555登N哽樧opUNK7k帨8P鼉r檍柺Q萄(柏^~9a雒聒謠牧G解 "( "X@ 繟vv浂楅篎^|e聧SB!AE謂蹁ZZ粕 D]L&俇疀4狚9lv簊QSSSmMMMK<祳3S___ク3妺0轔paAQowuuAIz{{蛶q蟛CIEND唇`kdbg-2.5.5/kdbg/pics/ox22-action-document-open-executable.png000066400000000000000000000021221247243200200237350ustar00rootroot00000000000000PNG  IHDR譬l;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<柟DAT8U諀[U3=3妀I'┼"胄P署aV棳s摲誆PP鵡輂劁# 1#I&3=衶的蝮!l臗(肥9裐=bf< 樻3o旽徆 偌渭灖荍?j@  2 .\+1鵰kff23蹗膊澪sri葞1/玵芺u靿 @需>|爞棶b趄恘狤vo檳f抰w蜡蹝撽觠/#MSVW;699!"梨TUmzzZ端.>啾妶3'0 !(*銛N志AU13熨廁-Z C妦d牲蕢G8\茹x1x/(佬m撌蕱渴屪枔鶝$I驊K諶搗耹4p姳_)< #,納&H8卓n\fjr~諫巠 fFQu&w鎏AUq恮彋尰兟G廾k0皊v物7+mR%eYc( 娉]d鍥s義g:掛謣!賦O\YEuz尖>4Mx1眸僇秎'Y\黈r罭0T屖zjY`郡盳W8欉O$%:S靦RO的兇<盭$嗖V2鷸埌3k 冱mgU$;/f1h祂 ,)&3c玲M邸[c "8'触* UbT踒dTH=K0%躓竹痕5Ha+*饇馫jFYF:sgIゆa8揗絳xjCD泛艏伐4T+5{j庴您V=Y紛啑跎zJsc,>x(^!RI-[4\牲Z-]照f@F0 *;#犦Q\,-糰畿@Q顁欘, 磼謋染eE積c|. yx\G無齞┌IEND唇`kdbg-2.5.5/kdbg/pics/ox32-action-brkpt.png000066400000000000000000000025121247243200200201670ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<ケDATXE宋曘 :wIF!+ c讈婺aI糎輮 f `喭d とB妀dx塛旁qQ挻|J譹wu}_};妒DUy芞Tt 庢ffOif.zVa t) D秺錝W>;G輓M給扜_~囊o ?(|饈紉玕vX?6K|Lae/KBQ栨l悖鵫o7濊ht |葔w峔^芏賦狶Y8!YtrD`,蹔?[瘀洞D>?3z鷾sH頍彖y籽;Y澥z=_$F潓給屼;i虌HLe膾蕞lT翅}ω鑨/駉?.=飆瓶W煰Q蓿碙/?]5楏譇G觭魖報3<<AAm揅b机a藣 塙.姻3dAug*I漜$Tj]$犗d4DB彋,/& +#=vu.[K甸,S軶帄D谿獧$翥R.Yx|~R:O53{ X$j蒗k癚桍丼6\Y&6衰紶]R籣]\XIX@jf.,績0D鞥$?h&lX偢K〈歙/宄崍 濫 YN$ DL嫴幮$*呼陫%⑵zG哞+Kff&阪U0煚c 步. =q氧]@$e湴{gI~3E6\hLMj4m培 豁Yj G,C_h臗@1ZD愕{#fH輓Fx2:2& 胈&|苲蟋 8媺r毆湝z+媴1Y銛  涀3? @蟶殪娙{fh毾輓M>70)翟{衋0d6$畾 庂on 淂<而AL6~*色淀BmrqR 輀u0@膷k$U糟%l)楉壚舟nKHG:a肓H5^漵[涿nJ、激`B嚷/)茉{[贄c8h鵫o咇迪0擗mP灝&雌K;磳Q周魕亂IEND唇`kdbg-2.5.5/kdbg/pics/ox32-action-debug-run.png000066400000000000000000000022521247243200200207360ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsvv}tEXtSoftwarewww.inkscape.org<'IDATX_HdUЧャw捏胵e,逵邍侘Z ,>賈C=酁O,梴浿i%#+f緧握适具3蜼抻攩?Qb8.|騠0れ0#蝖<療鼆`qqQ驆瞋煨-200p矠鬄A鈆瑚r鈾塹桽v志Y0<<l倏梪ぢ砅v;踠:N"劃(***E歐旄q澀!ddd$X[[["! H@UU0唱O0M牧釐%j 牣1655羻截),匼稄牧 !B犪(TUE<④擤ЯdK/_腱→Dr:剉簉 }臄 珔`hh鋂QEQベBN沌頨 M羖:N!s0軔衲m2斁謞2==RaaaEUU]E頨'b>奭ぅx骴玸k夷B牋噮`僿驁'R祽鞈駔t蝡~k3獐栟湀fKK肙I璩<"~[KP筡 漁R控敗K_ 截鈍眳}q螝/螫L[Eq-3] &▽ 5訏,豈冢8,R;px ,帛mD|賠0`1f孇V碫x%<蔠pw ~?欹琮 XHPc熧ls迋芺 愣4jNMMf&4M·翷+~壞saa摍1 @Ngra,c稄焣koowp577佫玒iiuuu53ぬ桽鶔趄M+Sf菛犚::??_眢袚Y攮NNw 蟂8JGIEND唇`kdbg-2.5.5/kdbg/pics/ox32-action-document-open-executable.png000066400000000000000000000031361247243200200237440ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsvv}tEXtSoftwarewww.inkscape.org<胔DATXM\Y諀>牧?3旋d ':c d簊a簍V.pa J6鉐MYHp0CD#巉蘶w2I漣?芏攁{U齛肩hr(篨S?庣邵"芞Pt瞰7歉愬'N2IXU5砓眴[o^徵q齈悕S呂;搗>h@a紗)鍊z橏 0ca簨琢LMM蛃]裨纋> CE囔/n;瞞?噊g蓐7n(饕凳>廢zzZD爪]\\鐎鍌駌δ抱曈g狊結聆o瑆鏀覢輝L駹Y3s輿|o0111牧0顱胥U窱N低EXk !0??黚_錚蜰覤_隨 彉Kr$IR輝 H祗苔arr淘sB嚀棇Y{僦欭葙莖`馣j螹钁避w!財/nF3fffp挓\泚ccv膂f蛆Y,,,crr4MQUT(_熬eN踳鷳鰽3P 仿c僁澱酋:窱5炸廁:bc *錭$I贅UU9ュ+胯待^M璨kT^)Gf扣癉延 ! "枇$I鋦裨:T<甮7獟T>g+淏8t 牧 28挨>傝譅79竷lmma郊軓蟣灺d鍹婉氉e}cCy0}稗羌.r村:膳t呤藑#B(榴[扶le 洵n7//q+HeY焂{羆飹蠝 +褞$,#249{52'/r$v{枇璡[k帚 摙2鰶^C妅緄>U石266,帚L`y_ 鉽>粞V~bW;駁饑媝>1"&M h毣@0p1滬譧o"↖ヅ#咂拓#kQM="v=pAH皪蠩E反剔#佗4Px疕鷢槮  遻8Lヮ鑏B,%m >貙薋*T煚6I(MЛk$Q;煉 0"甒FPO匆tF%穇輁^;麎Fe.M\;d冠崍X慣眻}鋗G)ひdU 2苶HoUIDQ>7 J/dEA[*AeP{5盬覿迪趒臼涒稰6傘憐"l囀0:K\龕黕-蓀{譭"嫭認g@{默輇隧鴒~沫b礜懃k炾堝 IEND唇`kdbg-2.5.5/kdbg/pics/ox48-action-brkpt.png000066400000000000000000000043301247243200200201760ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs a a姁%tEXtSoftwarewww.inkscape.org<UIDAThG砧夙vfg糊蓌e+G)!礪$B槙: ,NpCrk.fc aK) BY{mg=嵧CUuW齂髶lZ=鍪浦魄覛熼湲Uy雡x媎'苵\ m蠫=城px8>D%p!~陣鰇+Wz顜+&焺錏特\B廓w繵燧`5p 牘摍 tdZ毓(>煍嵃禓p艬)n9U~K獙z~跽摛(導,錢*K/褥雸1? 8Z%Z葡@%(p- vn;|甌E`塼;驊vRu \g cXz噞潯z佫H'C,P9,2.訇蕩'慱c僄播龔3w脈R蜷麼3詗~l氤潗妳 X噌鸕[9憝1y軓" J蕇\T5幮禗舟礁蟶=Ⅳ嗏笎鑗`u肆? Fct<紙 OBD..荷瓨^XUa贉o#<#?Z|+狩ul061N2S丙捃Ls謥1籧#.]?k"y唑獫8O躺m罭8煦K嚼p.<U鶦(氪'7翥6醋~p `5+轕k"蠽&啦 8歜g_O:Q2騑|tq+-j-,協翁 '3E蔪6 嶮51e" 5沝狳蛛gw&衝l -嬭f0涍pY暯E&8茠,刷Y$Z磽H祁8頰扱m: #槽2m&,I^M((M U斥Mp M>bI! 鶌6佖龕 &L\E鏡kpjR%ERW氂[m "寇 睩x?6w揲/3dYX鵪牚霖 食k蝬l\Q(0彆i8g&o咠a  m)瀅-$4IH曾!$髮y魌緻阼晝us7閾X,蹪j'uxLh吜#1予+/穚S賜褾硃;B彋fHB0%R+齪#捅(材琚婤N^濣j橁萛("縗噸Gs_o鍶{栒穇GS撚;縡?脽L1#_<弼Mt8q破檛u逋s:皤"?t?Ox  sbIEND唇`kdbg-2.5.5/kdbg/pics/ox48-action-debug-run.png000066400000000000000000000036631247243200200207540ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs11當(RtEXtSoftwarewww.inkscape.org<0IDATh濲mhT~庣龕3t&]痣'釩(BI((蒸袟赫賒E B[躓釕 焰.跆 bKdi麶Z〣迡A粑肆奇n潀$&1Lf獙遊璒&薴Pl (6fYZ(C覢錓_4Ma飼}}孜n搡Ν 抿2S r姶膮稢噢曄禂 B鄉腃=菖駗△4Br譇鞠 ,(皕眷r痶Δ5o煆稄N疘岥9嬂NB={柵儀蹼稄冓 裯縩牧芰轍艟覈r%;w鍐藤蹶饃樆蓬^署嶂 6(H犖:迭{(VfAQ!@w=呇1H)旄崀嗾澡愖;V茂B(fIK)H$`&詮 爵42莿漁莮餬E&'L1語cSSS_{{暻.800444摷躤@/L%0pgF鄉繹m鐀羺悅7sB(簏/篊重=Jn獷"倵睆+1ォ<G2D0盺{辛栘鎈<朸leY鶴鮿ぢwr %璒M閑u貤牧gK2 #`鵵芨車核cp]PURJ△ <6饒R═8 iD"s籦跕2弔FP4E蓍g媾潁7*?MD>AL?MJiD酓,]煽LQXP橄.|t. ㄈЩ淕X齖b"蹠|苴楥揅-:8昝;vP澱ㄦB@ 挎宛罫誻q箠陊ぢk眲ySU迶N)牧pRJPJ栠 併7?瘩莘逿嶸TC ㄈOy羯?"i>s齸g薳"存!J氐^2 sH)qwp B4$l乃l0磧H-袛{.蓾茖赮竇愮*嚵)c 妻 嗅PE︶瀚Xa9QQB皎4m !=ge(膌E鞳 4I #i2蝜"眅彿 g攳堡M漁鱦帷#-F蓱帘 牧p]R,Z▁誆 呻9%B@-!6>OC a`○連炯陶4芴L}仇澱咼)鸉@檡/v鄴g&ryZ{纕B+***,Y-逅~a`礅/滽 tTPC3瑩剚iZ|<蝸緻絕2 夗 ef覢膼○;鄂) L聽K~惻椏袓嵹8\脘 W喙U,qTT牧p]eOc FuHp唴毦霠躪0號輍$`茼M介塒·H1M\UU/9p'mTU㏑:t]稙 >琶裯->q醛鮞}縑螻段弔=.妡暆U4踫襶EQ楗夷Z僅{愘ベ`6FGG7n =D@ #`#'檭"餭bxxx撥痳4[6{G#鴈^RfB鐀礨!珜= 9T聸 \駏#ィ纆WSJ/桽挻n``utt}鼀鰭D"HD搖搚?4W娉纙0也]]e倚/鐔蔊J3"G%鄵迦氋晛;}t+x}}-[閏瞌H\雹%v鵵狑搎w<|ett舋緧m3@Cp'O_帳E鎏零y>y與fI9!颼:蒂>MMMc+EQ9賧闡DW還>y素+>熠Y齪bcV@械_纈9(EIEND唇`kdbg-2.5.5/kdbg/pics/ox48-action-document-open-executable.png000066400000000000000000000054141247243200200237540ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs11當(RtEXtSoftwarewww.inkscape.org< IDATh]]据k1掏q3Ic;霰(Tjp$知!UU冗蟟CTP)哭櫐U孜Drh:-  6w戇s旛_y8gl\\暮賧堰^犅哮q$汁'Y7*x潣x蟼9絮音)%熨鍶茉篩錫涒/{抬謰迶蒯③o搡5w爞?鎦篕,萁兔貪苛螐M9 w睛龍=ggff駛蠈7縔≧lf"2戙愯#@ T/---=w<譥?6 忘?鍊?浨浡筎C#掗穆洞鏻kW珪}靻_滕 陶陶?x磡杠馽帷摸揇紗祧q蒩=麭'[俳0縜怵n睫n?'N徻輦o熱萺諺%_縎(休祼磭紋禡o:t霂x~鷬/..n戤豲鈄w7.?熥_}西4pamm棇Yb/簾4NDp帢犖忤緹G獊秤鯞+y蔝 yG~坌^%娶穌5J`寵奀蝹鱕R"@7o覈於7{ 牳5/祒7Se媶.*nc$R"R*bpass槫e棉昑3A麎RbffV& 麍捄V+T9A q孓3{7葝濡*W&QJ志amm#F澭iB\緲"???O需$s!p瑽?c蛖~航帨|y)pe)螝f 慳f@M} yx c J)B\魯v銓嗈u萋#~煰黿犖杇6!sx9醭繐Ck廝b/S劁%M萹樀J煰熨lllp樀爟舄Yq_/暋Z+W*Cx鮤挓ciyd夸15&;颲s9T!厞玃t:旽垝 KPu鉖蘬)戍即ZZ璿O諙yN貓ga>z輵L 擐圯)縷絮1FVVVh48艏欹筌狴K\裯2尌跂机y雩x?r'&J LV"茩<@7看x~k=J)RJ816愯7/敷ND%.'G嗛'llleyW)yan_6;u10A騫Z齴`芭5娀幬媳詙9WN?9{[樲砬K>傀5鏀=鼓O蔊<啄""<麡9!lc鞃伙\T'鑾5yJ姪鰷k蛃*]邱9*@Uw愬[\m.掑幣4v3w&麑坭}RU儓z+wm!NnS&b 乃鴙6敖p)$}襳M4jD氅7;熨鐉*x萋﹋y路=\#眲3丐.su?縑:xw硈禽\~甍咐9喋RLlv{櫪 搌岯3 反堸f龢DT58"T熾* K黚統趾廂mb,*絆Nd厏$栝饋v罰4$欿r慳F銆爃WL)M@>""丼?||.|鞤 齟 !".嬞颯1v賄P)戤矜)m)"A)\瘀沷摨岶饔',P)` (T嗇c$$!" 誆@ 蟒TU醯ぢ Z幻鸏c莔-哩/n繼吵2奷JXP*剽6繳FanP汪E.<騪-H@鑳w3 7Le 啑捽s2劣咱偋:~J二懺wp獺% 7Mf瞵鞡})巑1弧GiUZM60嘍P%is萑仚z伯軟2度|舍(4 #F4p'=椎(S歞頑E )拗N詣埌P"*透43蔡崟5郭鶄+$,倆孝YRj{?被烍jd=y眶$D梋优^VZcuRF咧ペ`伀f|K2f7Q#瞲/z0)捈,4y馣岨RJk2M礙 f跬(1伐:;Mx慉58z& !U蚝攕5ZP胎F.L.4tC俎"%Kc彿"%I虹f牝牯n孳TR柔蕝M "}V(,Z'1F|M \厬rc仚虨 }W牯nZ牾3慵K泹;n4D#F蕤i5q嵬JKx4h砫5(玄'jK6JV摒鈿LS箱L优新!!鰥侳"2[ A'猑笝楩 R紘翵G諆uk>)Xz梁-V8(鏑s杓q箑 淙鼨撩挽顲+6 >㎞I;PA$GAK斫まs@ !jX歙X+F何Q)%uw]7=P遊烜 IU)5d7!1奓pi旂N;m鄤杕泖QP敪H; 奘軿{˙Α炴髆E颬逃y楌陾w脣G?}f*/+{Zf朄Jo軋4pw}:>論媾轚薕氅嶓鋞}_J鎍鎎 煒潯]@ cp滼諙w8`仙|5P8I<儤咥dу蜍,篠T_uIEND唇`kdbg-2.5.5/kdbg/pics/oxsc-action-brkpt.svg000066400000000000000000000111041247243200200203600ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/oxsc-action-debug-run.svg000066400000000000000000014014101247243200200211320ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/oxsc-action-document-open-executable.svg000066400000000000000000002507441247243200200241510ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/pcinner.png000066400000000000000000000007041247243200200164400ustar00rootroot00000000000000PNG  IHDR 揰sBIT|d pHYsAtEXtSoftwarewww.inkscape.org<AIDAT(將TQ9蝞vC` $v>/`陌aeC%[ 臘 Z〉7+3? a &丼噶鷤l殦EV$m悛:{9靆#}YS{8$齣{i渙秬狸g僗%P ^eh0韡6戮p橔S鱱ExSL`H:;罃EL舽⑧+G| %zqf幍El帡a 薄u架bn鮶む綹$顉TㄈW}B{^bSw%'&銫窵T!F曛騺8虋9&Q摍碼狪炱&孑欄辯?y\o||IEND唇`kdbg-2.5.5/kdbg/pics/pcinner.svg000066400000000000000000000113541247243200200164560ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/pcup.png000066400000000000000000000007621247243200200157550ustar00rootroot00000000000000PNG  IHDR 揰sBIT|d pHYsAtEXtSoftwarewww.inkscape.org<oIDAT(珨K#q獰鮡|麴bw9k++K恨挈倷N+磷停?=h%!ABw榃,>饘觿13炒v窶/淍o7薂\宵9:O蒶&4M)LgK'倇fZ00 B+媷{VwI麈蛣菫L6?信cy淂2+虆茱毀侍呬;攃嫷!仂6NI`H趙魅汨 錐;7蔝P|<握H鉗IEND唇`kdbg-2.5.5/kdbg/pics/pcup.svg000066400000000000000000000114601247243200200157650ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/pointer.xpm000066400000000000000000000004421247243200200165010ustar00rootroot00000000000000/* XPM */ static char * pointer_xpm[] = { "12 12 3 1", " c None", ". c #FF0000", "+ c #8B0000", " ", " ", " ", " ", ". .. ", "+. ... ", "++..........", " +++++++++++", " ..+ ", " ++ ", " ", " "}; kdbg-2.5.5/kdbg/pics/watchdis.png000066400000000000000000000012231247243200200166050ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs|tEXtSoftwarewww.inkscape.org<IDAT(?hq鑣鵁r4з)(疋}PL 7C猾;鑠"靪p&*捸士E@+HI巧Im涂嚝 Ri潯爍暮&MWK7M栯q槷. #攀嘌澣儢\~8雲%oQO{o]}(鏷癪~;澽 Wか總魡咐~yU 紬冓圜{"踙榡抽R移We廡繵Jg丼侈濊(倫邆t(is fB窵邊謪V ,q懂尰嫖褾e vY(,:ReD 鞔>.燁"C$鼷榮T祫d"cv"'oゆ陾淖迵ㄖ蕷?X;窐?鉬) 介 `T>Bel1f KK!u+!moκY??x樓啐瀌傅碬.茲廔)>;339=濌摩#H4H4胎&$ⅦI荋峷8爂(寁致腥`C夷疽琢篔u[UU >蒍rIEND唇`kdbg-2.5.5/kdbg/pics/watchdis.svg000066400000000000000000004150321247243200200166270ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/pics/watchena.png000066400000000000000000000012071247243200200165730ustar00rootroot00000000000000PNG  IHDRH-sBIT|d pHYs驀稌tEXtSoftwarewww.inkscape.org<IDAT(OHgw咁v詙 -h!@幀%CDB艼'橯 o=川蟨A摭d駬$]拴 %踘l飀衧檀鴯)"畹窉5;a蜛$""潀2畛嶉9y鎤瀔clk=8=駒闛nn"@4鸏跖b祭 ev5軷#@\Q峻龑2訹悔z崵紋鋋クDD飥#H揮'yf0::+"'/崑牲紫闞m]oiq魌適h4Z魑申樴}昊渟疀]D 炆 5;QIEND唇`kdbg-2.5.5/kdbg/pics/watchena.svg000066400000000000000000004156031247243200200166170ustar00rootroot00000000000000 image/svg+xml kdbg-2.5.5/kdbg/prefdebugger.cpp000066400000000000000000000033251247243200200165050ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include /* i18n */ #include "prefdebugger.h" PrefDebugger::PrefDebugger(QWidget* parent) : QWidget(parent), m_grid(this), m_defaultHint(this), m_debuggerCCppLabel(this), m_debuggerCCpp(this), m_terminalHint(this), m_terminalLabel(this), m_terminal(this) { m_defaultHint.setText(i18n("To revert to the default settings, clear the entries.")); m_defaultHint.setMinimumHeight(m_defaultHint.sizeHint().height()); m_grid.addWidget(&m_defaultHint, 0, 1); m_debuggerCCppLabel.setText(i18n("How to invoke &GDB:")); m_debuggerCCppLabel.setMinimumSize(m_debuggerCCppLabel.sizeHint()); m_debuggerCCppLabel.setBuddy(&m_debuggerCCpp); m_debuggerCCpp.setMinimumSize(m_debuggerCCpp.sizeHint()); m_grid.addWidget(&m_debuggerCCppLabel, 1, 0); m_grid.addWidget(&m_debuggerCCpp, 1, 1); m_terminalHint.setText(i18n("%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open.")); m_terminalHint.setMinimumHeight(m_terminalHint.sizeHint().height()); m_grid.addWidget(&m_terminalHint, 2, 1); m_terminalLabel.setText(i18n("&Terminal for program output:")); m_terminalLabel.setMinimumSize(m_terminalLabel.sizeHint()); m_terminalLabel.setBuddy(&m_terminal); m_terminal.setMinimumSize(m_terminal.sizeHint()); m_grid.addWidget(&m_terminalLabel, 3, 0); m_grid.addWidget(&m_terminal, 3, 1); m_grid.setColumnStretch(1, 10); // last (empty) row gets all the vertical stretch m_grid.setRowStretch(4, 10); } kdbg-2.5.5/kdbg/prefdebugger.h000066400000000000000000000017671247243200200161620ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef PREFDEBUGGER_H #define PREFDEBUGGER_H #include #include #include class PrefDebugger : public QWidget { public: PrefDebugger(QWidget* parent); QGridLayout m_grid; // --- the hint about defaults protected: QLabel m_defaultHint; // --- the debugger command protected: QLabel m_debuggerCCppLabel; QLineEdit m_debuggerCCpp; public: QString debuggerCmd() const { return m_debuggerCCpp.text(); } void setDebuggerCmd(const QString& cmd) { m_debuggerCCpp.setText(cmd); } // --- the output terminal protected: QLabel m_terminalHint; QLabel m_terminalLabel; QLineEdit m_terminal; public: QString terminal() const { return m_terminal.text(); } void setTerminal(const QString& t) { m_terminal.setText(t); } }; #endif // PREFDEBUGGER_H kdbg-2.5.5/kdbg/prefmisc.cpp000066400000000000000000000045531247243200200156600ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "prefmisc.h" #include /* i18n */ PrefMisc::PrefMisc(QWidget* parent) : QWidget(parent), m_grid(this), m_popForeground(this), m_backTimeoutLabel(this), m_backTimeout(this), m_tabWidthLabel(this), m_tabWidth(this), m_sourceFilterLabel(this), m_sourceFilter(this), m_headerFilterLabel(this), m_headerFilter(this) { m_popForeground.setText(i18n("&Pop into foreground when program stops")); m_popForeground.setMinimumSize(m_popForeground.sizeHint()); m_grid.addWidget(&m_popForeground, 0, 0, 1, 2); m_grid.addItem(new QSpacerItem(0, m_popForeground.sizeHint().height()), 0, 0); m_backTimeoutLabel.setText(i18n("Time until window goes &back (in milliseconds):")); m_backTimeoutLabel.setMinimumSize(m_backTimeoutLabel.sizeHint()); m_backTimeoutLabel.setBuddy(&m_backTimeout); m_backTimeout.setMinimumSize(m_backTimeout.sizeHint()); m_grid.addWidget(&m_backTimeoutLabel, 1, 0); m_grid.addWidget(&m_backTimeout, 1, 1); setupEditGroup(i18n("&Tabstop every (characters):"), m_tabWidthLabel, m_tabWidth, 2); setupEditGroup(i18n("File filter for &source files:"), m_sourceFilterLabel, m_sourceFilter, 3); setupEditGroup(i18n("File filter for &header files:"), m_headerFilterLabel, m_headerFilter, 4); m_grid.setColumnStretch(1, 10); // last (empty) row gets all the vertical stretch m_grid.setRowStretch(5, 10); } void PrefMisc::setupEditGroup(const QString& label, QLabel& labWidget, QLineEdit& edit, int row) { labWidget.setText(label); labWidget.setMinimumSize(labWidget.sizeHint()); labWidget.setBuddy(&edit); edit.setMinimumSize(edit.sizeHint()); m_grid.addWidget(&labWidget, row, 0); m_grid.addWidget(&edit, row, 1); } static int readNumeric(const QLineEdit& edit) { QString str = edit.text(); return str.toInt(); } int PrefMisc::backTimeout() const { return readNumeric(m_backTimeout); } void PrefMisc::setBackTimeout(int to) { QString str; str.setNum(to); m_backTimeout.setText(str); } int PrefMisc::tabWidth() const { return readNumeric(m_tabWidth); } void PrefMisc::setTabWidth(int tw) { QString str; str.setNum(tw); m_tabWidth.setText(str); } kdbg-2.5.5/kdbg/prefmisc.h000066400000000000000000000025271247243200200153240ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef PREFMISC_H #define PREFMISC_H #include #include #include #include class PrefMisc : public QWidget { public: PrefMisc(QWidget* parent); QGridLayout m_grid; protected: QCheckBox m_popForeground; QLabel m_backTimeoutLabel; QLineEdit m_backTimeout; QLabel m_tabWidthLabel; QLineEdit m_tabWidth; QLabel m_sourceFilterLabel; QLineEdit m_sourceFilter; QLabel m_headerFilterLabel; QLineEdit m_headerFilter; void setupEditGroup(const QString& label, QLabel& labWidget, QLineEdit& edit, int row); public: bool popIntoForeground() const { return m_popForeground.isChecked(); } void setPopIntoForeground(bool pop) { m_popForeground.setChecked(pop); } int backTimeout() const; void setBackTimeout(int to); int tabWidth() const; void setTabWidth(int tw); QString sourceFilter() const { return m_sourceFilter.text(); } void setSourceFilter(const QString& f) { m_sourceFilter.setText(f); } QString headerFilter() const { return m_headerFilter.text(); } void setHeaderFilter(const QString& f) { m_headerFilter.setText(f); } }; #endif // PREFMISC_H kdbg-2.5.5/kdbg/procattach.cpp000066400000000000000000000202501247243200200161700ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "procattach.h" #include #include #include #include #include #include #include /* i18n */ #include "config.h" ProcAttachPS::ProcAttachPS(QWidget* parent) : QDialog(parent), m_pidCol(-1), m_ppidCol(-1) { setupUi(this); on_processList_currentItemChanged(); // update OK button state m_ps = new QProcess; connect(m_ps, SIGNAL(readyReadStandardOutput()), this, SLOT(slotTextReceived())); connect(m_ps, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(slotPSDone())); processList->setColumnWidth(0, 300); processList->header()->setResizeMode(0, QHeaderView::Interactive); processList->header()->setResizeMode(1, QHeaderView::ResizeToContents); processList->header()->setResizeMode(2, QHeaderView::ResizeToContents); processList->headerItem()->setTextAlignment(1, Qt::AlignRight); processList->headerItem()->setTextAlignment(2, Qt::AlignRight); processList->header()->setStretchLastSection(false); runPS(); } ProcAttachPS::~ProcAttachPS() { delete m_ps; // kills a running ps } void ProcAttachPS::runPS() { // clear the parse state from previous runs m_token.clear(); m_line.clear(); m_pidCol = -1; m_ppidCol = -1; // set the command line const char* const psCommand[] = { #ifdef PS_COMMAND PS_COMMAND, #else "/bin/false", #endif 0 }; QStringList args; for (int i = 1; psCommand[i] != 0; i++) { args.push_back(psCommand[i]); } m_ps->start(psCommand[0], args); } void ProcAttachPS::slotTextReceived() { QByteArray data = m_ps->readAllStandardOutput(); char* buffer = data.data(); char* end = buffer + data.size(); // avoid expensive updates while items are inserted processList->setUpdatesEnabled(false); while (buffer < end) { // check new line if (*buffer == '\n') { // push a tokens onto the line if (!m_token.isEmpty()) { m_line.push_back(QString::fromLatin1(m_token)); m_token.clear(); } // and insert the line in the list pushLine(); m_line.clear(); ++buffer; } // blanks: the last column gets the rest of the line, including blanks else if ((m_pidCol < 0 || int(m_line.size()) < processList->columnCount()-1) && isspace(*buffer)) { // push a token onto the line if (!m_token.isEmpty()) { m_line.push_back(QString::fromLatin1(m_token)); m_token.clear(); } do { ++buffer; } while (buffer < end && isspace(*buffer)); } // tokens else { const char* start = buffer; do { ++buffer; } while (buffer < end && !isspace(*buffer)); // append to the current token m_token += QByteArray(start, buffer-start); } } processList->setUpdatesEnabled(true); } void ProcAttachPS::pushLine() { if (m_line.size() < 3) // we need the PID, PPID, and COMMAND columns return; if (m_pidCol < 0) { // create columns if we don't have them yet bool allocate = processList->columnCount() == 3; // we assume that the last column is the command m_line.pop_back(); if (allocate) processList->setColumnCount(1 + m_line.size()); for (size_t i = 0; i < m_line.size(); i++) { // we don't allocate the PID and PPID columns, // but we need to know where in the ps output they are if (m_line[i] == "PID") { m_pidCol = i; } else if (m_line[i] == "PPID") { m_ppidCol = i; } else if (allocate) { processList->headerItem()->setText(i+1, m_line[i]); // these columns are normally numbers processList->headerItem()->setTextAlignment(i+1, Qt::AlignRight); processList->header()->setResizeMode(i+1, QHeaderView::ResizeToContents); } } } else { // insert a line // find the parent process QTreeWidgetItem* parent = 0; if (m_ppidCol >= 0 && m_ppidCol < int(m_line.size())) { QList items = processList->findItems(m_line[m_ppidCol], Qt::MatchFixedString|Qt::MatchRecursive, 1); if (!items.isEmpty()) parent = items.front(); } // we assume that the last column is the command QTreeWidgetItem* item; if (parent == 0) { item = new QTreeWidgetItem(processList, QStringList(m_line.back())); } else { item = new QTreeWidgetItem(parent, QStringList(m_line.back())); } item->setExpanded(true); m_line.pop_back(); int k = 3; for (size_t i = 0; i < m_line.size(); i++) { // display the pid and ppid columns' contents in columns 1 and 2 int col; if (int(i) == m_pidCol) col = 1; else if (int(i) == m_ppidCol) col = 2; else col = k++; item->setText(col, m_line[i]); item->setTextAlignment(col, Qt::AlignRight); } if (m_ppidCol >= 0 && m_pidCol >= 0) { // need PID & PPID for this /* * It could have happened that a process was earlier inserted, * whose parent process is the current process. Such processes * were placed at the root. Here we go through all root items * and check whether we must reparent them. */ int i = 0; while (i < processList->topLevelItemCount()) { QTreeWidgetItem* it = processList->topLevelItem(i); if (it->text(2) == m_line[m_pidCol]) { processList->takeTopLevelItem(i); item->addChild(it); } else ++i; } } } } void ProcAttachPS::slotPSDone() { on_filterEdit_textChanged(filterEdit->text()); } QString ProcAttachPS::text() const { QTreeWidgetItem* item = processList->currentItem(); if (item == 0) return QString(); return item->text(1); } void ProcAttachPS::on_buttonRefresh_clicked() { if (m_ps->state() == QProcess::NotRunning) { processList->clear(); dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(false); // selection was cleared runPS(); } } void ProcAttachPS::on_filterEdit_textChanged(const QString& text) { for (int i = 0; i < processList->topLevelItemCount(); i++) setVisibility(processList->topLevelItem(i), text); } /** * Sets the visibility of \a i and * returns whether it was made visible. */ bool ProcAttachPS::setVisibility(QTreeWidgetItem* i, const QString& text) { i->setHidden(false); bool visible = false; for (int j = 0; j < i->childCount(); j++) { if (setVisibility(i->child(j), text)) visible = true; } // look for text in the process name and in the PID visible = visible || text.isEmpty() || i->text(0).indexOf(text, 0, Qt::CaseInsensitive) >= 0 || i->text(1).indexOf(text) >= 0; if (!visible) i->setHidden(true); // disable the OK button if the selected item becomes invisible if (i->isSelected()) dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(visible); return visible; } void ProcAttachPS::on_processList_currentItemChanged() { dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(processList->currentItem() != 0); } ProcAttach::ProcAttach(QWidget* parent) : QDialog(parent), m_label(this), m_processId(this), m_buttonOK(this), m_buttonCancel(this), m_layout(this), m_buttons() { QString title = KGlobal::caption(); title += i18n(": Attach to process"); setWindowTitle(title); m_label.setMinimumSize(330, 24); m_label.setText(i18n("Specify the process number to attach to:")); m_processId.setMinimumSize(330, 24); m_processId.setMaxLength(100); m_processId.setFrame(true); m_buttonOK.setMinimumSize(100, 30); connect(&m_buttonOK, SIGNAL(clicked()), SLOT(accept())); m_buttonOK.setText(i18n("OK")); m_buttonOK.setDefault(true); m_buttonCancel.setMinimumSize(100, 30); connect(&m_buttonCancel, SIGNAL(clicked()), SLOT(reject())); m_buttonCancel.setText(i18n("Cancel")); m_layout.addWidget(&m_label); m_layout.addWidget(&m_processId); m_layout.addLayout(&m_buttons); m_layout.addStretch(10); m_buttons.addStretch(10); m_buttons.addWidget(&m_buttonOK); m_buttons.addSpacing(40); m_buttons.addWidget(&m_buttonCancel); m_buttons.addStretch(10); m_layout.activate(); m_processId.setFocus(); resize(350, 120); } ProcAttach::~ProcAttach() { } #include "procattach.moc" kdbg-2.5.5/kdbg/procattach.h000066400000000000000000000036501247243200200156420ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef ProcAttach_included #define ProcAttach_included #include "ui_procattachbase.h" #include #include #include #include #include #include #include #include #include class QProcess; /* * This is the full-featured version of the dialog. It is used when the * system features a suitable ps command. */ class ProcAttachPS : public QDialog, private Ui::ProcAttachBase { Q_OBJECT public: ProcAttachPS(QWidget* parent); ~ProcAttachPS(); void setFilterText(const QString& text) { filterEdit->setText(text); } QString text() const; protected: void runPS(); protected slots: void on_buttonRefresh_clicked(); void on_filterEdit_textChanged(const QString& text); void on_processList_currentItemChanged(); void slotTextReceived(); void slotPSDone(); protected: void pushLine(); bool setVisibility(QTreeWidgetItem* i, const QString& text); QProcess* m_ps; // parse state int m_pidCol; //!< The PID column in the ps output int m_ppidCol; //!< The parent-PID column in the ps output QByteArray m_token; std::vector m_line; }; /* * This is an extremely stripped down version of the dialog. It is used * when there is no suitable ps command. */ class ProcAttach : public QDialog { public: ProcAttach(QWidget* parent); virtual ~ProcAttach(); void setText(const QString& text) { m_processId.setText(text); } QString text() const { return m_processId.text(); } protected: QLabel m_label; QLineEdit m_processId; QPushButton m_buttonOK; QPushButton m_buttonCancel; QVBoxLayout m_layout; QHBoxLayout m_buttons; }; #endif // ProcAttach_included kdbg-2.5.5/kdbg/procattachbase.ui000066400000000000000000000113411247243200200166570ustar00rootroot00000000000000 Johannes Sixt ProcAttachBase 0 0 560 416 Attach to Process true &Filter or PID: false filterEdit Type the name of the process or its process ID (PID) here to reduce the number of entries in the list. true 300 200 <p>This list displays all processes that are currently running. You must select the process that you want KDbg to attach to. Use the <b>Filter or PID</b> edit box to reduce the number of entries in this list.<p>The text in the <i>Command</i> column is usually, but not always, the command that was used to start the process. The <i>PID</i> column shows the process ID. The <i>PPID</i> column shows the process ID of the parent process. Additional columns show more information about the processes that is also available via the system's <i>ps</i> command.</p><p>The list is not updated automatically. Use the <b>Refresh</b> button to update it.</p> false true Command PID PPID 0 0 This button updates the list of processes. &Refresh QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource KDialogButtonBox QDialogButtonBox
kdialogbuttonbox.h
KLineEdit QLineEdit
klineedit.h
processList buttonRefresh dialogButtons accepted() ProcAttachBase accept() 420 400 399 415 dialogButtons rejected() ProcAttachBase reject() 508 401 508 414
kdbg-2.5.5/kdbg/regwnd.cpp000066400000000000000000000364521247243200200153410ustar00rootroot00000000000000/* * Copyright Max Judin, Johannes Sixt, Daniel Kristjansson * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "regwnd.h" #include "dbgdriver.h" #include #include /* i18n */ #include #include #include #include #include #include /* strtoul */ /** * Register display modes */ class RegisterDisplay { public: enum BitSize { bits8 = 0x10, bits16 = 0x20, bits32 = 0x30, bits64 = 0x40, bits80 = 0x50, bits128 = 0x60, bitsUnknown = 0x70 }; enum Format { nada = 0x01, binary = 0x02, octal = 0x03, decimal = 0x04, hex = 0x05, bcd = 0x06, realE = 0x07, realG = 0x08, realF = 0x09 }; RegisterDisplay() : mode(bitsUnknown|nada) { } RegisterDisplay(uint newMode) : mode(newMode) { } bool contains(uint pmode) const { bool val=((mode&0xf0)==pmode)||((mode&0x0f)==pmode); return val; } uint bitsFlag() { return mode&0xf0; } uint presentationFlag() const { return mode&0x0f; } uint bits() const { return bitMap[(mode>>4)&0x07]; } void changeFlag(uint code) { uint mask=((code&0xf0)==code)?0x0f:0xf0; mode = code | (mode & mask); } private: uint mode; static uint bitMap[]; }; // helper struct struct MenuPair { const char* name; uint mode; bool isSeparator() { return name == 0; } }; static MenuPair menuitems[] = { // treat as { I18N_NOOP("&GDB default"), RegisterDisplay::nada }, { I18N_NOOP("&Binary"), RegisterDisplay::binary }, { I18N_NOOP("&Octal"), RegisterDisplay::octal }, { I18N_NOOP("&Decimal"), RegisterDisplay::decimal }, { I18N_NOOP("He&xadecimal"), RegisterDisplay::hex }, { I18N_NOOP("Real (&e)"), RegisterDisplay::realE }, { I18N_NOOP("Real (&f)"), RegisterDisplay::realF }, { I18N_NOOP("&Real (g)"), RegisterDisplay::realG }, { 0, 0 }, { "8 bits", RegisterDisplay::bits8 }, { "16 bits", RegisterDisplay::bits16 }, { "32 bits", RegisterDisplay::bits32 }, { "64 bits", RegisterDisplay::bits64 }, { "80 bits", RegisterDisplay::bits80 }, { "128 bits",RegisterDisplay::bits128 }, }; uint RegisterDisplay::bitMap[] = { 0, 8, 16, 32, 64, 80, 128, /*default*/32, }; class ModeItem : public QTreeWidgetItem { public: ModeItem(QTreeWidget* parent, const QString& name) : QTreeWidgetItem(parent, QStringList(name)) {} ModeItem(QTreeWidgetItem* parent) : QTreeWidgetItem(parent) {} virtual void setMode(RegisterDisplay mode) = 0; virtual RegisterDisplay mode() = 0; }; class GroupingViewItem : public ModeItem { public: GroupingViewItem(RegisterView* parent, const QString& name, const QString& pattern, RegisterDisplay mode) : ModeItem(parent, name), matcher(pattern), gmode(mode) { setExpanded(true); } bool matchName(const QString& str) const { return matcher.exactMatch(str); } virtual void setMode(RegisterDisplay mode) { gmode=mode; for(int i = 0; i < childCount(); i++) { static_cast(child(i))->setMode(gmode); } } virtual RegisterDisplay mode() { return gmode; } private: QRegExp matcher; RegisterDisplay gmode; }; class RegisterViewItem : public ModeItem { public: RegisterViewItem(GroupingViewItem* parent, const RegisterInfo& regInfo); ~RegisterViewItem(); void setValue(const RegisterInfo& regInfo); virtual void setMode(RegisterDisplay mode); virtual RegisterDisplay mode() { return m_mode; } RegisterInfo m_reg; RegisterDisplay m_mode; /* display mode */ bool m_changes; bool m_found; }; RegisterViewItem::RegisterViewItem(GroupingViewItem* parent, const RegisterInfo& regInfo) : ModeItem(parent), m_reg(regInfo), m_changes(false), m_found(true) { setValue(m_reg); setText(0, m_reg.regName); setMode(parent->mode()); } RegisterViewItem::~RegisterViewItem() { } /* * We must be careful when converting the hex value because * it may exceed this computer's long values. */ inline int hexCharToDigit(char h) { if (h < '0') return -1; if (h <= '9') return h - '0'; if (h < 'A') return -1; if (h <= 'F') return h - ('A' - 10); if (h < 'a') return -1; if (h <= 'f') return h - ('a' - 10); return -1; } static QString toBinary(QString hex) { static const char digits[16][8] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; QString result; for (int i = 2; i < hex.length(); i++) { int idx = hexCharToDigit(hex[i].toLatin1()); if (idx < 0) { // not a hex digit; no conversion return hex; } const char* bindigits = digits[idx]; result += bindigits; } // remove leading zeros switch (hexCharToDigit(hex[2].toLatin1())) { case 0: case 1: result.remove(0, 3); break; case 2: case 3: result.remove(0, 2); break; case 4: case 5: case 6: case 7: result.remove(0, 1); break; } return result; } static QString toOctal(QString hex) { QString result; int shift = 0; unsigned v = 0; for (int i = hex.length()-1; i >= 2; i--) { int idx = hexCharToDigit(hex[i].toLatin1()); if (idx < 0) return hex; v += idx << shift; result.insert(0, (v & 7) + '0'); v >>= 3; shift++; if (shift == 3) { // an extra digit this round result.insert(0, v + '0'); shift = v = 0; } } if (v != 0) { result.insert(0, v + '0'); } return "0" + result; } static QString toDecimal(QString hex) { /* * We convert only numbers that are small enough for this computer's * size of long integers. */ if (hex.length() > int(sizeof(unsigned long)*2+2)) /* count in leading "0x" */ return hex; bool ok = false; unsigned long val = hex.toULong(&ok, 0); if (!ok) return hex; else return QString().setNum(val); } static QString toBCD(const QString& hex) { return hex.right(2); } static char* toRaw(const QString& hex, uint& length) { static uint testNum=1; static void* testVoid=(void*)&testNum; static char* testChar=(char*)testVoid; static bool littleendian=(*testChar==1); length=((hex.length()-2)%2)+((hex.length()-2)/2); char* data=new char[length]; if (littleendian) { uint j=0; if (hex.length()<=2) return 0; for (int i=hex.length()-1; i>=2; ) { if (j%2==0) data[j/2]=hexCharToDigit(hex[i].toLatin1()); else data[j/2]|=(hexCharToDigit(hex[i].toLatin1())<<4); i--;j++; } } else { // big endian uint j=0; if (hex.length()<=2) return 0; for (int i=2; i>2; if (RegisterDisplay::nada!=mode.presentationFlag() && reg.rawValue.length() > 2 && reg.rawValue[0] == '0' && reg.rawValue[1] == 'x') { if ("uint128"==reg.type) totalNibles=32; else if ("uint64"==reg.type) totalNibles=16; else if (reg.type.isEmpty()) totalNibles=nibles; else { return "don't know how to handle vector type <"+reg.type+">"; } if (0==nibles) nibles=8; // default to 4 byte, 32 bits values if (nibles>totalNibles) totalNibles=nibles; // minimum one value QString raw=reg.rawValue.right(reg.rawValue.length()-2); // clip off "0x" while (raw.length()=0; nib-=nibles) { QString qstr=convertSingle(raw.mid(nib, nibles).prepend("0x"), mode); if (nib==int(totalNibles-nibles)) cooked=qstr+cooked; else cooked=qstr+separator+cooked; } } else { cooked = reg.cookedValue; } if (!cooked.isEmpty() && cooked.at(0) != ' ' && cooked.at(0) != '-' && cooked.at(0) != '+') cooked.prepend(" "); return cooked; } void RegisterViewItem::setValue(const RegisterInfo& reg) { m_reg = reg; setText(1, reg.rawValue); QString cookedValue = convertRaw(reg, m_mode); setText(2, cookedValue); } void RegisterViewItem::setMode(RegisterDisplay mode) { m_mode = mode; QString cookedValue = convertRaw(m_reg, mode); setText(2, cookedValue); } RegisterView::RegisterView(QWidget* parent) : QTreeWidget(parent) { setFont(KGlobalSettings::fixedFont()); QTreeWidgetItem* header = headerItem(); header->setText(0, i18n("Register")); header->setText(1, i18n("Value")); header->setText(2, i18n("Decoded value")); setAllColumnsShowFocus(true); m_modemenu = new QMenu("ERROR", this); for (uint i=0; iaddSeparator(); else { QAction* action = m_modemenu->addAction(i18n(menuitems[i].name)); action->setData(menuitems[i].mode); action->setCheckable(true); } } connect(m_modemenu, SIGNAL(triggered(QAction*)), SLOT(slotModeChange(QAction*))); new GroupingViewItem(this, i18n("GP and others"), "^$", RegisterDisplay::nada); new GroupingViewItem(this, i18n("Flags"), "(^eflags$|^fctrl$|^mxcsr$|^cr$|^fpscr$|^vscr$|^ftag$|^fstat$)", RegisterDisplay::bits32|RegisterDisplay::binary); new GroupingViewItem(this, i18n("x86/x87 segment"), "(^cs$|^ss$|^ds$|^es$|^fs$|^gs$|^fiseg$|^foseg$)", RegisterDisplay::nada); new GroupingViewItem(this, "x87", "^st.*", RegisterDisplay::bits80|RegisterDisplay::realE); new GroupingViewItem(this, "SSE", "^xmm.*", RegisterDisplay::bits32|RegisterDisplay::realE); new GroupingViewItem(this, "MMX", "^mm.*", RegisterDisplay::bits32|RegisterDisplay::realE); new GroupingViewItem(this, "POWER real", "^fpr.*", RegisterDisplay::bits32|RegisterDisplay::realE); new GroupingViewItem(this, "AltiVec", "^vr.*", RegisterDisplay::bits32|RegisterDisplay::realE); new GroupingViewItem(this, "MIPS VU", "^vu.*", RegisterDisplay::bits32|RegisterDisplay::realE); updateGroupVisibility(); setRootIsDecorated(true); resize(200,300); } RegisterView::~RegisterView() { } GroupingViewItem* RegisterView::findMatchingGroup(const QString& regName) { for (int i = 0; i < topLevelItemCount(); i++) { GroupingViewItem* it = static_cast(topLevelItem(i)); if (it->matchName(regName)) return it; } // not better match found, so return "GP and others" return static_cast(topLevelItem(0)); } GroupingViewItem* RegisterView::findGroup(const QString& groupName) { for (int i = 0; i < topLevelItemCount(); i++) { QTreeWidgetItem* it = topLevelItem(i); if (it->text(0) == groupName) return static_cast(it); } // return that nothing was found. return 0; } // only show a group if it has subitems. void RegisterView::updateGroupVisibility() { for(int i = 0; i < topLevelItemCount(); i++) { QTreeWidgetItem* item = topLevelItem(i); item->setHidden(item->childCount() == 0); } } void RegisterView::updateRegisters(const std::list& regs) { setUpdatesEnabled(false); // mark all items as 'not found' for (RegMap::iterator i = m_registers.begin(); i != m_registers.end(); ++i) { i->second->m_found = false; } // parse register values for (std::list::const_iterator reg = regs.begin(); reg != regs.end(); ++reg) { // check if this is a new register RegMap::iterator i = m_registers.find(reg->regName); if (i != m_registers.end()) { RegisterViewItem* it = i->second; it->m_found = true; if (it->m_reg.rawValue != reg->rawValue || it->m_reg.cookedValue != reg->cookedValue) { it->m_changes = true; it->setValue(*reg); it->setForeground(0,Qt::red); it->setForeground(1,Qt::red); it->setForeground(2,Qt::red); } else { /* * If there was a change last time, but not now, we * must revert the color. */ if (it->m_changes) { it->m_changes = false; it->setForeground(0,Qt::black); it->setForeground(1,Qt::black); it->setForeground(2,Qt::black); } } } else { GroupingViewItem* group = findMatchingGroup(reg->regName); m_registers[reg->regName] = new RegisterViewItem(group, *reg); } } // remove all 'not found' items; QStringList del; for (RegMap::iterator i = m_registers.begin(); i != m_registers.end(); ++i) { if (!i->second->m_found) { del.push_back(i->first); } } for (QStringList::Iterator i = del.begin(); i != del.end(); ++i) { RegMap::iterator it = m_registers.find(*i); delete it->second; m_registers.erase(it); } updateGroupVisibility(); setUpdatesEnabled(true); } void RegisterView::contextMenuEvent(QContextMenuEvent* event) { QTreeWidgetItem *item = itemAt(event->pos()); if (item) { RegisterDisplay mode=static_cast(item)->mode(); int i = 0; foreach(QAction* action, m_modemenu->actions()) { action->setChecked(mode.contains(menuitems[i].mode)); ++i; } m_modemenu->setTitle(item->text(0)); m_modemenu->popup(event->globalPos()); event->accept(); } } void RegisterView::slotModeChange(QAction* action) { RegMap::iterator it=m_registers.find(m_modemenu->title()); ModeItem* view; if (it != m_registers.end()) view = it->second; else view = findGroup(m_modemenu->title()); if (view) { RegisterDisplay mode = view->mode(); mode.changeFlag(action->data().toInt()); view->setMode(mode); } } void RegisterView::paletteChange(const QPalette&) { setFont(KGlobalSettings::fixedFont()); } #include "regwnd.moc" kdbg-2.5.5/kdbg/regwnd.h000066400000000000000000000020401247243200200147700ustar00rootroot00000000000000/* * Copyright Max Judin, Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef REGWND_H #define REGWND_H #include #include #include class QMenu; class RegisterViewItem; class GroupingViewItem; class QContextMenuEvent; struct RegisterInfo; class RegisterView : public QTreeWidget { Q_OBJECT public: RegisterView(QWidget* parent); ~RegisterView(); protected: void contextMenuEvent(QContextMenuEvent*); protected slots: void slotModeChange(QAction*); void updateRegisters(const std::list&); private: void paletteChange(const QPalette& oldPal); void updateGroupVisibility(); GroupingViewItem* findMatchingGroup(const QString& regName); GroupingViewItem* findGroup(const QString& groupName); QMenu* m_modemenu; typedef std::map RegMap; RegMap m_registers; friend class RegisterViewItem; }; #endif // REGWND_H kdbg-2.5.5/kdbg/sourcewnd.cpp000066400000000000000000000554701247243200200160650ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "debugger.h" #include "sourcewnd.h" #include "dbgdriver.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mydebug.h" SourceWindow::SourceWindow(const QString& fileName, QWidget* parent) : QPlainTextEdit(parent), m_fileName(fileName), m_highlighter(0), m_widthItems(16), m_widthPlus(12), m_widthLineNo(30), m_lineInfoArea(new LineInfoArea(this)) { // load pixmaps m_pcinner = UserIcon("pcinner"); m_pcup = UserIcon("pcup"); m_brkena = UserIcon("brkena"); m_brkdis = UserIcon("brkdis"); m_brktmp = UserIcon("brktmp"); m_brkcond = UserIcon("brkcond"); m_brkorph = UserIcon("brkorph"); setFont(KGlobalSettings::fixedFont()); setReadOnly(true); setViewportMargins(lineInfoAreaWidth(), 0, 0 ,0); setWordWrapMode(QTextOption::NoWrap); connect(this, SIGNAL(updateRequest(const QRect&, int)), m_lineInfoArea, SLOT(update())); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(cursorChanged())); // add a syntax highlighter if (QRegExp("\\.(c(pp|c|\\+\\+)?|CC?|h(\\+\\+|h|pp)?|HH?)$").indexIn(m_fileName) >= 0) { m_highlighter = new HighlightCpp(this); } } SourceWindow::~SourceWindow() { delete m_highlighter; } int SourceWindow::lineInfoAreaWidth() const { return 3 + m_widthItems + m_widthPlus + m_widthLineNo; } bool SourceWindow::loadFile() { QFile f(m_fileName); if (!f.open(QIODevice::ReadOnly)) { return false; } QTextStream t(&f); setPlainText(t.readAll()); f.close(); int n = blockCount(); m_sourceCode.resize(n); m_rowToLine.resize(n); for (int i = 0; i < n; i++) { m_rowToLine[i] = i; } m_lineItems.resize(n, 0); // set a font for line numbers m_lineNoFont = currentCharFormat().font(); m_lineNoFont.setPixelSize(11); return true; } void SourceWindow::reloadFile() { QFile f(m_fileName); if (!f.open(QIODevice::ReadOnly)) { // open failed; leave alone return; } m_sourceCode.clear(); /* clear old text */ QTextStream t(&f); setPlainText(t.readAll()); f.close(); m_sourceCode.resize(blockCount()); // expanded lines are collapsed: move existing line items up for (size_t i = 0; i < m_lineItems.size(); i++) { if (m_rowToLine[i] != int(i)) { m_lineItems[m_rowToLine[i]] |= m_lineItems[i]; m_lineItems[i] = 0; } } // allocate line items m_lineItems.resize(m_sourceCode.size(), 0); m_rowToLine.resize(m_sourceCode.size()); for (size_t i = 0; i < m_sourceCode.size(); i++) m_rowToLine[i] = i; // Highlighting was applied above when the text was inserted into widget, // but at that time m_rowToLine was not corrected, yet, so that lines // that previously were assembly were painted incorrectly. if (m_highlighter) m_highlighter->rehighlight(); } void SourceWindow::scrollTo(int lineNo, const DbgAddr& address) { if (lineNo < 0 || lineNo >= int(m_sourceCode.size())) return; int row = lineToRow(lineNo, address); scrollToRow(row); } void SourceWindow::scrollToRow(int row) { QTextCursor cursor(document()->findBlockByNumber(row)); setTextCursor(cursor); ensureCursorVisible(); } void SourceWindow::resizeEvent(QResizeEvent* e) { QPlainTextEdit::resizeEvent(e); QRect cr = contentsRect(); cr.setRight(lineInfoAreaWidth()); m_lineInfoArea->setGeometry(cr); } void SourceWindow::drawLineInfoArea(QPainter* p, QPaintEvent* event) { QTextBlock block = firstVisibleBlock(); p->setFont(m_lineNoFont); for (; block.isValid(); block = block.next()) { if (!block.isVisible()) continue; QRect r = blockBoundingGeometry(block).translated(contentOffset()).toRect(); if (r.bottom() < event->rect().top()) continue; // skip blocks that are higher than the region being updated else if (r.top() > event->rect().bottom()) break; // all the following blocks are lower then the region being updated int row = block.blockNumber(); uchar item = m_lineItems[row]; int h = r.height(); p->save(); p->translate(0, r.top()); if (item & liBP) { // enabled breakpoint int y = (h - m_brkena.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkena); } if (item & liBPdisabled) { // disabled breakpoint int y = (h - m_brkdis.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkdis); } if (item & liBPtemporary) { // temporary breakpoint marker int y = (h - m_brktmp.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brktmp); } if (item & liBPconditional) { // conditional breakpoint marker int y = (h - m_brkcond.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkcond); } if (item & liBPorphan) { // orphaned breakpoint marker int y = (h - m_brkcond.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_brkorph); } if (item & liPC) { // program counter in innermost frame int y = (h - m_pcinner.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_pcinner); } if (item & liPCup) { // program counter somewhere up the stack int y = (h - m_pcup.height())/2; if (y < 0) y = 0; p->drawPixmap(0,y,m_pcup); } p->translate(m_widthItems, 0); if (!isRowDisassCode(row) && m_sourceCode[rowToLine(row)].canDisass) { int w = m_widthPlus; int x = w/2; int y = h/2; p->drawLine(x-2, y, x+2, y); if (!isRowExpanded(row)) { p->drawLine(x, y-2, x, y+2); } } p->translate(m_widthPlus, 0); if (!isRowDisassCode(row)) { p->drawText(0, 0, m_widthLineNo, h, Qt::AlignRight|Qt::AlignVCenter, QString().setNum(rowToLine(row)+1)); } p->restore(); } } void SourceWindow::updateLineItems(const KDebugger* dbg) { // clear outdated breakpoints for (int i = m_lineItems.size()-1; i >= 0; i--) { if (m_lineItems[i] & liBPany) { // check if this breakpoint still exists int line = rowToLine(i); TRACE(QString().sprintf("checking for bp at %d", line)); KDebugger::BrkptROIterator bp = dbg->breakpointsBegin(); for (; bp != dbg->breakpointsEnd(); ++bp) { if (bp->lineNo == line && fileNameMatches(bp->fileName) && lineToRow(line, bp->address) == i) { // yes it exists; mode is changed below break; } } if (bp == dbg->breakpointsEnd()) { /* doesn't exist anymore, remove it */ m_lineItems[i] &= ~liBPany; } } } // add new breakpoints for (KDebugger::BrkptROIterator bp = dbg->breakpointsBegin(); bp != dbg->breakpointsEnd(); ++bp) { if (fileNameMatches(bp->fileName)) { TRACE(QString("updating %2:%1").arg(bp->lineNo).arg(bp->fileName)); int i = bp->lineNo; if (i < 0 || i >= int(m_sourceCode.size())) continue; // compute new line item flags for breakpoint uchar flags = bp->enabled ? liBP : liBPdisabled; if (bp->temporary) flags |= liBPtemporary; if (!bp->condition.isEmpty() || bp->ignoreCount != 0) flags |= liBPconditional; if (bp->isOrphaned()) flags |= liBPorphan; // update if changed int row = lineToRow(i, bp->address); if ((m_lineItems[row] & liBPany) != flags) { m_lineItems[row] &= ~liBPany; m_lineItems[row] |= flags; } } } m_lineInfoArea->update(); } void SourceWindow::setPC(bool set, int lineNo, const DbgAddr& address, int frameNo) { if (lineNo < 0 || lineNo >= int(m_sourceCode.size())) { return; } int row = lineToRow(lineNo, address); uchar flag = frameNo == 0 ? liPC : liPCup; if (set) { // set only if not already set if ((m_lineItems[row] & flag) == 0) { m_lineItems[row] |= flag; m_lineInfoArea->update(); } } else { // clear only if not set if ((m_lineItems[row] & flag) != 0) { m_lineItems[row] &= ~flag; m_lineInfoArea->update(); } } } void SourceWindow::find(const QString& text, bool caseSensitive, FindDirection dir) { ASSERT(dir == 1 || dir == -1); QTextDocument::FindFlags flags = 0; if (caseSensitive) flags |= QTextDocument::FindCaseSensitively; if (dir < 0) flags |= QTextDocument::FindBackward; if (QPlainTextEdit::find(text, flags)) return; // not found; wrap around QTextCursor cursor(document()); if (dir < 0) cursor.movePosition(QTextCursor::End); cursor = document()->find(text, cursor, flags); if (!cursor.isNull()) setTextCursor(cursor); } void SourceWindow::infoMousePress(QMouseEvent* ev) { // we handle left and middle button if (ev->button() != Qt::LeftButton && ev->button() != Qt::MidButton) { return; } // get row int row = cursorForPosition(QPoint(0, ev->y())).blockNumber(); if (row < 0) return; if (ev->x() > m_widthItems) { if (isRowExpanded(row)) { actionCollapseRow(row); } else { actionExpandRow(row); } return; } int sourceRow; int line = rowToLine(row, &sourceRow); // find address if row is disassembled code DbgAddr address; if (row > sourceRow) { // get offset from source code line int off = row - sourceRow; address = m_sourceCode[line].disassAddr[off-1]; } switch (ev->button()) { case Qt::LeftButton: TRACE(QString().sprintf("left-clicked line %d", line)); emit clickedLeft(m_fileName, line, address, (ev->modifiers() & Qt::ShiftModifier) != 0); break; case Qt::MidButton: TRACE(QString().sprintf("mid-clicked row %d", line)); emit clickedMid(m_fileName, line, address); break; default:; } } void SourceWindow::keyPressEvent(QKeyEvent* ev) { int top1 = 0, top2; switch (ev->key()) { case Qt::Key_Plus: actionExpandRow(textCursor().blockNumber()); return; case Qt::Key_Minus: actionCollapseRow(textCursor().blockNumber()); return; case Qt::Key_Up: case Qt::Key_K: moveCursor(QTextCursor::PreviousBlock); return; case Qt::Key_Down: case Qt::Key_J: moveCursor(QTextCursor::NextBlock); return; case Qt::Key_Home: moveCursor(QTextCursor::Start); return; case Qt::Key_End: moveCursor(QTextCursor::End); return; case Qt::Key_PageUp: case Qt::Key_PageDown: top1 = firstVisibleBlock().blockNumber(); } QPlainTextEdit::keyPressEvent(ev); switch (ev->key()) { case Qt::Key_PageUp: case Qt::Key_PageDown: top2 = firstVisibleBlock().blockNumber(); { QTextCursor cursor = textCursor(); if (top1 < top2) cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, top2-top1); else cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::MoveAnchor, top1-top2); setTextCursor(cursor); } } } bool SourceWindow::wordAtPoint(const QPoint& p, QString& word, QRect& r) { QTextCursor cursor = cursorForPosition(viewport()->mapFrom(this, p)); if (cursor.isNull()) return false; cursor.select(QTextCursor::WordUnderCursor); word = cursor.selectedText(); if (word.isEmpty()) return false; // keep only letters and digits QRegExp w("[\\dA-Za-z_]+"); if (w.indexIn(word) < 0) return false; word = w.cap(); r = QRect(p, p); r.adjust(-5,-5,5,5); return true; } void SourceWindow::paletteChange(const QPalette& oldPal) { setFont(KGlobalSettings::fixedFont()); QPlainTextEdit::paletteChange(oldPal); } /* * Two file names (possibly full paths) match if the last parts - the file * names - match. */ bool SourceWindow::fileNameMatches(const QString& other) { return QFileInfo(other).fileName() == QFileInfo(m_fileName).fileName(); } void SourceWindow::disassembled(int lineNo, const std::list& disass) { TRACE("disassembled line " + QString().setNum(lineNo)); if (lineNo < 0 || lineNo >= int(m_sourceCode.size())) return; SourceLine& sl = m_sourceCode[lineNo]; // copy disassembled code and its addresses sl.disass.resize(disass.size()); sl.disassAddr.resize(disass.size()); sl.canDisass = !disass.empty(); int i = 0; for (std::list::const_iterator c = disass.begin(); c != disass.end(); ++c, ++i) { QString code = c->code; while (code.endsWith("\n")) code.truncate(code.length()-1); sl.disass[i] = c->address.asString() + ' ' + code; sl.disassAddr[i] = c->address; } int row = lineToRow(lineNo); if (sl.canDisass) { expandRow(row); } else { // clear expansion marker m_lineInfoArea->update(); } } int SourceWindow::rowToLine(int row, int* sourceRow) { int line = row >= 0 ? m_rowToLine[row] : -1; if (sourceRow != 0) { // search back until we hit the first entry with the current line number while (row > 0 && m_rowToLine[row-1] == line) row--; *sourceRow = row; } return line; } /* * Rows showing diassembled code have the same line number as the * corresponding source code line number. Therefore, the line numbers in * m_rowToLine are monotonically increasing with blocks of equal line * numbers for a source line and its disassembled code that follows it. * * Hence, m_rowToLine always obeys the following condition: * * m_rowToLine[i] <= i */ int SourceWindow::lineToRow(int line) { // line is zero-based! assert(line < int(m_rowToLine.size())); // quick test for common case if (line < 0 || m_rowToLine[line] == line) return line; assert(m_rowToLine[line] < line); /* * Binary search between row == line and end of list. In the loop below * we use the fact that the line numbers m_rowToLine do not contain * holes. */ int l = line; int h = m_rowToLine.size(); while (l < h && m_rowToLine[l] != line) { assert(h == int(m_rowToLine.size()) || m_rowToLine[l] < m_rowToLine[h]); /* * We want to round down the midpoint so that we find the * lowest row that belongs to the line we seek. */ int mid = (l+h)/2; if (m_rowToLine[mid] <= line) l = mid; else h = mid; } // Found! Result is in l: assert(m_rowToLine[l] == line); /* * We might not have hit the lowest index for the line. */ while (l > 0 && m_rowToLine[l-1] == line) --l; return l; } int SourceWindow::lineToRow(int line, const DbgAddr& address) { int row = lineToRow(line); if (isRowExpanded(row)) { row += m_sourceCode[line].findAddressRowOffset(address); } return row; } bool SourceWindow::isRowExpanded(int row) { assert(row >= 0); return row < int(m_rowToLine.size())-1 && m_rowToLine[row] == m_rowToLine[row+1]; } bool SourceWindow::isRowDisassCode(int row) { return row > 0 && row < int(m_rowToLine.size()) && m_rowToLine[row] == m_rowToLine[row-1]; } void SourceWindow::expandRow(int row) { TRACE("expanding row " + QString().setNum(row)); // get disassembled code int line = rowToLine(row); const std::vector& disass = m_sourceCode[line].disass; // remove PC (must be set again in slot of signal expanded()) m_lineItems[row] &= ~(liPC|liPCup); // insert new lines setUpdatesEnabled(false); ++row; m_rowToLine.insert(m_rowToLine.begin()+row, disass.size(), line); m_lineItems.insert(m_lineItems.begin()+row, disass.size(), 0); QTextCursor cursor(document()->findBlockByNumber(row)); for (size_t i = 0; i < disass.size(); i++) { cursor.insertText(disass[i]); cursor.insertBlock(); } setUpdatesEnabled(true); emit expanded(line); /* must set PC */ } void SourceWindow::collapseRow(int row) { TRACE("collapsing row " + QString().setNum(row)); int line = rowToLine(row); // find end of this block int end = row+1; while (end < int(m_rowToLine.size()) && m_rowToLine[end] == m_rowToLine[row]) { end++; } ++row; setUpdatesEnabled(false); QTextCursor cursor(document()->findBlockByNumber(end-1)); while (--end >= row) { m_rowToLine.erase(m_rowToLine.begin()+end); m_lineItems.erase(m_lineItems.begin()+end); cursor.select(QTextCursor::BlockUnderCursor); cursor.removeSelectedText(); } setUpdatesEnabled(true); emit collapsed(line); } void SourceWindow::activeLine(int& line, DbgAddr& address) { int row = textCursor().blockNumber(); int sourceRow; line = rowToLine(row, &sourceRow); if (row > sourceRow) { int off = row - sourceRow; /* offset from source line */ address = m_sourceCode[line].disassAddr[off-1]; } } /** * Returns the offset from the line displaying the source code to * the line containing the specified address. If the address is not * found, 0 is returned. */ int SourceWindow::SourceLine::findAddressRowOffset(const DbgAddr& address) const { if (address.isEmpty()) return 0; for (size_t i = 0; i < disassAddr.size(); i++) { if (disassAddr[i] == address) { // found exact address return i+1; } if (disassAddr[i] > address) { /* * We have already advanced too far; the address is before this * index, but obviously we haven't found an exact match * earlier. address is somewhere between the displayed * addresses. We return the previous line. */ return i; } } // not found return 0; } void SourceWindow::actionExpandRow(int row) { if (row < 0 || isRowExpanded(row) || isRowDisassCode(row)) return; // disassemble int line = rowToLine(row); const SourceLine& sl = m_sourceCode[line]; if (!sl.canDisass) return; if (sl.disass.size() == 0) { emit disassemble(m_fileName, line); } else { expandRow(row); } } void SourceWindow::actionCollapseRow(int row) { if (row < 0 || !isRowExpanded(row) || isRowDisassCode(row)) return; collapseRow(row); } void SourceWindow::setTabWidth(int numChars) { if (numChars <= 0) numChars = 8; QFontMetrics fm(document()->defaultFont()); QString s; int w = fm.width(s.fill('x', numChars)); setTabStopWidth(w); } void SourceWindow::cursorChanged() { QList extraSelections; QTextEdit::ExtraSelection selection; selection.format.setBackground(QColor("#E7E7E7")); selection.format.setProperty(QTextFormat::FullWidthSelection, true); selection.cursor = textCursor(); selection.cursor.clearSelection(); extraSelections.append(selection); setExtraSelections(extraSelections); } /* * Show our own context menu. */ void SourceWindow::contextMenuEvent(QContextMenuEvent* e) { // get the context menu from the GUI factory QWidget* top = this; do top = top->parentWidget(); while (!top->isTopLevel()); KXmlGuiWindow* mw = static_cast(top); QMenu* m = static_cast(mw->factory()->container("popup_files", mw)); if (m) m->exec(e->globalPos()); } void LineInfoArea::paintEvent(QPaintEvent* e) { QPainter p(this); static_cast(parent())->drawLineInfoArea(&p, e); } void LineInfoArea::mousePressEvent(QMouseEvent* ev) { static_cast(parent())->infoMousePress(ev); } void LineInfoArea::contextMenuEvent(QContextMenuEvent* e) { static_cast(parent())->contextMenuEvent(e); } HighlightCpp::HighlightCpp(SourceWindow* srcWnd) : QSyntaxHighlighter(srcWnd->document()), m_srcWnd(srcWnd) { } enum HLState { hlCommentLine = 1, hlCommentBlock, hlIdent, hlString }; static const QString ckw[] = { "and", "and_eq", "asm", "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "class", "compl", "const", "const_cast", "continue", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "not", "not_eq", "operator", "or", "or_eq", "private", "protected", "public", "reinterpret_cast", "register", "return", "short", "signed", "sizeof", "static", "static_cast", "struct", "switch", "template", "this", "throw", "true", "try", "typedef", "typeid", "typename", "using", "union", "unsigned", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq" }; void HighlightCpp::highlightBlock(const QString& text) { int state = previousBlockState(); state = highlight(text, state); setCurrentBlockState(state); } int HighlightCpp::highlight(const QString& text, int state) { // highlight assembly lines if (m_srcWnd->isRowDisassCode(currentBlock().blockNumber())) { setFormat(0, text.length(), Qt::blue); return state; } if (state == -2) // initial state state = 0; // check for preprocessor line if (state == 0 && text.trimmed().startsWith("#")) { setFormat(0, text.length(), QColor("darkgreen")); return 0; } // a font for keywords QTextCharFormat identFont; identFont.setFontWeight(QFont::Bold); int start = 0; while (start < text.length()) { int end; switch (state) { case hlCommentLine: end = text.length(); state = 0; setFormat(start, end-start, QColor("gray")); break; case hlCommentBlock: end = text.indexOf("*/", start); if (end >= 0) end += 2, state = 0; else end = text.length(); setFormat(start, end-start, QColor("gray")); break; case hlString: for (end = start+1; end < int(text.length()); end++) { if (text[end] == '\\') { if (end < int(text.length())) ++end; } else if (text[end] == text[start]) { ++end; break; } } state = 0; setFormat(start, end-start, QColor("darkred")); break; case hlIdent: for (end = start+1; end < int(text.length()); end++) { if (!text[end].isLetterOrNumber() && text[end] != '_') break; } state = 0; if (std::binary_search(ckw, ckw + sizeof(ckw)/sizeof(ckw[0]), text.mid(start, end-start))) { setFormat(start, end-start, identFont); } else { setFormat(start, end-start, m_srcWnd->palette().color(QPalette::WindowText)); } break; default: for (end = start; end < int(text.length()); end++) { if (text[end] == '/') { if (end+1 < int(text.length())) { if (text[end+1] == '/') { state = hlCommentLine; break; } else if (text[end+1] == '*') { state = hlCommentBlock; break; } } } else if (text[end] == '"' || text[end] == '\'') { state = hlString; break; } else if ((text[end] >= 'A' && text[end] <= 'Z') || (text[end] >= 'a' && text[end] <= 'z') || text[end] == '_') { state = hlIdent; break; } } setFormat(start, end-start, m_srcWnd->palette().color(QPalette::WindowText)); } start = end; } return state; } #include "sourcewnd.moc" kdbg-2.5.5/kdbg/sourcewnd.h000066400000000000000000000113421247243200200155200ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef SOURCEWND_H #define SOURCEWND_H #include #include #include #include #include "dbgdriver.h" // forward declarations class KDebugger; struct DbgAddr; class LineInfoArea; class HighlightCpp; class SourceWindow : public QPlainTextEdit { Q_OBJECT public: SourceWindow(const QString& fileName, QWidget* parent); ~SourceWindow(); bool loadFile(); void reloadFile(); bool fileNameMatches(const QString& other); void scrollTo(int lineNo, const DbgAddr& address); const QString& fileName() const { return m_fileName; } void updateLineItems(const KDebugger* dbg); void setPC(bool set, int lineNo, const DbgAddr& address, int frameNo); enum FindDirection { findForward = 1, findBackward = -1 }; void find(const QString& text, bool caseSensitive, FindDirection dir); bool wordAtPoint(const QPoint& p, QString& word, QRect& r); /** * Translates row number (zero-based) to zero-based source line number. * If sourceRow is non-zero, it is filled with the source code row * belonging to the line number. */ int rowToLine(int row, int* sourceRow = 0); /** Translates zero-based source line number to row number (zero-based) */ int lineToRow(int line); /** Is the row disassembled? */ bool isRowExpanded(int row); /** Does the row show disassembled code? */ bool isRowDisassCode(int row); /** lineNo is zero-based */ void disassembled(int lineNo, const std::list& disass); void activeLine(int& lineNo, DbgAddr& address); protected: void drawLineInfoArea(QPainter* p, QPaintEvent* event); void infoMousePress(QMouseEvent* ev); virtual void resizeEvent(QResizeEvent* e); virtual void contextMenuEvent(QContextMenuEvent* e); virtual void keyPressEvent(QKeyEvent* ev); virtual void paletteChange(const QPalette&); void expandRow(int row); void collapseRow(int row); void scrollToRow(int row); /** translates (0-based) line number plus a code address into a row number */ int lineToRow(int row, const DbgAddr& address); int lineInfoAreaWidth() const; void actionExpandRow(int row); void actionCollapseRow(int row); signals: void clickedLeft(const QString&, int, const DbgAddr& address, bool); void clickedMid(const QString&, int, const DbgAddr& address); void disassemble(const QString&, int); void expanded(int lineNo); /* source lineNo has been expanded */ void collapsed(int lineNo); /* source lineNo has been collapsed */ public slots: void setTabWidth(int numChars); void cursorChanged(); protected: QString m_fileName; enum LineItem { liPC = 1, liPCup = 2, liBP = 4, liBPdisabled = 8, liBPtemporary = 16, liBPconditional = 32, liBPorphan = 64, liBPany = liBP|liBPdisabled|liBPtemporary|liBPconditional|liBPorphan }; struct SourceLine { std::vector disass; /* its disassembled code */ std::vector disassAddr; /* the addresses thereof */ bool canDisass; /* if line can be disassembled */ SourceLine() : canDisass(true) { } int findAddressRowOffset(const DbgAddr& address) const; }; std::vector m_sourceCode; HighlightCpp* m_highlighter; std::vector m_rowToLine; //!< The source line number for each row std::vector m_lineItems; //!< Icons displayed on the line QPixmap m_pcinner; /* PC at innermost frame */ QPixmap m_pcup; /* PC at frame up the stack */ QPixmap m_brkena; /* enabled breakpoint */ QPixmap m_brkdis; /* disabled breakpoint */ QPixmap m_brktmp; /* temporary breakpoint marker */ QPixmap m_brkcond; /* conditional breakpoint marker */ QPixmap m_brkorph; /* orphaned breakpoint marker */ QFont m_lineNoFont; //!< The font used to draw line numbers int m_widthItems; //!< The width of the item column int m_widthPlus; //!< The width of the expander column int m_widthLineNo; //!< The width of the line number columns LineInfoArea* m_lineInfoArea; friend class LineInfoArea; }; class LineInfoArea : public QWidget { public: LineInfoArea(QWidget* parent) : QWidget(parent) { } virtual void paintEvent(QPaintEvent* e); virtual void mousePressEvent(QMouseEvent* ev); virtual void contextMenuEvent(QContextMenuEvent* e); }; class HighlightCpp : public QSyntaxHighlighter { SourceWindow* m_srcWnd; public: HighlightCpp(SourceWindow* srcWnd); virtual void highlightBlock(const QString& text); int highlight(const QString& text, int state); }; #endif // SOURCEWND_H kdbg-2.5.5/kdbg/testprogs/000077500000000000000000000000001247243200200153675ustar00rootroot00000000000000kdbg-2.5.5/kdbg/testprogs/.gitignore000066400000000000000000000001541247243200200173570ustar00rootroot00000000000000anonstruct lambda locals longdouble maths multibrkpt nestedclass qt repeats std templates testfile widechar kdbg-2.5.5/kdbg/testprogs/CMakeLists.txt000066400000000000000000000014261247243200200201320ustar00rootroot00000000000000include_directories(${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) add_executable(anonstruct anonstruct.cpp) add_executable(locals locals.cpp) add_executable(maths maths.cpp) add_executable(nestedclass nestedclass.cpp) add_executable(repeats repeats.cpp) add_executable(std std.cpp) add_executable(templates templates.cpp) add_executable(testfile testfile.cpp) add_executable(widechar widechar.cpp) target_link_libraries(anonstruct ${QT_LIBS}) target_link_libraries(locals ${QT_LIBS}) target_link_libraries(maths ${QT_LIBS}) target_link_libraries(nestedclass ${QT_LIBS}) target_link_libraries(repeats ${QT_LIBS}) target_link_libraries(std ${QT_LIBS}) target_link_libraries(templates ${QT_LIBS}) target_link_libraries(testfile ${QT_LIBS}) target_link_libraries(widechar ${QT_LIBS}) kdbg-2.5.5/kdbg/testprogs/Makefile000066400000000000000000000017441247243200200170350ustar00rootroot00000000000000CXXFLAGS=-O0 -g QT3 = /usr/lib64/qt3 QT3INC = -I$(QT3)/include QT3LIB = $(QT3)/lib64/libqt-mt.so PROGS = \ anonstruct \ lambda \ locals \ longdouble \ maths \ multibrkpt \ nestedclass \ qt \ repeats \ std \ templates \ testfile \ widechar all: $(PROGS) anonstruct: anonstruct.cpp g++ -o $@ $(CXXFLAGS) $^ lambda: lambda.cpp g++ --std=c++0x -o $@ $(CXXFLAGS) $^ locals: locals.cpp g++ -o $@ $(CXXFLAGS) $^ longdouble: longdouble.c gcc -o $@ $(CXXFLAGS) $^ maths: maths.cpp g++ -o $@ $(CXXFLAGS) $^ multibrkpt: multibrkpt.cpp g++ -o $@ $(CXXFLAGS) $^ nestedclass: nestedclass.cpp g++ -o $@ $(CXXFLAGS) $^ qt: qt.cpp g++ -o $@ $(CXXFLAGS) $^ $(QT3INC) $(QT3LIB) repeats: repeats.cpp g++ -o $@ $(CXXFLAGS) $^ $(QT3INC) $(QT3LIB) std: std.cpp g++ -o $@ $(CXXFLAGS) $^ templates: templates.cpp g++ -o $@ $(CXXFLAGS) $^ testfile: testfile.cpp g++ -o $@ $(CXXFLAGS) $^ $(QT3INC) $(QT3LIB) widechar: widechar.cpp g++ -o $@ $(CXXFLAGS) $^ clean: $(RM) $(PROGS) kdbg-2.5.5/kdbg/testprogs/anonstruct.cpp000066400000000000000000000007251247243200200202770ustar00rootroot00000000000000// test anonymous structs and unions #include #include struct T { pthread_mutex_t mutex; // contains anonymous union on Linux struct { int a; }; union { int b; long c; }; int TestPopup() { return a ? b : c; } }; int main() { pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; T t; union { char a; int b; }; a = 'X'; b = t.TestPopup(); std::fprintf(stderr, "%d, %d, a=%d, b=%d\n", sizeof(mutex), sizeof(t), a, b); } kdbg-2.5.5/kdbg/testprogs/lambda.cpp000066400000000000000000000010301247243200200173050ustar00rootroot00000000000000// test C++11 lambdas #include #include #include #include template struct X { X() = default; X(std::initializer_list l) : m_v(l) { for (auto i = l.begin(); i != l.end(); ++i) { std::cout << *i << std::endl; } } void outmult(int factor) { auto f = [&factor](const T& a) { std::cout << (a*factor) << std::endl; }; for_each(m_v.begin(), m_v.end(), f); } std::vector m_v; }; int main() { X x{ 1, 1, 2, 3, 5, 8 }; x.outmult(3); } kdbg-2.5.5/kdbg/testprogs/locals.cpp000066400000000000000000000005731247243200200173550ustar00rootroot00000000000000#include // a function that has args but no locals static int nolocals(int argc, const char** argv) { printf("argc=%d, argv[0]=%s\n", argc, argv[0]); } // a function that has no args but locals static int noargs() { int c = 1; const char* pgm[] = { "foo", 0 }; nolocals(c, pgm); } int main(int argc, const char** argv) { noargs(); nolocals(argc, argv); } kdbg-2.5.5/kdbg/testprogs/longdouble.c000066400000000000000000000003261247243200200176660ustar00rootroot00000000000000#include int main() { register long double ld = -2.83090232717332442064e-324L; volatile double d; d = ld; printf("ld = %.21LG, d = %.17g\n",ld,d); ld = d; printf("ld = %.21LG, d = %.17g\n",ld,d); } kdbg-2.5.5/kdbg/testprogs/maths.cpp000066400000000000000000000010421247243200200172040ustar00rootroot00000000000000// do some floatingpoint computations #include #include double deg2rad(double a) { double result; result = a * 3.141592653589793 / 180.0; return result; } #define pi 3.1415926535897932384626433832795028841971693993750 void longdouble(long double ld) { long double x = 1000000.0 * ld*ld*pi; printf("long double: %Lf\n", x); } int main(int argc, char** argv) { double a = 17.4; double b = deg2rad(a); double sine = sin(b); printf("angle=%f degrees (%f radians), sine is %f\n", a, b, sine); longdouble(17.0); } kdbg-2.5.5/kdbg/testprogs/multibrkpt.cpp000066400000000000000000000012111247243200200202630ustar00rootroot00000000000000#include using namespace std; template struct Templated { T val; Templated(T aval) : val(aval) { cout << __func__ << " Ctor" << endl; } ~Templated() { cout << __func__ << " Dtor" << endl; } void PrintV() { cout << __func__ << " val=" << val << endl; } }; struct MostDerived : Templated, Templated { MostDerived() : Templated(12), Templated(3.14) { cout << "MostDerived Ctor" << endl; } ~MostDerived() { cout << "MostDerived Dtor" << endl; } void PrintV() { Templated::PrintV(); Templated::PrintV(); } }; int main() { MostDerived bothobj; bothobj.PrintV(); } kdbg-2.5.5/kdbg/testprogs/nestedclass.cpp000066400000000000000000000005101247243200200203770ustar00rootroot00000000000000#include void foo() { struct Whiz { Whiz() { std::cerr << __PRETTY_FUNCTION__ << std::endl; } void inner(Whiz*) { struct Inner { void bar() { std::cerr << __PRETTY_FUNCTION__ << std::endl; } }; Inner z; z.bar(); } }; Whiz w; w.inner(&w); } int main() { foo(); } kdbg-2.5.5/kdbg/testprogs/qt.cpp000066400000000000000000000016011247243200200165150ustar00rootroot00000000000000#include #include #include #include #include #include template void test_sharing(const T& input) { // a copy should increase the share counter T copy = input; // a const interator should not detach the copy typename T::const_iterator cit = copy.constBegin(); std::cout << *cit << std::endl; // a non-const iterator should detach the copy typename T::iterator it = copy.begin(); std::cout << *it << std::endl; } int main() { QMap str2int; str2int["foo"] = 42; test_sharing(str2int); QValueList ints; ints.push_back(42); test_sharing(ints); QValueVector vals(6, 47.11); vals.push_back(42); test_sharing(vals); QRect r(10,20, 130, 240); QPoint p = r.topLeft(); QPoint q = r.bottomRight(); std::cout << r.width() << r.height() << p.x() << q.y() << std::endl; } kdbg-2.5.5/kdbg/testprogs/repeats.cpp000066400000000000000000000017661247243200200175500ustar00rootroot00000000000000// test in arrays #include #include struct Big { struct bog { short b[40]; } a[40]; short c[40][40]; }; static void f(int) { } static void IncompleteCharTest() { // this string triggers a bug in gdb's string dumping routine char s1[] = "abbbbbbbbbbbbbbbbbbbb\240ccc"; char s2[] = "abbbbbbbbbbbbbbbbbbbb\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240ccc"; // this variable should be visible in the Local Variables window int n = 2; std::cout << s1 << s2 << n << std::endl; } int main() { struct Big big = {{{ 2,}}}; big.a[0].b[39]=7; big.a[38].b[39]=6; // array of pointer to function void (*apf[30])(int); for (int i = 1; i < 29; i++) apf[i] = f; QString s[300]; for (int i = 0; i < 300; i++) s[i].sprintf("String %d", i); s[21] = s[48]; int many[300]; for (int i = 0; i < 300; i++) many[i] = i; IncompleteCharTest(); return 0; } kdbg-2.5.5/kdbg/testprogs/std.cpp000066400000000000000000000021271247243200200166670ustar00rootroot00000000000000#include #include #include #include #include #include #include #include template struct V : std::vector { V(const T& v) : std::vector(10, v) {} void anotherone(const T& v) { this->push_back(v); } }; template void test_container(C& v, T x) { v.push_back(x); }; void test_sstream(std::basic_ostringstream& str) { str << "Example:\n "; } int main() { std::string s = "abc"; V v(s); test_container(v, "xyz"); v.anotherone("ABC"); std::vector vb; vb.push_back(true); test_container(vb, false); vb[0] = vb[1]; std::cout << vb.size() << std::endl; std::list l; l.push_front(-88); test_container(l, 42); std::cout << l.size() << std::endl; std::map m; m["example"] = 47.11; m.insert(std::make_pair("kdbg", 3.14)); std::cout << m.size() << std::endl; std::ostringstream dump; test_sstream(dump); std::copy(v.begin(), v.end(), std::ostream_iterator(dump, "\n ")); std::cout << dump.str() << std::endl; } kdbg-2.5.5/kdbg/testprogs/templates.cpp000066400000000000000000000035361247243200200201000ustar00rootroot00000000000000// This file test stack parsing capabilities of KDbg. // Parsing function names can be quite tricky ;) #include using namespace std; struct S { void operator>>(int) { cout << __PRETTY_FUNCTION__ << endl; } }; template struct templS { void operator>(T) { cout << __PRETTY_FUNCTION__ << endl; } void operator<(T) { cout << __PRETTY_FUNCTION__ << endl; } }; namespace A { namespace { namespace B { namespace { namespace { void g() { cout << __PRETTY_FUNCTION__ << endl; } } // namespace void Banong() { g(); } } // namespace void g() { Banong(); } } // namespace B void Aanong() { B::g(); } } // namespace void g() { Aanong(); } void operator<<(int, S) { cout << __PRETTY_FUNCTION__ << endl; } template void operator<(T, S) { cout << __PRETTY_FUNCTION__ << endl; } } // namespace A void operator<<(struct S&, int) { cout << __PRETTY_FUNCTION__ << endl; } template void operator<<(T&, U) { cout << __PRETTY_FUNCTION__ << endl; } void operator<(struct S&, int) { cout << __PRETTY_FUNCTION__ << endl; } template void operator<(T&, U) { cout << __PRETTY_FUNCTION__ << endl; } void f(const char* s) { A::g(); cout << s << endl; } template void indirect(T f, const char* s) { f(s); } int main() { S s1, s2; f("direct"); s1 << 1; s1 << s2; s1 < 1; s1 < s2; A::operator<<(1, s1); A::operator<(1, s1); // the next lines test a templated function that accepts // as one of its parameters a templated function pointer void (*op1)(S&, S*) = operator<<; operator<<(op1, s2); void (*op2)(S&, S*) = operator<; operator<(op2, s2); indirect(f, "indirect"); // pointer to member function void (S::*pm1)(int) = &S::operator>>; (s1.*pm1)(1); void (templS::*pm2)(int) = &templS::operator>; templS tSi; (tSi.*pm2)(1); tSi.operator<(1); } kdbg-2.5.5/kdbg/testprogs/test1.xml000066400000000000000000000004321247243200200171500ustar00rootroot00000000000000

test1

text1

kdbg-2.5.5/kdbg/testprogs/test1.xsl000066400000000000000000000052161247243200200171630ustar00rootroot00000000000000 kdbg-2.5.5/kdbg/testprogs/testfile.cpp000066400000000000000000000073371247243200200177240ustar00rootroot00000000000000#include #include #include #include #include #include namespace { enum E { red, green, blue, yellow }; } struct S { int x, y; S* s; }; struct emptyBase { }; struct emptyDerived : S { }; struct emptyNested : emptyBase { }; struct emptyVBase { virtual ~emptyVBase(){} }; struct emptyVDerived : S { virtual ~emptyVDerived(){} }; struct emptyVNested : emptyVBase { }; S globalvar = { 1234, -18, &globalvar }; static const char globarstr[] = "test"; class Cl { int k; double l; public: Cl(int r); virtual ~Cl(); virtual int f(int x); }; typedef void (*PtrFunc)(E*, char); class Dl : public Cl { public: Dl(int r); virtual int f(int x); int operator()(const QString& x, int& y) const; operator const char*() { return 0; } operator PtrFunc*(); void takeACStr(const char* cstr); }; namespace A { namespace { namespace B { namespace { namespace { enum Depth { flat, shallow, deep }; void g() { Depth d = shallow; S s1, s2; s1.x = 85; s2.y = 17; s1.s = &s2; s2.s = &s1; } } // namespace void Banong() { g(); } } // namespace void g() { Banong(); } } // namespace B void Aanong() { B::g(); } } // namespace void g() { Aanong(); } } // namespace A void f(E e[3], char c) { E x = e[2]; S y[2]; E* pe = e; E* pea[3] = { pe, }; { int x = 17; x; } A::g(); char buffer[300]; memset(buffer, 1, 300); for (int i = 0; i < sizeof(buffer); i +=15) buffer[i] = '\02'; QDir dir; QFile file; QFileInfo fi; x = red; emptyBase eb; emptyDerived ed; emptyNested en; int ea[3]; emptyVBase evb; emptyVDerived evd; emptyVNested evn; } void strtest(const char* t) { const char* s = t; const char*& s2 = s; if (t == 0) strtest(s2); std::cout << s2 << std::endl; } template void templated_strtest(F f, const char* t) { // test in various contexts struct incomplete_seq_intern { int val; char is[4]; int val2; }; struct incomplete_seq_end { int val; char is[4]; }; unsigned char a[4] = {',', 020, 021, 0325}; incomplete_seq_intern b = { 1, {',', 020, 021, 0325}, 2 }; incomplete_seq_end c = { 1, {',', 020, 021, 0325} }; unsigned char d[30][4] = { {',', 020, 021, 0325}, }; for (int i = 1; i < 30; i++) memcpy(d[i], d[0], 4); incomplete_seq_intern ba[30] = { { 1, {',', 020, 021, 0325}, 2 } }; incomplete_seq_end ca[30] = { { 1, {',', 020, 021, 0325} } }; f(t); } void segFault() { *(char*)0 = 's'; } int main(int argc, char* argv[]) { if (argc > 1) { if (*argv[1] == 's') { segFault(); } else if (*argv[1] == 'a') { // let debugger attach int junk; std::cin >> junk; } } char a[6] = { 'a', 'B', '\'', '\"' }; char a1[1] = { '1' }; E e[3] = { red, green, blue }; E e1[1] = { yellow }; a[0] = '5'; void (*pf[2])(E*, char) = {f}; { double d[1] = { -1.234e123 }; int i = 10; sin(i); } (*pf[0])(e, '\n'); QString s; s = "Hi, there!\r\n\t\"\'\\"; const QString& strref = s; templated_strtest(strtest, s); s = "asbcxxxxxxxxxxxxxxxxxxxxxxxxxxx"; strtest(s); s += "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; strtest(s); s += "rst"; strtest(s); s = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"; strtest(s); s += "rst"; strtest(s); s = ""; Cl c1(13); Dl d1(3214); d1.f(17); int n = 83; d1(strref, n); PtrFunc* ppf = d1; d1.takeACStr(globarstr); } Cl::Cl(int r) : k(r), l(sin(r)) { std::cout << l << std::endl; } Cl::~Cl() { } int Cl::f(int x) { int y = 2*x; return y; } Dl::Dl(int r) : Cl(r) { } int Dl::f(int x) { int y = Cl::f(x); return y+3; } int Dl::operator()(const QString& x, int& y) const { std::cerr << "ha! I know!" << std::endl; return 1; } Dl::operator PtrFunc*() { return 0; } void Dl::takeACStr(const char* cstr) { const char filespec[20] = "more test"; } kdbg-2.5.5/kdbg/testprogs/widechar.cpp000066400000000000000000000013121247243200200176560ustar00rootroot00000000000000#include #include #include struct WChar { const wchar_t* cwstr; wchar_t* wstr; }; int main() { int j=3; const wchar_t* nullPtr = 0; const wchar_t* uninitializedPtr = (const wchar_t*)0xdeadbeef; const wchar_t* str = L"abc"; const wchar_t* str2 = L"def"; const char* shortStr = "12345"; wchar_t wstr[64] = { 0 }, // L'\0' *wstrPtr = wstr; wcscpy(wstr, L"Some string"); // L"str", '\0' wchar_t wc = wstr[0]; WChar s = { 0, wstr }; s.cwstr = s.wstr; wprintf(L"wide string: %S\n", str); for (int i=0; i
xsldbg help
xsldbg is similar to gdb. It has three modes of execution of stylesheets.
  • Run the whole stylesheet
  • Step to next xsl instruction
  • Continue to next break point is found
  • On systems with readline library available you can use the back/forward keys to navigate the history of entered commands. On all systems the last entered command can be repeated by just pressing the <ENTER> key.
  • TEMPLATENAME : a valid template name
  • FILENAME : a valid URL for a stylesheet
  • LINENO : a valid line number in associated FILENAME
  • NUMBER_OF_FRAMES : a valid line number frames to change position by
  • BREAKPOINT_ID : a valid break point number
  • SPEED: speed to walk through code at, between 0 to 9
  • (Comment): a comment about command meaning or usage
  • { opt1 | opt2 | opt2 .. etc} : Choose one of the opt's
  • XPATH : a xpath selection of node(s)
  • PARAM_ID : a valid parameter number as indicated by showparam command
  • PATH : a path to change working directory to
  • TEXT : free form text (no restricttions)
  • COMMAND : a valid command for the xsdbg
  • QNAME : a valid variable/parameter name
  • SOURCE : the stylesheet being/tobe executed
  • DATA : the xml data being/tobe processed by the stylesheet
  • Help related : help
  • Running related : {bye|exit| quit}, step, stepup, stepdown, continue, run, trace
  • Libxslt parameter related : addparam,delparam, showparam
  • Template related : templates, where, frame
  • Break point related : break, showbreak, delete, enable
  • Expression viewing(xpath) : cat
  • Node viewing : ls, dir, du, cat, pwd
  • Variable viewing : globals, locals, cat
  • Node selection : source, data, cd
  • Searching :search
  • Operating system related : chdir, shell
  • File related : validate, load, save, write, free
  • nb: At the moment the file related commands as disabled because they are not completed.
    Display help on command or overiew
  • help (Show overview of product)
  • help <COMMAND> (Show help about a command)
  • Exit processing stylesheet as soon as possible.
  • bye
  • Exit processing stylesheet as soon as possible. Shortcut name: q
  • quit
  • Exit processing stylesheet as soon as possible.
  • exit
  • Step until next stylesheet instruction. Shortcut name: s
  • step
  • Step up to a older "call frame". Shortcut name: up
  • stepup (step up one frame)
  • stepup <NUMBER_OF_FRAMES> (step up specified number of frames)
  • Step down to a newer "call frame". Shortcut name: down
  • stepdown (step down one frame)
  • stepdown <NUMBER_OF_FRAMES> (step down specified number of frames)
  • Continue running stylesheet, stopping at any break points found. Shortcut name: c
  • continue
  • Restart the stylesheet. Shortcut name: r
  • run
  • Trace one execution of the stylesheet
  • trace
  • Walk through code using a range of speeds
  • walk <SPEED> (Use Ctrl-c to stop execution, <SPEED> is a value between 0 and 9. Where 0 means stop, 1 is very fast, 9 is very slow)
  • Add a libxslt parameter
  • addparam <QNAME> <XPATH> (No error checking done on the validity of <QNAME> nor <XPATH>. This is equivalent to providing --param <QNAME> <XPATH> via command line)
  • Delete a libxslt parameter
  • delparam (Delete all parameters present)
  • delparam <PARAM_ID>
  • Print the libxslt parameters present
  • showparam
  • Print a list of available templates. Search for a template Shortcut name: t
  • templates
  • templates <TEMPLATE> (Print details of template named <TEMPLATE> if it can be found)
  • Print a trace of templates calls (frame stack) and print the working directory. Shortcut name: w
  • where
  • Print the stack frame at a given depth Shortcut name: f
  • frame <FRAME_DEPTH> (Depth is a number from 0 to the current depth of call stack)
  • Print out a list of stylesheets loaded Shortcut name: style
  • stylesheets
  • Break at a template, at a location in any file loaded, or at the current node. Shortcut name: b xsldbg will try to guess the complete URL given a
  • file name without a path specified.
  • a file name in the same directory as the "top" stylesheet loaded
  • a file name relative to the current working directory of xsldbg
  • Ie if you have loaded a stylsheet file of ../en/xsldoc.xsl you can do this
    break -l xsldoc.xsl 26
  • break -l <FILENAME> <LINENO>
  • break <TEMPLATENAME> (To break at named template.)
  • break * (To break at any template found.)
  • break (To break point at current node. Yes that includes xml data nodes!)
  • To display list of template break points. Shortcut name: show
  • showbreak
  • Delete a template breakpoint Shortcut name: d
  • delete (To delete breakpoint at current node)
  • delete <BREAKPOINT_ID> (To delete breakpoint at specified break point number)
  • delete -l <FILENAME> <LINENO> (Delete at specifed file, line number)
  • delete <TEMMPLATENAME> (To delete break point at named template.)
  • delete * (To delete all break points.)
  • Enable or disable a breakpoint (Toggle enable/disable/) Shortcut name: e
  • enable (To enable/disable breakpoint at current node)
  • enable <BREAKPOINT_ID> (To enable/disable breakpoint at specified break point number
  • enable -l <FILENAME> <LINENO> (Enable/disable breakpoint at specifed file, line number)
  • Disable a breakpoint
  • disable (To disable breakpoint at current node)
  • disable <BREAKPOINT_ID> (To disable breakpoint at specified break point number
  • disable -l <FILENAME> <LINENO> (Disable breakpoint at specifed file, line number)
  • List nodes in a brief format
  • ls
  • Print list of nodes in a similary way to the dir shell command.
  • dir
  • Print a summary of child nodes in a tree format.
  • du
  • Print the result of a xpath expression on relative current node. Usage : cat <XPATH> Usage : cat $<QNAME> (To view a varaible or parameter) Print the current working directory.
  • pwd
  • Print the base for this node
  • base
  • Dump the gory details of this node
  • dump
  • Print a list of global stylesheet variables or parameters. Print the value of a global variable
  • globals (Print list of all globaly available variables)
  • globals <QNAME> (Print the value of variable specified)
  • Print a list of local stylesheet variables or parameters. Print the value of a local variable
  • locals (Print list of all locally available variables)
  • locals <QNAME> (Print the value of variable specified)
  • Switch to displaying the current node in stylesheet. Or change stylesheet used
  • source (Switch to the current node in stylesheet.)
  • source <SOURCE> (To change to a new source file. A leading '~' is replaced by the $HOME environment variable value. May need to use run command to execute it)
  • Switch to displaying the current node in xml data. Or change xml data used
  • data (Switch to the current document node.)
  • data <DATA> (To change to a new xml data file. A leading '~' is replaced by the $HOME environment variable value. May need to use run command to process it)
  • Change to the path specified by a xpath.
  • cd <XPATH>
  • cd -t<TEMPLATENAME> (To changes current SOURCE node to a be xsl template with name <NAME>, but does execute source command)
  • cd -s<XPATH> (An absolute xPath to node within stylesheet)
  • cd <SHORTCUT> <XPATH>
  • Where SHORTCUT can be either
  • << = preceding-sibling::node()
  • >> = following-sibling::node()
  • <- = ancestor::node()
  • -> = decendant::node()
  • Validate the output file generated by stylesheet (Disabled) Reload stylesheet and data file(s) (Disabled see run) Save the generated data file (Disabled) To be completed Free stylesheet and data (Disabled see run) Search a database of all information gathered from styleets loaded When the search command is issued a file (search.data) will be created in the current directory. You can then process this file with your own stylessheet to present data in a other ways than displayed by default. Depending on the amount of data collected it might take a while to compled this command. At the moment breakpoints are not being sorted properly. Which is being looked at.
  • search <XPATH>(See what xpath can be used see search.dtd)
  • search -sort <XPATH>(Enable tell search.xsl to sort the result before outputing it)
  • Change the working directory
  • chdir <PATH> (A relative or absolute path for operating system)
  • Execute shell command
  • shell <TEXT> (<TEXT> is the text to be passed to operating system for execution)
  • kdbg-2.5.5/kdbg/testprogs/xsldoc.xsl000066400000000000000000000060141247243200200174140ustar00rootroot00000000000000 xsldbg version ==================== Help about was not found. Help document version Command summary Command : Summary : Usage: kdbg-2.5.5/kdbg/threadlist.cpp000066400000000000000000000060331247243200200162060ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "threadlist.h" #include "dbgdriver.h" #include #include #include #include #include class ThreadEntry : public QTreeWidgetItem, public ThreadInfo { public: ThreadEntry(QTreeWidget* parent, const ThreadInfo& thread); void setFunction(const QString& func); bool m_delete; /* used for updating the list */ }; ThreadEntry::ThreadEntry(QTreeWidget* parent, const ThreadInfo& thread) : QTreeWidgetItem(parent, QStringList() << thread.threadName << thread.function), ThreadInfo(thread), m_delete(false) { } void ThreadEntry::setFunction(const QString& func) { function = func; setText(1, function); } ThreadList::ThreadList(QWidget* parent) : QTreeWidget(parent) { setHeaderLabels(QStringList() << i18n("Thread ID") << i18n("Location")); header()->setResizeMode(1, QHeaderView::Interactive); setRootIsDecorated(false); // load pixmaps m_focusIcon = UserIcon("pcinner"); makeNoFocusIcon(); connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(slotCurrentChanged(QTreeWidgetItem*))); } ThreadList::~ThreadList() { } void ThreadList::updateThreads(const std::list& threads) { // reset flag in all items for (QTreeWidgetItemIterator i(this); *i; ++i) static_cast(*i)->m_delete = true; for (std::list::const_iterator i = threads.begin(); i != threads.end(); ++i) { // look up this thread by id ThreadEntry* te = threadById(i->id); if (te == 0) { te = new ThreadEntry(this, *i); } else { te->m_delete = false; te->setFunction(i->function); } // set focus icon te->hasFocus = i->hasFocus; te->setIcon(0, i->hasFocus ? QIcon(m_focusIcon) : QIcon(m_noFocusIcon)); } // delete all entries that have not been seen for (QTreeWidgetItemIterator i(this); *i;) { ThreadEntry* te = static_cast(*i); ++i; // step ahead before deleting it ;-) if (te->m_delete) { delete te; } } } ThreadEntry* ThreadList::threadById(int id) { for (QTreeWidgetItemIterator i(this); *i; ++i) { ThreadEntry* te = static_cast(*i); if (te->id == id) { return te; } } return 0; } /* * Creates an icon of the same size as the m_focusIcon, but which is * totally transparent. */ void ThreadList::makeNoFocusIcon() { m_noFocusIcon = m_focusIcon; { QPainter p(&m_noFocusIcon); p.fillRect(0,0, m_noFocusIcon.width(),m_noFocusIcon.height(), QColor(Qt::white)); } m_noFocusIcon.setMask(m_noFocusIcon.createHeuristicMask()); } void ThreadList::slotCurrentChanged(QTreeWidgetItem* newItem) { if (newItem == 0) return; ThreadEntry* te = static_cast(newItem); // change the focused thread if (te->hasFocus) return; emit setThread(te->id); } #include "threadlist.moc" kdbg-2.5.5/kdbg/threadlist.h000066400000000000000000000013501247243200200156500ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef THREADLIST_H #define THREADLIST_H #include #include #include class ThreadInfo; class ThreadEntry; class ThreadList : public QTreeWidget { Q_OBJECT public: ThreadList(QWidget* parent); ~ThreadList(); public slots: void updateThreads(const std::list&); void slotCurrentChanged(QTreeWidgetItem*); signals: void setThread(int); protected: ThreadEntry* threadById(int id); void makeNoFocusIcon(); QPixmap m_focusIcon; QPixmap m_noFocusIcon; }; #endif // THREADLIST_H kdbg-2.5.5/kdbg/ttywnd.cpp000066400000000000000000000107551247243200200154020ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "ttywnd.h" #include #include #include #include #include #include "config.h" #include #include /* open, close, etc. */ #include #include #ifdef HAVE_PTY_H #include /* openpty on Linux */ #endif #ifdef HAVE_LIBUTIL_H #include /* openpty on FreeBSD */ #endif #ifdef HAVE_UTIL_H /* openpty on NetBSD, OpenBSD */ #include #endif #include #include "mydebug.h" STTY::STTY() : QObject(), m_masterfd(-1), m_slavefd(-1), m_outNotifier(0) { if (findTTY()) { ::fcntl(m_masterfd, F_SETFL, O_NDELAY); m_outNotifier = new QSocketNotifier(m_masterfd, QSocketNotifier::Read); connect(m_outNotifier, SIGNAL(activated(int)), SLOT(outReceived(int))); } else { m_slavetty = QString(); } } STTY::~STTY() { if (m_outNotifier) { ::close(m_masterfd); if (m_slavefd >= 0) ::close(m_slavefd); delete m_outNotifier; } } bool STTY::findTTY() { m_masterfd = -1; #ifdef HAVE_FUNC_OPENPTY /* use glibc2's openpty */ if (m_masterfd < 0) { if (::openpty(&m_masterfd, &m_slavefd, 0, 0, 0) == 0) { const char* tname = ::ttyname(m_slavefd); if (tname != 0) { m_slavetty = tname; } else { ::close(m_slavefd); ::close(m_masterfd); m_masterfd = m_slavefd = -1; } } } #endif // resort to BSD-style terminals if (m_masterfd < 0) { const char* s3; const char* s4; char ptynam[] = "/dev/ptyxx"; char ttynam[] = "/dev/ttyxx"; static const char ptyc3[] = "pqrstuvwxyzabcde"; static const char ptyc4[] = "0123456789abcdef"; // Find a master pty that we can open for (s3 = ptyc3; *s3 != 0 && m_masterfd < 0; s3++) { for (s4 = ptyc4; *s4 != 0; s4++) { ptynam[8] = ttynam[8] = *s3; ptynam[9] = ttynam[9] = *s4; if ((m_masterfd = ::open(ptynam,O_RDWR)) >= 0) { if (::geteuid() == 0 || ::access(ttynam,R_OK|W_OK) == 0) { m_slavetty = ttynam; break; } ::close(m_masterfd); m_masterfd = -1; } } } } return m_masterfd >= 0; } void STTY::outReceived(int f) { for (;;) { char buf[1024]; int n = ::read(f, buf, sizeof(buf)); if (n < 0) { if (errno != EAGAIN) { /* this is not an error */ // ugh! error! somebody disconnect this signal please! } break; } emit output(buf, n); if (n == 0) break; } } TTYWindow::TTYWindow(QWidget* parent) : QPlainTextEdit(parent), m_tty(0), m_pos(document()) { setFont(KGlobalSettings::fixedFont()); setReadOnly(true); setWordWrapMode(QTextOption::NoWrap); setUndoRedoEnabled(false); m_pos.setPosition(0); } TTYWindow::~TTYWindow() { if (m_tty) deactivate(); } QString TTYWindow::activate() { // allocate a pseudo terminal m_tty = new STTY; QString ttyName = m_tty->slaveTTY(); if (ttyName.isEmpty()) { // failed to allocate terminal delete m_tty; m_tty = 0; return QString(); } else { connect(m_tty, SIGNAL(output(char*,int)), SLOT(slotAppend(char*,int))); return ttyName; } } void TTYWindow::deactivate() { delete m_tty; m_tty = 0; } void TTYWindow::slotAppend(char* buffer, int count) { // parse off lines char* start = buffer; while (count > 0) { int len = 0; while (count > 0 && start[len] != '\n' && start[len] != '\r') { --count; ++len; } if (len > 0) { QString str = QString::fromLatin1(start, len); // replace text in the last line // this selection is non-empty only after a '\r' that was not // followed by a '\n' m_pos.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, len); m_pos.insertText(str); start += len; len = 0; } if (count > 0 && *start == '\r') { ++start; --count; m_pos.movePosition(QTextCursor::StartOfLine); } if (count > 0 && *start == '\n') { ++start; --count; m_pos.movePosition(QTextCursor::End); m_pos.insertText(QString('\n')); } } } void TTYWindow::contextMenuEvent(QContextMenuEvent *event) { QMenu* menu = createStandardContextMenu(); menu->addSeparator(); menu->addAction(i18n("&Clear"),this, SLOT(slotClear())); menu->exec(event->globalPos()); delete menu; } void TTYWindow::slotClear() { clear(); m_pos.movePosition(QTextCursor::End); } #include "ttywnd.moc" kdbg-2.5.5/kdbg/ttywnd.h000066400000000000000000000027671247243200200150530ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef TTYWND_H #define TTYWND_H #include class QSocketNotifier; /** * This class is cortesy Judin Max . * * The master side of the TTY is the emulator. * * The slave side is where a client process can write output and can read * input. For this purpose, it must open the file (terminal device) whose * name is returned by @ref slaveTTY for both reading and writing. To * establish the stdin, stdout, and stderr channels the file descriptor * obtained by this must be dup'd to file descriptors 0, 1, and 2, resp. */ class STTY : public QObject { Q_OBJECT public: STTY(); ~STTY(); QString slaveTTY(){ return m_slavetty; }; protected slots: void outReceived(int); signals: void output(char* buffer, int charlen); protected: int m_masterfd; int m_slavefd; QSocketNotifier* m_outNotifier; QString m_slavetty; bool findTTY(); }; class TTYWindow : public QPlainTextEdit { Q_OBJECT public: TTYWindow(QWidget* parent); ~TTYWindow(); QString activate(); void deactivate(); protected: STTY* m_tty; QTextCursor m_pos; //!< tracks horizontal cursor position virtual void contextMenuEvent(QContextMenuEvent*); protected slots: void slotAppend(char* buffer, int count); void slotClear(); }; #endif // TTYWND_H kdbg-2.5.5/kdbg/typetable.cpp000066400000000000000000000241641247243200200160410ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "typetable.h" #include #include #include #include #include #include #include #include #include "mydebug.h" //! the TypeTables of all known libraries static std::list typeTables; bool typeTablesInited = false; //! an indentifier for wchar_t TypeInfo TypeInfo::m_wchartType(""); //! the unknown type TypeInfo TypeInfo::m_unknownType(""); void TypeTable::initTypeLibraries() { if (!typeTablesInited) { TypeTable::loadTypeTables(); } } void TypeTable::loadTypeTables() { typeTablesInited = true; const QStringList files = KGlobal::dirs()->findAllResources("types", "*.kdbgtt", KStandardDirs::NoDuplicates); if (files.isEmpty()) { TRACE("no type tables found"); return; } for (QStringList::ConstIterator p = files.begin(); p != files.end(); ++p) { typeTables.push_back(TypeTable()); typeTables.back().loadFromFile(*p); } } TypeTable::TypeTable() { } TypeTable::~TypeTable() { } static const char TypeTableGroup[] = "Type Table"; static const char LibDisplayName[] = "LibDisplayName"; static const char ShlibRE[] = "ShlibRE"; static const char EnableBuiltin[] = "EnableBuiltin"; static const char PrintQStringCmd[] = "PrintQStringCmd"; static const char TypesEntryFmt[] = "Types%d"; static const char DisplayEntry[] = "Display"; static const char AliasEntry[] = "Alias"; static const char TemplateEntry[] = "Template"; static const char ExprEntryFmt[] = "Expr%d"; static const char FunctionGuardEntryFmt[] = "FunctionGuard%d"; void TypeTable::loadFromFile(const QString& fileName) { TRACE("reading file " + fileName); KConfig confFile(fileName, KConfig::SimpleConfig); /* * Read library name and properties. */ KConfigGroup cf = confFile.group(TypeTableGroup); m_displayName = cf.readEntry(LibDisplayName); if (m_displayName.isEmpty()) { // use file name instead QFileInfo fi(fileName); m_displayName = fi.completeBaseName(); } m_shlibNameRE = QRegExp(cf.readEntry(ShlibRE)); m_enabledBuiltins = cf.readEntry(EnableBuiltin, QStringList()); QString printQString = cf.readEntry(PrintQStringCmd); m_printQStringDataCmd = printQString.toAscii(); /* * Get the types. We search for entries of kind Types1, Types2, etc. * because a single entry Types could get rather long for large * libraries. */ QString typesEntry; for (int i = 1; ; i++) { // next bunch of types KConfigGroup cf = confFile.group(TypeTableGroup); typesEntry.sprintf(TypesEntryFmt, i); if (!cf.hasKey(typesEntry)) break; QStringList typeNames = cf.readEntry(typesEntry, QStringList()); // now read them QString alias; for (QStringList::iterator it = typeNames.begin(); it != typeNames.end(); ++it) { KConfigGroup cf = confFile.group(*it); // check if this is an alias alias = cf.readEntry(AliasEntry); if (alias.isEmpty()) { readType(cf, *it); } else { // look up the alias type and insert it TypeInfoMap::iterator i = m_typeDict.find(alias); if (i == m_typeDict.end()) { TRACE(*it + ": alias " + alias + " not found"); } else { m_aliasDict.insert(std::make_pair(*it, &i->second)); TRACE(*it + ": alias " + alias); } } } } // for all Types%d } void TypeTable::readType(const KConfigGroup& cf, const QString& type) { // the display string QString expr = cf.readEntry(DisplayEntry); TypeInfo info(expr); if (info.m_numExprs == 0) { TRACE("bogus type " + type + ": no %% in Display: " + expr); return; } info.m_templatePattern = cf.readEntry(TemplateEntry); // Expr1, Expr2, etc... QString exprEntry; QString funcGuardEntry; for (int j = 0; j < info.m_numExprs; j++) { exprEntry.sprintf(ExprEntryFmt, j+1); expr = cf.readEntry(exprEntry); info.m_exprStrings[j] = expr; funcGuardEntry.sprintf(FunctionGuardEntryFmt, j+1); expr = cf.readEntry(funcGuardEntry); info.m_guardStrings[j] = expr; } // add the new type if (info.m_templatePattern.indexOf('<') < 0) m_typeDict.insert(std::make_pair(type, info)); else m_templates.insert(std::make_pair(type, info)); TRACE(type + QString().sprintf(": %d exprs", info.m_numExprs)); } void TypeTable::copyTypes(TypeInfoRefMap& dict) { for (TypeInfoMap::iterator i = m_typeDict.begin(); i != m_typeDict.end(); ++i) { dict.insert(std::make_pair(i->first, &i->second)); } std::copy(m_aliasDict.begin(), m_aliasDict.end(), std::inserter(dict, dict.begin())); } bool TypeTable::isEnabledBuiltin(const QString& feature) const { return m_enabledBuiltins.indexOf(feature) >= 0; } TypeInfo::TypeInfo(const QString& displayString) { // decompose the input into the parts int i = 0; int startIdx = 0; int idx; while (i < typeInfoMaxExpr && (idx = displayString.indexOf('%', startIdx)) >= 0) { m_displayString[i] = displayString.mid(startIdx, idx-startIdx); startIdx = idx+1; i++; } m_numExprs = i; /* * Remaining string; note that there's one more display string than * sub-expressions. */ m_displayString[i] = displayString.right(displayString.length()-startIdx); } TypeInfo::~TypeInfo() { } ProgramTypeTable::ProgramTypeTable() : m_parseQt2QStrings(false), m_QCharIsShort(false), m_printQStringDataCmd(0) { } ProgramTypeTable::~ProgramTypeTable() { } void ProgramTypeTable::loadTypeTable(TypeTable* table) { table->copyTypes(m_types); // add templates const TypeTable::TypeInfoMap& t = table->templates(); std::transform(t.begin(), t.end(), std::inserter(m_templates, m_templates.begin()), std::ptr_fun(template2Info)); // check whether to enable builtin QString support if (!m_parseQt2QStrings) { m_parseQt2QStrings = table->isEnabledBuiltin("QString::Data"); } if (!m_QCharIsShort) { m_QCharIsShort = table->isEnabledBuiltin("QCharIsShort"); } if (m_printQStringDataCmd.isEmpty()) { m_printQStringDataCmd = table->printQStringDataCmd(); } } ProgramTypeTable::TemplateMap::value_type ProgramTypeTable::template2Info(const TypeTable::TypeInfoMap::value_type& tt) { QStringList args = splitTemplateArgs(tt.second.m_templatePattern); TemplateMap::value_type result(args.front(), TemplateInfo()); result.second.type = &tt.second; args.pop_front(); result.second.templateArgs = args; return result; } /** * Splits the name \a t into the template name and its arguments. * The first entry of the returned list is the template name, the remaining * entries are the arguments. */ QStringList ProgramTypeTable::splitTemplateArgs(const QString& t) { QStringList result; result.push_back(t); int i = t.indexOf('<'); if (i < 0) return result; // split off the template name result.front().truncate(i); i++; // skip '<' // look for the next comma or the closing '>', skipping nested '<>' int nest = 0; int start = i; for (; i < t.length() && nest >= 0; i++) { if (t[i] == '<') nest++; else if (t[i] == '>') nest--; else if (nest == 0 && t[i] == ',') { // found end of argument QString arg = t.mid(start, i-start); result.push_back(arg); start = i+1; // skip ',' } } // accept the template only if the closing '>' is the last character if (nest < 0 && i == t.length()) { QString arg = t.mid(start, i-start-1); result.push_back(arg); } else { result.clear(); result.push_back(t); } return result; } const TypeInfo* ProgramTypeTable::lookup(QString type) { /* * Registered aliases contain the complete template parameter list. * Check for an alias first so that this case is out of the way. */ if (const TypeInfo* result = m_aliasDict[type]) return result; /* * Check for a normal type. Even if type is a template instance, * it could have been registered as a normal type instead of a pattern. */ if (const TypeInfo* result = m_types[type]) return result; /* * The hard part: Look up a template. */ QStringList parts = splitTemplateArgs(type); if (parts.size() == 1) return 0; // not a template // We can have several patterns for the same template name. std::pair range = m_templates.equal_range(parts.front()); // We pick the one that has the wildcards in the later parameters. unsigned minPenalty = ~0U; const TypeInfo* result = 0; parts.pop_front(); for (TemplateMap::const_iterator i = range.first; i != range.second; ++i) { const QStringList& pat = i->second.templateArgs; if (parts.size() < pat.size()) continue; // too few arguments // a "*" in the last position of the pattern matches all arguments // at the end of the template's arguments if (parts.size() > pat.size() && pat.back() != "*") continue; // too many arguments and no wildcard QStringList::const_iterator t = parts.begin(); QStringList::const_iterator p = pat.begin(); unsigned accumPenalty = 0; bool equal = true; unsigned penalty = ~(~0U>>1); // 1 in the leading bit while (equal && p != pat.end()) { if (*p == "*") accumPenalty |= penalty; // penalize wildcards else equal = *p == *t; ++p, ++t, penalty >>= 1; } if (equal) { if (accumPenalty == 0) return i->second.type; if (accumPenalty < minPenalty) { result = i->second.type; minPenalty = accumPenalty; } } } return result; } void ProgramTypeTable::registerAlias(const QString& name, const TypeInfo* type) { ASSERT(lookup(name) == 0 || lookup(name) == type); m_aliasDict.insert(std::make_pair(name, type)); } void ProgramTypeTable::loadLibTypes(const QStringList& libs) { for (QStringList::const_iterator it = libs.begin(); it != libs.end(); ++it) { // look up the library for (std::list::iterator t = typeTables.begin(); t != typeTables.end(); ++t) { if (t->matchFileName(*it)) { TRACE("adding types for " + *it); loadTypeTable(&*t); } } } } kdbg-2.5.5/kdbg/typetable.h000066400000000000000000000125031247243200200155000ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include #include #include #include class KConfigGroup; /** * The maximum number of sub-expressions that may appear in a single struct * value. */ const int typeInfoMaxExpr = 5; struct TypeInfo { TypeInfo(const QString& displayString); ~TypeInfo(); /** * The number of sub-expressions that need to be evaluated to get the * struct value. */ int m_numExprs; /** * This array contains the various parts which glue together the * sub-expressions. The entries in this array are the parts that appear * between the percent signs '%' of the display expression; hence, * there is one part more than there are sub-expressions. */ QString m_displayString[typeInfoMaxExpr+1]; /** * This is a list of partial expressions. Each contains one or more \%s, * which will be replaced by the parent expression. The results are * substituted for the percent signs in m_displayString. */ QString m_exprStrings[typeInfoMaxExpr]; /** * This is a list of guard expressions. Each contains one or more \%s, * which will be replaced by the parent expression, or is empty. If the * evaluation of the resulting expression returns an error, the * corresponding expression from m_exprStrings is not evaluated. (This * is used to guard function calls.) */ QString m_guardStrings[typeInfoMaxExpr]; /** * This is the type name including template arguments that contain a * pattern: A single '*' as template parameter matches one template * argument, except that a '*' as the last template parameter matches * all remaining template argument. */ QString m_templatePattern; /** * Returns a pointer to a TypeInfo that identifies wchar_t */ static TypeInfo* wchartType() { return &m_wchartType; } /** * Gets a pointer to a TypeInfo that means: "I don't know the type" */ static TypeInfo* unknownType() { return &m_unknownType; } protected: static TypeInfo m_wchartType; static TypeInfo m_unknownType; }; class TypeTable { public: TypeTable(); ~TypeTable(); typedef std::map TypeInfoMap; typedef std::map TypeInfoRefMap; /** * Load all known type libraries. */ static void initTypeLibraries(); /** * Copy type infos to the specified dictionary. */ void copyTypes(TypeInfoRefMap& dict); /** * Returns the template types */ const TypeInfoMap& templates() const { return m_templates; } /** * Does the file name match this library? */ bool matchFileName(const QString& fileName) const { return m_shlibNameRE.indexIn(fileName) >= 0; } /** * Is the specified builtin feature enabled in this type library? */ bool isEnabledBuiltin(const QString& feature) const; /** * Returns the command to print the QString data. */ const char* printQStringDataCmd() const { return m_printQStringDataCmd.constData(); } protected: /** * Loads the structure type information from the configuration files. */ static void loadTypeTables(); void loadFromFile(const QString& fileName); void readType(const KConfigGroup& cf, const QString& type); TypeInfoMap m_typeDict; TypeInfoRefMap m_aliasDict; TypeInfoMap m_templates; QString m_displayName; QRegExp m_shlibNameRE; QStringList m_enabledBuiltins; QByteArray m_printQStringDataCmd; }; /** * This table keeps only references to the global type table. It is set up * once per program. */ class ProgramTypeTable { public: ProgramTypeTable(); ~ProgramTypeTable(); /** * Load types belonging to the specified libraries. */ void loadLibTypes(const QStringList& libs); /** * Load types belonging to the specified type table */ void loadTypeTable(TypeTable* table); /** * Lookup a structure type. * * If the type is unknown, 0 is returned. */ const TypeInfo* lookup(QString type); /** * Adds a new alias for a type name. */ void registerAlias(const QString& name, const TypeInfo* type); /** * Tells whether we use built-in support to understand QStrings. */ bool parseQt2QStrings() const { return m_parseQt2QStrings; } /** * Tells whether QChar are defined like in Qt3. */ bool qCharIsShort() const { return m_QCharIsShort; } /** * Returns the command to print the QString data. */ const char* printQStringDataCmd() const { return m_printQStringDataCmd; } protected: TypeTable::TypeInfoRefMap m_types; TypeTable::TypeInfoRefMap m_aliasDict; struct TemplateInfo { QStringList templateArgs; const TypeInfo* type; }; typedef std::multimap TemplateMap; TemplateMap m_templates; //!< one or more template patterns per template name static TemplateMap::value_type template2Info(const TypeTable::TypeInfoMap::value_type& tt); static QStringList splitTemplateArgs(const QString& t); bool m_parseQt2QStrings; bool m_QCharIsShort; QByteArray m_printQStringDataCmd; }; kdbg-2.5.5/kdbg/typetables/000077500000000000000000000000001247243200200155115ustar00rootroot00000000000000kdbg-2.5.5/kdbg/typetables/CMakeLists.txt000066400000000000000000000003241247243200200202500ustar00rootroot00000000000000install(FILES qt.kdbgtt qt2.kdbgtt qt3.kdbgtt qt4core.kdbgtt kdecore.kdbgtt kdecore3.kdbgtt glib.kdbgtt gtk+.kdbgtt stdc++.kdbgtt stdc++6.kdbgtt X11.kdbgtt DESTINATION ${DATA_INSTALL_DIR}/kdbg/types) kdbg-2.5.5/kdbg/typetables/X11.kdbgtt000066400000000000000000000002601247243200200172610ustar00rootroot00000000000000[Type Table] Types1=_XDisplay,Display LibDisplayName=libX11 (all versions) ShlibRE=libX11\\.so [_XDisplay] Display={ name=% } Expr1=(%1).display_name [Display] Alias=_XDisplay kdbg-2.5.5/kdbg/typetables/glib.kdbgtt000066400000000000000000000001731247243200200176300ustar00rootroot00000000000000[Type Table] Types1=GString LibDisplayName=libglib ShlibRE=libglib.*\\.so\\.[0-9]+$ [GString] Display={ % } Expr1=(%s).str kdbg-2.5.5/kdbg/typetables/gtk+.kdbgtt000066400000000000000000000002041247243200200175460ustar00rootroot00000000000000[Type Table] Types1=GtkWidget LibDisplayName=libgtk+ ShlibRE=libgtk.*\\.so\\.[0-9]+$ [GtkWidget] Display={ name=% } Expr1=(%s).name kdbg-2.5.5/kdbg/typetables/kdecore.kdbgtt000066400000000000000000000002731247243200200203300ustar00rootroot00000000000000[Type Table] Types1=KSimpleConfig LibDisplayName=kdecore (KDE 1.0 and 1.1) ShlibRE=libkdecore\\.so\\.[12]$ [KSimpleConfig] Display={ global=% } Expr1=(%s).pData->aGlobalAppFile.shd->data kdbg-2.5.5/kdbg/typetables/kdecore3.kdbgtt000066400000000000000000000002701247243200200204100ustar00rootroot00000000000000[Type Table] Types1=KSimpleConfig LibDisplayName=kdecore (KDE post-1.1) ShlibRE=libkdecore\\.so\\.3$ [KSimpleConfig] Display={ global=% } Expr1=(*(%s).pData->aGlobalAppFile.shd->data) kdbg-2.5.5/kdbg/typetables/qt.kdbgtt000066400000000000000000000007021247243200200173350ustar00rootroot00000000000000[Type Table] Types1=QString,QDir,QFileInfo,QFile Types2=QObject,QTableView LibDisplayName=libqt 1.x ShlibRE=libqt\\.so\\.1$ [QString] Display={ % } Expr1=(%s).shd->data [QObject] Display={ name=% } Expr1=(%s).objname [QTableView] Alias=QObject [QDir] Display={ path=% filter=% } Expr1=((%s).dPath.shd->data) Expr2=((%s).nameFilt.shd->data) [QFileInfo] Display={ name=% } Expr1=((%s).fn.shd->data) [QFile] Display={ name=% } Expr1=((%s).fn.shd->data) kdbg-2.5.5/kdbg/typetables/qt2.kdbgtt000066400000000000000000000013241247243200200174200ustar00rootroot00000000000000[Type Table] Types1=QString,QCString,QDir,QFileInfo,QFile Types2=QObject,QTableView LibDisplayName=libqt 2.x ShlibRE=libqt\\.so\\.2$ EnableBuiltin=QString::Data PrintQStringCmd=print ($qstrunicode=($qstrdata=(%s))->unicode)?(*(unsigned short*)$qstrunicode)@(($qstrlen=(unsigned int)($qstrdata->len))>100?100:$qstrlen):1==0\n [QString] Display={ % } Expr1=/QString::Data (%s).d [QCString] Display={ % } Expr1=(%s).shd->data [QObject] Display={ name=% } Expr1=(%s).objname [QTableView] Alias=QObject [QDir] Display={ path=% filter=% } Expr1=/QString::Data (%s).dPath.d Expr2=/QString::Data (%s).nameFilt.d [QFileInfo] Display={ name=% } Expr1=/QString::Data (%s).fn.d [QFile] Display={ name=% } Expr1=/QString::Data (%s).fn.d kdbg-2.5.5/kdbg/typetables/qt3.kdbgtt000066400000000000000000000025131247243200200174220ustar00rootroot00000000000000[Type Table] Types1=QString,QCString,QDir,QFileInfo,QFile Types2=QObject Types3=QMap,QValueList,QValueVector Types4=QPoint,QRect LibDisplayName=libqt 3.x ShlibRE=libqt-mt\\.so\\.3$ EnableBuiltin=QString::Data,QCharIsShort PrintQStringCmd=print ($qstrunicode=($qstrdata=(%s))->unicode)?(*(unsigned short*)$qstrunicode)@(($qstrlen=(unsigned int)($qstrdata->len))>100?100:$qstrlen):1==0\n [QString] Display={ % } Expr1=/QString::Data (%s).d [QCString] Display={ % } Expr1=(%s).shd->data [QObject] Display={ name=% } Expr1=(%s).objname [QDir] Display={ path=% filter=% } Expr1=/QString::Data (%s).dPath.d Expr2=/QString::Data (%s).nameFilt.d [QFileInfo] Display={ name=% } Expr1=/QString::Data (%s).fn.d [QFile] Display={ name=% } Expr1=/QString::Data (%s).fn.d [QMap] Template=QMap<*> Display={ size=% shared=% } Expr1=(%s).sh->node_count Expr2=(%s).sh->count [QValueList] Template=QValueList<*> Display={ size=% shared=% } Expr1=*((unsigned int*)((%s).sh)+1+sizeof(char*)/sizeof(int)) Expr2=((QShared*)((%s).sh))->count [QValueVector] Template=QValueVector<*> Display={ size=% shared=% capacity=% } Expr1=($tmp=(%s).sh)->finish-$tmp->start Expr2=(%s).sh->count Expr3=($tmp=(%s).sh)->end-$tmp->start [QPoint] Display={ %,% } Expr1=(%s).xp Expr2=(%s).yp [QRect] Display={ tl=(%,%) br=(%,%) } Expr1=(%s).x1 Expr2=(%s).y1 Expr3=(%s).x2 Expr4=(%s).y2 kdbg-2.5.5/kdbg/typetables/qt4core.kdbgtt000066400000000000000000000005351247243200200202760ustar00rootroot00000000000000[Type Table] Types1=QString LibDisplayName=libQtCore 4.x ShlibRE=libQtCore(_debug)?\\.so\\.4$ EnableBuiltin=QString::Data,QCharIsShort PrintQStringCmd=print ($qstrunicode=($qstrdata=(%s))->data)?(*(unsigned short*)$qstrunicode)@(($qstrlen=(unsigned int)($qstrdata->size))>100?100:$qstrlen):1==0\n [QString] Display={ % } Expr1=/QString::Data (%s).d kdbg-2.5.5/kdbg/typetables/stdc++.kdbgtt000066400000000000000000000002121247243200200177700ustar00rootroot00000000000000[Type Table] Types1=string LibDisplayName=libstdc++ ShlibRE=libstdc\\+\\+-libc6\\..*\\.so\\.[0-9]+$ [string] Display={ % } Expr1=(%s).dat kdbg-2.5.5/kdbg/typetables/stdc++6.kdbgtt000066400000000000000000000022661247243200200200710ustar00rootroot00000000000000[Type Table] Types1=string,basic_string,ostringstream,basic_ostringstream Types2=std::vector,std::vector,std::list,std::map LibDisplayName=libstdc++6 ShlibRE=libstdc\\+\\+\\.so\\.6$ [string] Display={ % } Expr1=(%s)._M_dataplus._M_p [basic_string] Template=std::basic_string Display={ % } Expr1=(%s)._M_dataplus._M_p [ostringstream] Display={ % } Expr1=(%s)._M_stringbuf._M_string._M_dataplus._M_p [basic_ostringstream] Template=std::basic_ostringstream Display={ % } Expr1=(%s)._M_stringbuf._M_string._M_dataplus._M_p [std::vector] Template=std::vector<*> Display={ size=% capcity=% } Expr1=($vec=(%s)._M_impl)._M_finish-$vec._M_start Expr2=($vec=(%s)._M_impl)._M_end_of_storage-$vec._M_start [std::vector] Template=std::vector Display={ size=% capcity=% } Expr1=(($vec=(%s)._M_impl)._M_finish._M_p-$vec._M_start._M_p)*sizeof(*$vec._M_end_of_storage)*8+$vec._M_finish._M_offset Expr2=(($vec=(%s)._M_impl)._M_end_of_storage-$vec._M_start._M_p)*sizeof(*$vec._M_end_of_storage)*8 [std::list] Template=std::list<*> Display={ size=% } Expr1=(%s).size() [std::map] Template=std::map<*> Display={ size=% } Expr1=(%s)._M_t._M_impl._M_node_count kdbg-2.5.5/kdbg/version.h.cmake000066400000000000000000000000531247243200200162500ustar00rootroot00000000000000#cmakedefine KDBG_VERSION "@KDBG_VERSION@" kdbg-2.5.5/kdbg/watchwindow.cpp000066400000000000000000000047041247243200200164040ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "watchwindow.h" #include /* i18n */ #include #include #include #include WatchWindow::WatchWindow(QWidget* parent) : QWidget(parent), m_watchEdit(this), m_watchAdd(i18n(" Add "), this), m_watchDelete(i18n(" Del "), this), m_watchVariables(this, i18n("Expression")), m_watchV(this), m_watchH() { // setup the layout m_watchAdd.setMinimumSize(m_watchAdd.sizeHint()); m_watchDelete.setMinimumSize(m_watchDelete.sizeHint()); m_watchV.setMargin(0); m_watchV.setSpacing(0); m_watchH.setMargin(0); m_watchH.setSpacing(0); m_watchV.addLayout(&m_watchH); m_watchV.addWidget(&m_watchVariables); m_watchH.addWidget(&m_watchEdit); m_watchH.addWidget(&m_watchAdd); m_watchH.addWidget(&m_watchDelete); connect(&m_watchEdit, SIGNAL(returnPressed()), SIGNAL(addWatch())); connect(&m_watchAdd, SIGNAL(clicked()), SIGNAL(addWatch())); connect(&m_watchDelete, SIGNAL(clicked()), SIGNAL(deleteWatch())); connect(&m_watchVariables, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(slotWatchHighlighted())); m_watchVariables.installEventFilter(this); setAcceptDrops(true); } WatchWindow::~WatchWindow() { } bool WatchWindow::eventFilter(QObject*, QEvent* ev) { if (ev->type() == QEvent::KeyPress) { QKeyEvent* kev = static_cast(ev); if (kev->key() == Qt::Key_Delete) { emit deleteWatch(); return true; } } return false; } void WatchWindow::dragEnterEvent(QDragEnterEvent* event) { if (event->mimeData()->hasText()) event->acceptProposedAction(); } void WatchWindow::dropEvent(QDropEvent* event) { if (event->mimeData()->hasText()) { QString text = event->mimeData()->text(); // pick only the first line text = text.trimmed(); int pos = text.indexOf('\n'); if (pos > 0) text.truncate(pos); text = text.trimmed(); if (!text.isEmpty()) emit textDropped(text); } event->acceptProposedAction(); } // place the text of the hightlighted watch expr in the edit field void WatchWindow::slotWatchHighlighted() { VarTree* expr = m_watchVariables.selectedItem(); QString text = expr ? expr->computeExpr() : QString(); m_watchEdit.setText(text); } #include "watchwindow.moc" kdbg-2.5.5/kdbg/watchwindow.h000066400000000000000000000023401247243200200160430ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef WATCHWINDOW_H #define WATCHWINDOW_H #include #include #include #include #include "exprwnd.h" class WatchWindow : public QWidget { Q_OBJECT public: WatchWindow(QWidget* parent); ~WatchWindow(); ExprWnd* watchVariables() { return &m_watchVariables; } QString watchText() const { return m_watchEdit.text(); } int columnWidth(int i) const { return m_watchVariables.columnWidth(i); } void setColumnWidth(int i, int w) { m_watchVariables.setColumnWidth(i, w); } protected: QLineEdit m_watchEdit; QPushButton m_watchAdd; QPushButton m_watchDelete; ExprWnd m_watchVariables; QVBoxLayout m_watchV; QHBoxLayout m_watchH; virtual bool eventFilter(QObject* ob, QEvent* ev); virtual void dragEnterEvent(QDragEnterEvent* event); virtual void dropEvent(QDropEvent* event); signals: void addWatch(); void deleteWatch(); void textDropped(const QString& text); protected slots: void slotWatchHighlighted(); }; #endif // WATCHWINDOW_H kdbg-2.5.5/kdbg/winstack.cpp000066400000000000000000000230311247243200200156630ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "winstack.h" #include "sourcewnd.h" #include "dbgdriver.h" #include #include #include #include #include #include #include #include /* i18n */ #include "mydebug.h" WinStack::WinStack(QWidget* parent) : KTabWidget(parent), m_pcLine(-1), m_tabWidth(0) { connect(&m_findDlg.m_buttonForward, SIGNAL(clicked()), SLOT(slotFindForward())); connect(&m_findDlg.m_buttonBackward, SIGNAL(clicked()), SLOT(slotFindBackward())); connect(this, SIGNAL(setTabWidth(int)), this, SLOT(slotSetTabWidth(int))); } WinStack::~WinStack() { } void WinStack::contextMenuEvent(QContextMenuEvent* e) { // get the context menu from the GUI factory QWidget* top = this; do top = top->parentWidget(); while (!top->isTopLevel()); KXmlGuiWindow* mw = static_cast(top); QMenu* m = static_cast(mw->factory()->container("popup_files_empty", mw)); m->exec(e->globalPos()); } void WinStack::reloadAllFiles() { for (int i = count()-1; i >= 0; i--) { windowAt(i)->reloadFile(); } } QSize WinStack::sizeHint() const { return QSize(640, 480); } void WinStack::activate(const QString& fileName, int lineNo, const DbgAddr& address) { QFileInfo fi(fileName); if (!fi.isFile()) { /* * We didn't find that file. Now check if it is a relative path and * try m_lastOpenDir as prefix. */ TRACE(fi.filePath() + (" not found, looking in " + m_lastOpenDir)); if (!fi.isRelative() || m_lastOpenDir.isEmpty()) { return; } fi.setFile(m_lastOpenDir + "/" + fi.filePath()); if (!fi.isFile()) { return; } } // if this is not an absolute path name, make it one activatePath(fi.absoluteFilePath(), lineNo, address); } void WinStack::activateFile(const QString& fileName) { activatePath(fileName, 0, DbgAddr()); } bool WinStack::activatePath(QString pathName, int lineNo, const DbgAddr& address) { // check whether the file is already open SourceWindow* fw = 0; for (int i = count()-1; i >= 0; i--) { if (windowAt(i)->fileName() == pathName) { fw = windowAt(i); break; } } if (fw == 0) { // not found, load it fw = new SourceWindow(pathName, this); // slurp the file in if (!fw->loadFile()) { // read failed delete fw; return false; } int idx = addTab(fw, QFileInfo(pathName).fileName()); setTabToolTip(idx, pathName); connect(fw, SIGNAL(clickedLeft(const QString&,int,const DbgAddr&,bool)), SIGNAL(toggleBreak(const QString&,int,const DbgAddr&,bool))); connect(fw, SIGNAL(clickedMid(const QString&,int,const DbgAddr&)), SIGNAL(enadisBreak(const QString&,int,const DbgAddr&))); // disassemble code connect(fw, SIGNAL(disassemble(const QString&, int)), SIGNAL(disassemble(const QString&, int))); connect(fw, SIGNAL(expanded(int)), SLOT(slotExpandCollapse(int))); connect(fw, SIGNAL(collapsed(int)), SLOT(slotExpandCollapse(int))); // tab width connect(this, SIGNAL(setTabWidth(int)), fw, SLOT(setTabWidth(int))); fw->setTabWidth(m_tabWidth); fw->setFocusPolicy(Qt::WheelFocus); // set PC if there is one emit newFileLoaded(); if (m_pcLine >= 0) { setPC(true, m_pcFile, m_pcLine, DbgAddr(m_pcAddress), m_pcFrame); } } return activateWindow(fw, lineNo, address); } bool WinStack::activateWindow(SourceWindow* fw, int lineNo, const DbgAddr& address) { // make the line visible if (lineNo >= 0) { fw->scrollTo(lineNo, address); } setCurrentWidget(fw); fw->setFocus(); return true; } bool WinStack::activeLine(QString& fileName, int& lineNo) { DbgAddr dummy; return activeLine(fileName, lineNo, dummy); } bool WinStack::activeLine(QString& fileName, int& lineNo, DbgAddr& address) { if (activeWindow() == 0) { return false; } fileName = activeFileName(); activeWindow()->activeLine(lineNo, address); return true; } void WinStack::updateLineItems(const KDebugger* dbg) { for (int i = count()-1; i >= 0; i--) { windowAt(i)->updateLineItems(dbg); } } void WinStack::updatePC(const QString& fileName, int lineNo, const DbgAddr& address, int frameNo) { if (m_pcLine >= 0) { setPC(false, m_pcFile, m_pcLine, DbgAddr(m_pcAddress), m_pcFrame); } m_pcFile = fileName; m_pcLine = lineNo; m_pcAddress = address.asString(); m_pcFrame = frameNo; if (lineNo >= 0) { setPC(true, fileName, lineNo, address, frameNo); } } SourceWindow* WinStack::findByFileName(const QString& fileName) const { for (int i = count()-1; i >= 0; i--) { if (windowAt(i)->fileNameMatches(fileName)) { return windowAt(i); } } return 0; } void WinStack::setPC(bool set, const QString& fileName, int lineNo, const DbgAddr& address, int frameNo) { TRACE((set ? "set PC: " : "clear PC: ") + fileName + QString().sprintf(":%d#%d ", lineNo, frameNo) + address.asString()); SourceWindow* fw = findByFileName(fileName); if (fw) fw->setPC(set, lineNo, address, frameNo); } SourceWindow* WinStack::windowAt(int i) const { return static_cast(widget(i)); } SourceWindow* WinStack::activeWindow() const { return static_cast(currentWidget()); } QString WinStack::activeFileName() const { QString f; if (activeWindow() != 0) f = activeWindow()->fileName(); return f; } void WinStack::slotFindForward() { if (activeWindow() != 0) activeWindow()->find(m_findDlg.searchText(), m_findDlg.caseSensitive(), SourceWindow::findForward); } void WinStack::slotFindBackward() { if (activeWindow() != 0) activeWindow()->find(m_findDlg.searchText(), m_findDlg.caseSensitive(), SourceWindow::findBackward); } bool WinStack::event(QEvent* evt) { if (evt->type() != QEvent::ToolTip) return KTabWidget::event(evt); SourceWindow* w = activeWindow(); if (w == 0) return true; QPoint p = static_cast(evt)->globalPos(); // get the word at the point QString word; QRect r; if (!w->wordAtPoint(w->mapFromGlobal(p), word, r)) { QToolTip::hideText(); return true; } // must be valid assert(!word.isEmpty()); assert(r.isValid()); // remember the location m_tipLocation = p; m_tipRegion = QRect(w->mapTo(this, r.topLeft()), r.size()); emit initiateValuePopup(word); return true; } void WinStack::slotShowValueTip(const QString& tipText) { QToolTip::showText(m_tipLocation, tipText, this, m_tipRegion); } void WinStack::slotDisassembled(const QString& fileName, int lineNo, const std::list& disass) { SourceWindow* fw = findByFileName(fileName); if (fw == 0) { // not found: ignore return; } fw->disassembled(lineNo, disass); } void WinStack::slotExpandCollapse(int) { // update line items after expanding or collapsing disassembled code // HACK: we know that this will result in updateLineItems // should be done more cleanly with a separate signal emit newFileLoaded(); if (m_pcLine >= 0) { setPC(true, m_pcFile, m_pcLine, DbgAddr(m_pcAddress), m_pcFrame); } } void WinStack::slotSetTabWidth(int numChars) { m_tabWidth = numChars; } void WinStack::slotFileReload() { if (activeWindow() != 0) { TRACE("reloading one file"); activeWindow()->reloadFile(); } } void WinStack::slotViewFind() { if (m_findDlg.isVisible()) { m_findDlg.done(0); } else { m_findDlg.show(); } } void WinStack::slotBrkptSet() { QString file; int lineNo; DbgAddr address; if (activeLine(file, lineNo, address)) emit toggleBreak(file, lineNo, address, false); } void WinStack::slotBrkptSetTemp() { QString file; int lineNo; DbgAddr address; if (activeLine(file, lineNo, address)) emit toggleBreak(file, lineNo, address, true); } void WinStack::slotBrkptEnable() { QString file; int lineNo; DbgAddr address; if (activeLine(file, lineNo, address)) emit enadisBreak(file, lineNo, address); } void WinStack::slotMoveProgramCounter() { QString file; int lineNo; DbgAddr address; if (activeLine(file, lineNo, address)) emit moveProgramCounter(file, lineNo, address); } void WinStack::slotClose() { QWidget* w = activeWindow(); if (!w) return; removePage(w); delete w; } FindDialog::FindDialog() : QDialog(), m_searchText(this), m_caseCheck(this), m_buttonForward(this), m_buttonBackward(this), m_buttonClose(this) { setWindowTitle(KGlobal::caption() + i18n(": Search")); m_searchText.setMinimumSize(330, 24); m_searchText.setMaxLength(10000); m_searchText.setFrame(true); m_searchText.setFocus(); m_caseCheck.setText(i18n("&Case sensitive")); m_caseCheck.setChecked(true); m_buttonForward.setText(i18n("&Forward")); m_buttonForward.setDefault(true); m_buttonBackward.setText(i18n("&Backward")); m_buttonClose.setText(i18n("Close")); connect(&m_buttonClose, SIGNAL(clicked()), SLOT(reject())); m_layout.addWidget(&m_searchText); m_layout.addWidget(&m_caseCheck); m_layout.addLayout(&m_buttons); m_buttons.addWidget(&m_buttonForward); m_buttons.addWidget(&m_buttonBackward); m_buttons.addWidget(&m_buttonClose); setLayout(&m_layout); } FindDialog::~FindDialog() { } void FindDialog::closeEvent(QCloseEvent* ev) { QDialog::closeEvent(ev); emit closed(); } void FindDialog::done(int result) { QDialog::done(result); emit closed(); } #include "winstack.moc" kdbg-2.5.5/kdbg/winstack.h000066400000000000000000000076521247243200200153430ustar00rootroot00000000000000/* * Copyright Johannes Sixt * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef WINSTACK_H #define WINSTACK_H #include #include #include #include #include #include #include #include // forward declarations class KDebugger; class WinStack; class SourceWindow; class DisassembledCode; struct DbgAddr; class FindDialog : public QDialog { Q_OBJECT public: FindDialog(); ~FindDialog(); bool caseSensitive() const { return m_caseCheck.isChecked(); } QString searchText() const { return m_searchText.text(); } virtual void done(int result); QLineEdit m_searchText; QCheckBox m_caseCheck; QPushButton m_buttonForward; QPushButton m_buttonBackward; QPushButton m_buttonClose; signals: void closed(); protected: virtual void closeEvent(QCloseEvent* ev); QVBoxLayout m_layout; QHBoxLayout m_buttons; }; class WinStack : public KTabWidget { Q_OBJECT public: WinStack(QWidget* parent); virtual ~WinStack(); /** * Slot activate also looks in this directory when the specified file is * a relative path. */ void setExtraDirectory(const QString& dir) { m_lastOpenDir = dir; } void activateFile(const QString& fileName); bool activeLine(QString& filename, int& lineNo); bool activeLine(QString& filename, int& lineNo, DbgAddr& address); bool hasWindows() const { return count() > 0; } QString activeFileName() const; SourceWindow* activeWindow() const; SourceWindow* windowAt(int i) const; virtual QSize sizeHint() const; signals: void toggleBreak(const QString&, int, const DbgAddr&, bool); void enadisBreak(const QString&, int, const DbgAddr&); void newFileLoaded(); void initiateValuePopup(const QString&); void disassemble(const QString&, int); void setTabWidth(int numChars); void moveProgramCounter(const QString&, int, const DbgAddr&); public slots: virtual void slotFindForward(); virtual void slotFindBackward(); virtual void activate(const QString& filename, int lineNo, const DbgAddr& address); void updatePC(const QString& filename, int lineNo, const DbgAddr& address, int frameNo); void reloadAllFiles(); void updateLineItems(const KDebugger* deb); void slotSetTabWidth(int numChars); void slotFileReload(); void slotViewFind(); void slotBrkptSet(); void slotBrkptSetTemp(); void slotBrkptEnable(); void slotMoveProgramCounter(); void slotClose(); // Displays the value tip at m_tipLocation void slotShowValueTip(const QString& tipText); // Shows the disassembled code at the location given by file and lineNo void slotDisassembled(const QString& fileName, int lineNo, const std::list& disass); // Updates line items after expanding/collapsing disassembled code void slotExpandCollapse(int lineNo); protected: bool activatePath(QString pathname, int lineNo, const DbgAddr& address); virtual bool activateWindow(SourceWindow* fw, int lineNo, const DbgAddr& address); /* -1 doesnt change line */ virtual void contextMenuEvent(QContextMenuEvent* e); virtual bool event(QEvent* event); void setPC(bool set, const QString& fileName, int lineNo, const DbgAddr& address, int frameNo); SourceWindow* findByFileName(const QString& fileName) const; QString m_lastOpenDir; /* where user opened last file */ // program counter QString m_pcFile; int m_pcLine; /* -1 if no PC */ QString m_pcAddress; /* exact address of PC */ int m_pcFrame; QPoint m_tipLocation; /* where tip should appear */ QRect m_tipRegion; /* where tip should remain */ int m_tabWidth; /* number of chars */ public: // find dialog FindDialog m_findDlg; }; #endif // WINSTACK_H kdbg-2.5.5/kdbg/xsldbgdriver.cpp000066400000000000000000001105141247243200200165420ustar00rootroot00000000000000/* * Copyright Johannes Sixt, Keith Isdale * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #include "xsldbgdriver.h" #include "exprwnd.h" #include #include #include #include /* i18n */ #include #include #include /* strtol, atoi */ #include /* strcpy */ #include #include "assert.h" #include "mydebug.h" static ExprValue *parseVar(const char *&s); static bool parseName(const char *&s, QString & name, VarTree::NameKind & kind); static bool parseValue(const char *&s, ExprValue * variable); static bool isErrorExpr(const char *output); #define TERM_IO_ALLOWED 1 // TODO: make this cmd info stuff non-static to allow multiple // simultaneous gdbs to run! struct XsldbgCmdInfo { DbgCommand cmd; const char *fmt; /* format string */ enum Args { argNone, argString, argNum, argStringNum, argNumString, argString2, argNum2 } argsNeeded; }; /* * The following array of commands must be sorted by the DC* values, * because they are used as indices. */ static XsldbgCmdInfo cmds[] = { {DCinitialize, "init\n", XsldbgCmdInfo::argNone}, {DCtty, "tty %s\n", XsldbgCmdInfo::argString}, {DCexecutable, "source %s\n", XsldbgCmdInfo::argString}, /* force a restart */ {DCtargetremote, "print 'target remote %s'\n", XsldbgCmdInfo::argString}, {DCcorefile, "data %s\n", XsldbgCmdInfo::argString}, /* force a restart */ {DCattach, "print 'attach %s'\n", XsldbgCmdInfo::argString}, {DCinfolinemain, "print 'info main line'\n", XsldbgCmdInfo::argNone}, {DCinfolocals, "locals -f\n", XsldbgCmdInfo::argNone}, {DCinforegisters, "print 'info reg'\n", XsldbgCmdInfo::argNone}, {DCexamine, "print 'x %s %s'\n", XsldbgCmdInfo::argString2}, {DCinfoline, "print 'templates %s:%d'\n", XsldbgCmdInfo::argStringNum}, {DCdisassemble, "print 'disassemble %s %s'\n", XsldbgCmdInfo::argString2}, {DCsetargs, "data %s\n", XsldbgCmdInfo::argString}, {DCsetenv, "addparam %s %s\n", XsldbgCmdInfo::argString2}, {DCunsetenv, "unset env %s\n", XsldbgCmdInfo::argString}, {DCsetoption, "setoption %s %d\n", XsldbgCmdInfo::argStringNum}, {DCcd, "chdir %s\n", XsldbgCmdInfo::argString}, {DCbt, "where\n", XsldbgCmdInfo::argNone}, {DCrun, "run\nsource\n", XsldbgCmdInfo::argNone}, /* Ensure that at the start of executing XSLT we show the XSLT file */ {DCcont, "continue\n", XsldbgCmdInfo::argNone}, {DCstep, "step\n", XsldbgCmdInfo::argNone}, {DCstepi, "step\n", XsldbgCmdInfo::argNone}, {DCnext, "next\n", XsldbgCmdInfo::argNone}, {DCnexti, "next\n", XsldbgCmdInfo::argNone}, {DCfinish, "stepup\n", XsldbgCmdInfo::argNone}, {DCuntil, "continue %s:%d\n", XsldbgCmdInfo::argStringNum}, {DCkill, "quit\n", XsldbgCmdInfo::argNone}, {DCbreaktext, "break %s\n", XsldbgCmdInfo::argString}, {DCbreakline, "break -l %s %d\n", XsldbgCmdInfo::argStringNum}, {DCtbreakline, "break -l %s %d\n", XsldbgCmdInfo::argStringNum }, {DCbreakaddr, "print `break *%s`\n", XsldbgCmdInfo::argString }, {DCtbreakaddr, "print `tbreak *%s`\n", XsldbgCmdInfo::argString }, {DCwatchpoint, "print 'watch %s'\n", XsldbgCmdInfo::argString}, {DCdelete, "delete %d\n", XsldbgCmdInfo::argNum}, {DCenable, "enable %d\n", XsldbgCmdInfo::argNum}, {DCdisable, "disable %d\n", XsldbgCmdInfo::argNum}, {DCprint, "print %s\n", XsldbgCmdInfo::argString}, {DCprintDeref, "print 'print (*%s)'\n", XsldbgCmdInfo::argString}, {DCprintStruct, "print 'print %s'\n", XsldbgCmdInfo::argString}, {DCprintQStringStruct, "print 'print %s'\n", XsldbgCmdInfo::argString}, {DCframe, "frame %d\n", XsldbgCmdInfo::argNum}, {DCfindType, "print 'whatis %s'\n", XsldbgCmdInfo::argString}, {DCinfosharedlib, "stylesheets\n", XsldbgCmdInfo::argNone}, {DCthread, "print 'thread %d'\n", XsldbgCmdInfo::argNum}, {DCinfothreads, "print 'info threads'\n", XsldbgCmdInfo::argNone}, {DCinfobreak, "show\n", XsldbgCmdInfo::argNone}, {DCcondition, "print 'condition %d %s'\n", XsldbgCmdInfo::argNumString}, {DCsetpc, "print 'set variable $pc=%s'\n", XsldbgCmdInfo::argString}, {DCignore, "print 'ignore %d %d'\n", XsldbgCmdInfo::argNum2}, {DCprintWChar, "print 'ignore %s'\n", XsldbgCmdInfo::argString}, {DCsetvariable, "set %s %s\n", XsldbgCmdInfo::argString2}, }; #define NUM_CMDS (int(sizeof(cmds)/sizeof(cmds[0]))) #define MAX_FMTLEN 200 XsldbgDriver::XsldbgDriver(): DebuggerDriver() { m_haveDataFile = FALSE; #ifndef NDEBUG // check command info array const char *perc; for (int i = 0; i < NUM_CMDS; i++) { // must be indexable by DbgCommand values, i.e. sorted by DbgCommand values assert(i == cmds[i].cmd); // a format string must be associated assert(cmds[i].fmt != 0); assert(strlen(cmds[i].fmt) <= MAX_FMTLEN); // format string must match arg specification switch (cmds[i].argsNeeded) { case XsldbgCmdInfo::argNone: assert(strchr(cmds[i].fmt, '%') == 0); break; case XsldbgCmdInfo::argString: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc + 2, '%') == 0); break; case XsldbgCmdInfo::argNum: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc + 2, '%') == 0); break; case XsldbgCmdInfo::argStringNum: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); perc = strchr(perc + 2, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc + 2, '%') == 0); break; case XsldbgCmdInfo::argNumString: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); perc = strchr(perc + 2, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc + 2, '%') == 0); break; case XsldbgCmdInfo::argString2: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 's'); perc = strchr(perc + 2, '%'); assert(perc != 0 && perc[1] == 's'); assert(strchr(perc + 2, '%') == 0); break; case XsldbgCmdInfo::argNum2: perc = strchr(cmds[i].fmt, '%'); assert(perc != 0 && perc[1] == 'd'); perc = strchr(perc + 2, '%'); assert(perc != 0 && perc[1] == 'd'); assert(strchr(perc + 2, '%') == 0); break; } } #endif } XsldbgDriver::~XsldbgDriver() { } QString XsldbgDriver::driverName() const { return "XSLDBG"; } QString XsldbgDriver::defaultXsldbg() { return "xsldbg --lang en --shell --gdb"; } QString XsldbgDriver::defaultInvocation() const { return defaultXsldbg(); } QStringList XsldbgDriver::boolOptionList() const { QStringList allOptions; allOptions.append("verbose"); allOptions.append("repeat"); allOptions.append("debug"); allOptions.append("novalid"); allOptions.append("noout"); allOptions.append("html"); allOptions.append("docbook"); allOptions.append("nonet"); allOptions.append("catalogs"); allOptions.append("xinclude"); allOptions.append("profile"); return allOptions; } bool XsldbgDriver::startup(QString cmdStr) { if (!DebuggerDriver::startup(cmdStr)) return false; static const char xsldbgInitialize[] = "pwd\nsetoption gdb 2\n"; /* don't need to do anything else */ executeCmdString(DCinitialize, xsldbgInitialize, false); return true; } void XsldbgDriver::commandFinished(CmdQueueItem * cmd) { TRACE(__PRETTY_FUNCTION__); // command string must be committed if (!cmd->m_committed) { // not commited! TRACE("calling " + (__PRETTY_FUNCTION__ + (" with uncommited command:\n\t" + cmd->m_cmdString))); return; } /* ok, the command is ready */ emit commandReceived(cmd, m_output.constData()); switch (cmd->m_cmd) { case DCbt: case DCinfolocals: case DCrun: case DCcont: case DCstep: case DCnext: case DCfinish:{ if (!::isErrorExpr(m_output.constData())) parseMarker(); else{ // This only shows an error for DCinfolocals // need to update KDebugger::handleRunCommand ? KMessageBox::sorry(0L, m_output); } } break; case DCinfolinemain: if (!m_xslFile.isEmpty()) emit activateFileLine(m_xslFile, 0, DbgAddr()); break; default:; } } int XsldbgDriver::findPrompt(const QByteArray& output) const { /* * If there's a prompt string in the collected output, it must be at * the very end. We do a quick check whether the last characters of * output are suitable and do the full search only if they are. */ int len = output.length(); if (len < 11 || output[len-1] != ' ' || output[len-2] != '>') return -1; // There can be text between "(xsldbg) " and the "> " at the end // since we do not know what that text is, we accept the former // anywhere in the output. return output.indexOf("(xsldbg) "); } void XsldbgDriver::parseMarker() { char *p = m_output.data(); for (;;) { if ((p == 0) || (*p == '\0')) { m_output.clear(); return; } if (strncmp(p, "Breakpoint for file ", 20) == 0) break; // try to marker on next line ! p = strchr(p, '\n'); if ((p != 0) && (*p != '\0')) p++; } // extract the marker char *startMarker = p + 20; //TRACE(QString("found marker:") + startMarker); char *endMarker = strchr(startMarker, '\n'); if (endMarker == 0) return; *endMarker = '\0'; // extract filename and line number static QRegExp MarkerRE(" at line (\\d+)"); int lineNoStart = MarkerRE.indexIn(startMarker); if (lineNoStart >= 0) { int lineNo = MarkerRE.cap(1).toInt(); DbgAddr address; // now show the window startMarker[lineNoStart-1] = '\0'; /* split off file name */ TRACE("Got file and line number"); startMarker++; TRACE(QString(startMarker) + ": " + QString::number(lineNo)); emit activateFileLine(startMarker, lineNo - 1, address); } } /* * Escapes characters that might lead to problems when they appear on gdb's * command line. */ static void normalizeStringArg(QString & arg) { /* * Remove trailing backslashes. This approach is a little simplistic, * but we know that there is at the moment no case where a trailing * backslash would make sense. */ while (!arg.isEmpty() && arg[arg.length() - 1] == '\\') { arg = arg.left(arg.length() - 1); } } QString XsldbgDriver::makeCmdString(DbgCommand cmd, QString strArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argString); normalizeStringArg(strArg); if (cmd == DCcd) { // need the working directory when parsing the output m_programWD = strArg; } else if (cmd == DCexecutable) { // want to display the XSL file m_xslFile = strArg; } QString cmdString; cmdString.sprintf(cmds[cmd].fmt, strArg.toUtf8().constData()); return cmdString; } QString XsldbgDriver::makeCmdString(DbgCommand cmd, int intArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argNum); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, intArg); return cmdString; } QString XsldbgDriver::makeCmdString(DbgCommand cmd, QString strArg, int intArg) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argStringNum || cmds[cmd].argsNeeded == XsldbgCmdInfo::argNumString || cmd == DCexamine || cmd == DCtty); normalizeStringArg(strArg); QString cmdString; if (cmd == DCtty) { /* * intArg specifies which channels should be redirected to * /dev/null. It is a value or'ed together from RDNstdin, * RDNstdout, RDNstderr. */ static const char *const runRedir[8] = { "", " /dev/null", " /dev/null", " 2>/dev/null", " /dev/null", " >/dev/null 2>&1", " /dev/null 2>&1" }; if (strArg.isEmpty()) intArg = 7; /* failsafe if no tty */ m_redirect = runRedir[intArg & 7]; return makeCmdString(DCtty, strArg); /* note: no problem if strArg empty */ } if (cmd == DCexamine) { // make a format specifier from the intArg static const char size[16] = { '\0', 'b', 'h', 'w', 'g' }; static const char format[16] = { '\0', 'x', 'd', 'u', 'o', 't', 'a', 'c', 'f', 's', 'i' }; assert(MDTsizemask == 0xf); /* lowest 4 bits */ assert(MDTformatmask == 0xf0); /* next 4 bits */ int count = 16; /* number of entities to print */ char sizeSpec = size[intArg & MDTsizemask]; char formatSpec = format[(intArg & MDTformatmask) >> 4]; assert(sizeSpec != '\0'); assert(formatSpec != '\0'); // adjust count such that 16 lines are printed switch (intArg & MDTformatmask) { case MDTstring: case MDTinsn: break; /* no modification needed */ default: // all cases drop through: switch (intArg & MDTsizemask) { case MDTbyte: case MDThalfword: count *= 2; case MDTword: count *= 2; case MDTgiantword: count *= 2; } break; } QString spec; spec.sprintf("/%d%c%c", count, sizeSpec, formatSpec); return makeCmdString(DCexamine, spec, strArg); } if (cmds[cmd].argsNeeded == XsldbgCmdInfo::argStringNum) { // line numbers are zero-based if (cmd == DCuntil || cmd == DCbreakline || cmd == DCtbreakline || cmd == DCinfoline) { intArg++; } if (cmd == DCinfoline) { // must split off file name part strArg = QFileInfo(strArg).fileName(); } cmdString.sprintf(cmds[cmd].fmt, strArg.toUtf8().constData(), intArg); } else { cmdString.sprintf(cmds[cmd].fmt, intArg, strArg.toUtf8().constData()); } return cmdString; } QString XsldbgDriver::makeCmdString(DbgCommand cmd, QString strArg1, QString strArg2) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argString2); normalizeStringArg(strArg1); normalizeStringArg(strArg2); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, strArg1.toUtf8().constData(), strArg2.toUtf8().constData()); return cmdString; } QString XsldbgDriver::makeCmdString(DbgCommand cmd, int intArg1, int intArg2) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argNum2); QString cmdString; cmdString.sprintf(cmds[cmd].fmt, intArg1, intArg2); return cmdString; } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, bool clearLow) { assert(cmd >= 0 && cmd < NUM_CMDS); assert(cmds[cmd].argsNeeded == XsldbgCmdInfo::argNone); if (cmd == DCrun) { m_haveCoreFile = false; } return executeCmdString(cmd, cmds[cmd].fmt, clearLow); } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, QString strArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg), clearLow); } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, int intArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, intArg), clearLow); } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, QString strArg, int intArg, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg, intArg), clearLow); } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, QString strArg1, QString strArg2, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, strArg1, strArg2), clearLow); } CmdQueueItem * XsldbgDriver::executeCmd(DbgCommand cmd, int intArg1, int intArg2, bool clearLow) { return executeCmdString(cmd, makeCmdString(cmd, intArg1, intArg2), clearLow); } CmdQueueItem * XsldbgDriver::queueCmd(DbgCommand cmd, QueueMode mode) { return queueCmdString(cmd, cmds[cmd].fmt, mode); } CmdQueueItem * XsldbgDriver::queueCmd(DbgCommand cmd, QString strArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg), mode); } CmdQueueItem * XsldbgDriver::queueCmd(DbgCommand cmd, int intArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, intArg), mode); } CmdQueueItem * XsldbgDriver::queueCmd(DbgCommand cmd, QString strArg, int intArg, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg, intArg), mode); } CmdQueueItem * XsldbgDriver::queueCmd(DbgCommand cmd, QString strArg1, QString strArg2, QueueMode mode) { return queueCmdString(cmd, makeCmdString(cmd, strArg1, strArg2), mode); } void XsldbgDriver::terminate() { qDebug("XsldbgDriver::Terminate"); flushCommands(); executeCmdString(DCinitialize, "quit\n", true); ::kill(pid(), SIGTERM); m_state = DSidle; } void XsldbgDriver::detachAndTerminate() { qDebug("XsldbgDriver::detachAndTerminate"); flushCommands(); executeCmdString(DCinitialize, "quit\n", true); ::kill(pid(), SIGINT); } void XsldbgDriver::interruptInferior() { // remove accidentally queued commands qDebug("interruptInferior"); flushHiPriQueue(); ::kill(pid(), SIGINT); } static bool isErrorExpr(const char *output) { int wordIndex; bool result = false; #define ERROR_WORD_COUNT 6 static const char *errorWords[ERROR_WORD_COUNT] = { "Error:", "error:", // libxslt error "Unknown command", "Warning:", "warning:", // libxslt warning "Information:" // xsldbg information }; static int errorWordLength[ERROR_WORD_COUNT] = { 6, /* Error */ 6, /* rror */ 15, /* Unknown command*/ 8, /* Warning */ 8, /* warning */ 12 /* Information */ }; for (wordIndex = 0; wordIndex < ERROR_WORD_COUNT; wordIndex++){ // ignore any warnings relating to local variables not being available if (strncmp(output, errorWords[wordIndex], errorWordLength[wordIndex]) == 0 && (wordIndex == 0 && strstr(output, "try stepping past the xsl:param") == 0) ) { result = true; TRACE(QString("Error/Warning/Information from xsldbg ") + output); break; } } return result; } /** * Returns true if the output is an error message. If wantErrorValue is * true, a new ExprValue object is created and filled with the error message. */ static bool parseErrorMessage(const char *output, ExprValue * &variable, bool wantErrorValue) { if (isErrorExpr(output)) { if (wantErrorValue) { // put the error message as value in the variable variable = new ExprValue(QString(), VarTree::NKplain); const char *endMsg = strchr(output, '\n'); if (endMsg == 0) endMsg = output + strlen(output); variable->m_value = QString::fromLatin1(output, endMsg - output); } else { variable = 0; } return true; } return false; } void XsldbgDriver::setPrintQStringDataCmd(const char* /*cmd*/) { } ExprValue * XsldbgDriver::parseQCharArray(const char */*output*/, bool /*wantErrorValue*/, bool /*qt3like*/) { ExprValue *variable = 0; TRACE("XsldbgDriver::parseQCharArray not implmented"); return variable; } static ExprValue * parseVar(const char *&s) { const char *p = s; ExprValue *variable = 0L; QString name; VarTree::NameKind kind; TRACE(__PRETTY_FUNCTION__); TRACE(p); if (parseErrorMessage(p, variable, false) == true) { TRACE("Found error message"); return variable; } if (strncmp(p, " Local", 6) == 0) { /* skip " Local" */ p = p + 6; TRACE("Found local variable"); } else if (strncmp(p, " Global", 7) == 0) { /* skip " Global" */ p = p + 7; TRACE("Found global variable"); } else if (strncmp(p, "= ", 2) == 0) { /* we're processing the result of a "print command" */ /* find next line */ const char *nextLine = strchr(p, '\n'); TRACE("Found print expr"); if (nextLine) { p = p + 2; /* skip the "= " */ name = QString::fromLatin1(p, nextLine - p); kind = VarTree::NKplain; p = nextLine + 1; variable = new ExprValue(name, kind); variable->m_varKind = VarTree::VKsimple; parseValue(p, variable); return variable; } } else return variable; /* don't know what to do this this data abort!! */ // skip whitespace while (isspace(*p)) p++; if (*p != '='){ // No value provided just a name TRACE(QString("Parse var: name") + p); if (!parseName(p, name, kind)) { return 0; } variable = new ExprValue(name, kind); if (variable != 0L) { variable->m_varKind = VarTree::VKsimple; } }else{ p++; // skip whitespace while (isspace(*p)) p++; TRACE(QString("Parse var: name") + p); if (!parseName(p, name, kind)) { return 0; } variable = new ExprValue(name, kind); if (variable != 0L) { variable->m_varKind = VarTree::VKsimple; } if (*p == '\n') p++; if (!parseValue(p, variable)) { delete variable; return 0; } } if (*p == '\n') p++; s = p; return variable; } inline void skipName(const char *&p) { // allow : (for enumeration values) and $ and . (for _vtbl.) while (isalnum(*p) || *p == '_' || *p == ':' || *p == '$' || *p == '.') p++; } static bool parseName(const char *&s, QString & name, VarTree::NameKind & kind) { /* qDebug(__PRETTY_FUNCTION__); */ kind = VarTree::NKplain; const char *p = s; int len = 0; // examples of names: // help_cmd while ((*p != '\n') && (*p != '\0')) { len++; p++; } name = QString::fromLatin1(s, len); /* XSL variables will have a $ prefix to be evaluated * properly */ //TRACE(QString("parseName got name" ) + name); // return the new position s = p; return true; } static bool parseValue(const char *&s, ExprValue * variable) { const char *start = s, *end = s; ExprValue * childValue; #define VALUE_END_MARKER_INDEX 0 /* This mark the end of a value */ static const char *marker[] = { "\032\032", /* value end marker*/ "(xsldbg) ", "Breakpoint at", /* stepped to next location */ "Breakpoint in", /* reached a set breakpoint */ "Reached ", /* reached template */ "Error:", "Warning:", "Information:", "runtime error", "xmlXPathEval:", 0 }; static char valueBuffer[2048]; int markerIndex = 0, foundEnd = 0; size_t copySize; if (variable == 0L) return false; /* should never happen but .. */ while (start && (*start != '\0')) { /* look for the next marker */ for (markerIndex = 0; marker[markerIndex] != 0; markerIndex++) { foundEnd = strncmp(start, marker[markerIndex], strlen(marker[markerIndex])) == 0; if (foundEnd) break; } if (foundEnd) break; end = strchr(start, '\n'); if (end) copySize = end - start; else copySize = strlen(start); if (copySize >= sizeof(valueBuffer)) copySize = sizeof(valueBuffer)-1; strncpy(valueBuffer, start, copySize); valueBuffer[copySize] = '\0'; TRACE("Got value :"); TRACE(valueBuffer); if ((variable->m_varKind == VarTree::VKsimple)) { if (!variable->m_value.isEmpty()){ variable->m_varKind = VarTree::VKarray; childValue = new ExprValue(variable->m_value, VarTree::NKplain); variable->appendChild(childValue); childValue = new ExprValue(valueBuffer, VarTree::NKplain); variable->appendChild(childValue); variable->m_value = ""; }else{ variable->m_value = valueBuffer; } }else{ childValue = new ExprValue(valueBuffer, VarTree::NKplain); variable->appendChild(childValue); } if (*end =='\n'){ start = end + 1; }else{ start = end + 1; break; } } if (foundEnd == 0) TRACE(QString("Unable to find end on value near :") + start); // If we've got something otherthan a end of value marker then // advance to the end of this buffer if (markerIndex != VALUE_END_MARKER_INDEX){ while (start && *start != '\0') start++; }else{ start = start + strlen(marker[0]); } s = start; return true; } /** * Parses a stack frame. */ static void parseFrameInfo(const char *&s, QString & func, QString & file, int &lineNo, DbgAddr & /*address*/) { const char *p = s, *endPos = s + strlen(s); QString lineNoString; TRACE("parseFrameInfo"); lineNo = -1; /* skip 'template :\" */ p = p + 11; // TRACE(p); func = ""; while ((*p != '\"') && (*p != '\0')) { func.append(*p); p++; } while ((*p != '\0') && *p != '"') p++; if (*p != '\0') p++; ASSERT(p <= endPos); if (p >= endPos) { /* panic */ return; } /* skip mode :".*" */ while ((*p != '\0') && *p != '"') p++; if (*p != '\0') p++; while ((*p != '\0') && *p != '"') p++; /* skip '" in file ' */ p = p + 10; if(*p == '"') p++; // TRACE(p); file = ""; while (!isspace(*p) && (*p != '\"') && (*p != '\0')) { file.append(*p); p++; } if(*p == '"') p++; ASSERT(p <= endPos); if (p >= endPos) { /* panic */ return; } // TRACE(p); /* skip ' : line '" */ p = p + 9; // TRACE(p); ASSERT(p <= endPos); if (p >= endPos) { /* panic */ return; } // TRACE(p); if (isdigit(*p)) { /* KDbg uses an offset of +1 for its line numbers */ lineNo = atoi(p) - 1; lineNoString = QString::number(lineNo); } /* convert func into format needed */ func.append(" at "); func.append(file); func.append(':'); func.append(lineNoString); /*advance to next line */ p = strchr(p, '\n'); if (p) p++; s = p; } #undef ISSPACE /** * Parses a stack frame including its frame number */ static bool parseFrame(const char *&s, int &frameNo, QString & func, QString & file, int &lineNo, DbgAddr & address) { // TRACE("XsldbgDriver ::parseFrame"); /* skip leading 'where' or 'frame ' */ if ((strncmp(s, "where", 5) == 0) || (strncmp(s, "frame", 5) == 0)) { s = strchr(s, '\n'); if ((*s != '\0') && (*s != '#')) s++; } // TRACE(s); // Example: //#1 template :"/" in file /home/keith/anon_CVS/xsldbg/docs/en/xsldoc.xsl : line 21 // must start with a hash mark followed by number if (s[0] != '#' || !isdigit(s[1])) return false; //TRACE("XsldbgDriver ::parseFrame got #"); s++; /* skip the hash mark */ // frame number frameNo = atoi(s); while (isdigit(*s)) s++; //TRACE(QString("Got frame ").append(QString::number(frameNo))); // space while (isspace(*s)) s++; parseFrameInfo(s, func, file, lineNo, address); // TRACE("Will next look at "); // TRACE(s); return true; } void XsldbgDriver::parseBackTrace(const char *output, std::list < StackFrame > &stack) { QString func, file; int lineNo, frameNo; DbgAddr address; while (::parseFrame(output, frameNo, func, file, lineNo, address)) { stack.push_back(StackFrame()); StackFrame* frm = &stack.back(); frm->frameNo = frameNo; frm->fileName = file; frm->lineNo = lineNo; frm->address = address; frm->var = new ExprValue(func, VarTree::NKplain); } } bool XsldbgDriver::parseFrameChange(const char *output, int &frameNo, QString & file, int &lineNo, DbgAddr & address) { QString func; return::parseFrame(output, frameNo, func, file, lineNo, address); } bool XsldbgDriver::parseBreakList(const char *output, std::list < Breakpoint > &brks) { TRACE("parseBreakList"); /* skip the first blank line */ const char *p; // split up a line Breakpoint bp; char *dummy; p = strchr(output, '\n');/* skip the first blank line*/ while ((p != 0) && (*p != '\0')) { if (*p == '\n') p++; QString templateName; //qDebug("Looking at :%s", p); if (strncmp(p, " Breakpoint", 11) != 0) break; p = p + 11; if (*p == '\0') break; //TRACE(p); // get Num bp.id = strtol(p, &dummy, 10); /* don't care about overflows */ p = dummy; if ((p == 0) || (p[1] == '\0')) break; p++; //TRACE(p); // Get breakpoint state ie enabled/disabled if (strncmp(p, "enabled", 7) == 0) { bp.enabled = true; p = p + 7; } else { if (strncmp(p, "disabled", 8) == 0) { p = p + 8; bp.enabled = false; } else{ TRACE("Parse error in breakpoint list"); TRACE(p); return false; } } //TRACE("Looking for template"); //TRACE(p); if (strncmp(p, " for template: \"", 16) == 0){ p = p + 16; //TRACE("Looking for template name near"); //TRACE(p); /* get the template name */ while (p && (*p != '\0') && (*p != '\"')){ templateName.append(*p); p++; } if (*p == '\"'){ p++; }else{ TRACE("Error missed \" near"); TRACE(p); } } //TRACE("Looking for mode near"); //TRACE(p); if (strncmp(p, " mode: \"", 8) == 0){ p = p + 8; while (p && *p != '\"') p++; if (p) p++; } if (strncmp(p, " in file ", 9) != 0){ TRACE("Parse error in breakpoint list"); TRACE(p); return false; } /* skip ' in file ' */ p = p + 9; // TRACE(p); if (*p == '\"') p++; /* grab file name */ QString file; while ((*p != '\"') && !isspace(*p)) { file.append(*p); p++; } if (*p == '\"') p++; if (*p == '\0') break; /* skip ' : line ' */ p = p + 8; while (isspace(*p)) { p++; } //TRACE(p); QString lineNo; while (isdigit(*p)) { lineNo.append(*p); p++; } // bp.lineNo is zero-based bp.lineNo = lineNo.toInt() - 1; bp.location = QString("in %1 at %2:%3").arg(templateName, file, lineNo); bp.fileName = file; brks.push_back(bp); if (p != 0) { p = strchr(p, '\n'); if (p) p++; } } return true; } std::list XsldbgDriver::parseThreadList(const char */*output*/) { return std::list(); } bool XsldbgDriver::parseBreakpoint(const char *output, int &id, QString &file, int &lineNo, QString &address) { // check for errors if ( strncmp(output, "Error:", 6) == 0) { return false; } char *dummy; if (strncmp(output, "Breakpoint ", 11) != 0) return false; output += 11; if (!isdigit(*output)) return false; // get Num id = strtol(output, &dummy, 10); /* don't care about overflows */ if (output == dummy) return false; // the file name + lineNo will be filled in later from the breakpoint list file = address = QString(); lineNo = 0; return true; } void XsldbgDriver::parseLocals(const char *output, std::list < ExprValue* > &newVars) { /* keep going until error or xsldbg prompt is found */ while (*output != '\0') { ExprValue *variable = parseVar(output); if (variable == 0) { break; } // do not add duplicates for (std::list::iterator o = newVars.begin(); o != newVars.end(); ++o) { if ((*o)->m_name == variable->m_name) { delete variable; goto skipDuplicate; } } newVars.push_back(variable); skipDuplicate:; } } ExprValue * XsldbgDriver::parsePrintExpr(const char *output, bool wantErrorValue) { ExprValue* var = 0; // check for error conditions if (!parseErrorMessage(output, var, wantErrorValue)) { // parse the variable var = parseVar(output); } return var; } bool XsldbgDriver::parseChangeWD(const char *output, QString & message) { bool isGood = false; if (strncmp(output, "Change to directory", 20) == 0) { output = output + 20; /* skip 'Change to directory' */ message = QString(output).simplified(); if (message.isEmpty()) { message = i18n("New working directory: ") + m_programWD; isGood = true; } } return isGood; } bool XsldbgDriver::parseChangeExecutable(const char *output, QString & message) { message = output; TRACE(QString("XsldbgDriver::parseChangeExecutable :") + output); m_haveCoreFile = false; if (strstr(output, "Load of source deferred. Use the run command") != 0) { TRACE("Parsed stylesheet executable"); message = QString(); } return message.isEmpty(); } bool XsldbgDriver::parseCoreFile(const char *output) { TRACE("XsldbgDriver::parseCoreFile"); TRACE(output); if (strstr(output, "Load of data file deferred. Use the run command") != 0) { m_haveCoreFile = true; TRACE("Parsed data file name"); } return m_haveCoreFile; } uint XsldbgDriver::parseProgramStopped(const char *output, QString & message) { /* Not sure about this function leave it here for the moment */ /* * return DebuggerDriver::SFrefreshBreak & DebuggerDriver::SFprogramActive; */ // go through the output, line by line, checking what we have const char *start = output - 1; uint flags = SFprogramActive; message = QString(); do { start++; /* skip '\n' */ if (strncmp(start, "Finished stylesheet\n\032\032\n", 21) == 0){ // flags &= ~SFprogramActive; break; } // next line, please start = strchr(start, '\n'); } while (start != 0); return flags; } QStringList XsldbgDriver::parseSharedLibs(const char */*output*/) { return QStringList(); } bool XsldbgDriver::parseFindType(const char */*output*/, QString & /*type*/) { return true; } std::list XsldbgDriver::parseRegisters(const char */*output*/) { return std::list(); } bool XsldbgDriver::parseInfoLine(const char */*output*/, QString & /*addrFrom*/, QString & /*addrTo*/) { return false; } std::list XsldbgDriver::parseDisassemble(const char */*output*/) { return std::list(); } QString XsldbgDriver::parseMemoryDump(const char */*output*/, std::list < MemoryDump > &/*memdump*/) { return i18n("No memory dump available"); } QString XsldbgDriver::parseSetVariable(const char */*output*/) { QString msg; return msg; } #include "xsldbgdriver.moc" kdbg-2.5.5/kdbg/xsldbgdriver.h000066400000000000000000000113531247243200200162100ustar00rootroot00000000000000/* * Copyright Johannes Sixt, Keith Isdale * This file is licensed under the GNU General Public License Version 2. * See the file COPYING in the toplevel directory of the source directory. */ #ifndef XSLDBGDRIVER_H #define XSLDBGDRIVER_H #include "dbgdriver.h" class XsldbgDriver:public DebuggerDriver { Q_OBJECT public: XsldbgDriver(); ~XsldbgDriver(); virtual QString driverName() const; virtual QString defaultInvocation() const; virtual QStringList boolOptionList() const; static QString defaultXsldbg(); virtual bool startup(QString cmdStr); virtual void commandFinished(CmdQueueItem * cmd); virtual CmdQueueItem *executeCmd(DbgCommand, bool clearLow = false); virtual CmdQueueItem *executeCmd(DbgCommand, QString strArg, bool clearLow = false); virtual CmdQueueItem *executeCmd(DbgCommand, int intArg, bool clearLow = false); virtual CmdQueueItem *executeCmd(DbgCommand, QString strArg, int intArg, bool clearLow = false); virtual CmdQueueItem *executeCmd(DbgCommand, QString strArg1, QString strArg2, bool clearLow = false); virtual CmdQueueItem *executeCmd(DbgCommand, int intArg1, int intArg2, bool clearLow = false); virtual CmdQueueItem *queueCmd(DbgCommand, QueueMode mode); virtual CmdQueueItem *queueCmd(DbgCommand, QString strArg, QueueMode mode); virtual CmdQueueItem *queueCmd(DbgCommand, int intArg, QueueMode mode); virtual CmdQueueItem *queueCmd(DbgCommand, QString strArg, int intArg, QueueMode mode); virtual CmdQueueItem *queueCmd(DbgCommand, QString strArg1, QString strArg2, QueueMode mode); virtual void terminate(); virtual void detachAndTerminate(); virtual void interruptInferior(); virtual void setPrintQStringDataCmd(const char* cmd); /** * Parses the output as an array of QChars. */ virtual ExprValue *parseQCharArray(const char *output, bool wantErrorValue, bool qt3like); virtual void parseBackTrace(const char *output, std::list < StackFrame > &stack); virtual bool parseFrameChange(const char *output, int &frameNo, QString & file, int &lineNo, DbgAddr & address); virtual bool parseBreakList(const char *output, std::list < Breakpoint > &brks); virtual std::list parseThreadList(const char *output); virtual bool parseBreakpoint(const char *output, int &id, QString & file, int &lineNo, QString& address); virtual void parseLocals(const char *output, std::list < ExprValue* > &newVars); virtual ExprValue * parsePrintExpr(const char *output, bool wantErrorValue); virtual bool parseChangeWD(const char *output, QString & message); virtual bool parseChangeExecutable(const char *output, QString & message); virtual bool parseCoreFile(const char *output); virtual uint parseProgramStopped(const char *output, QString & message); virtual QStringList parseSharedLibs(const char *output); virtual bool parseFindType(const char *output, QString & type); virtual std::list parseRegisters(const char *output); virtual bool parseInfoLine(const char *output, QString & addrFrom, QString & addrTo); virtual std::list parseDisassemble(const char *output); virtual QString parseMemoryDump(const char *output, std::list < MemoryDump > &memdump); virtual QString parseSetVariable(const char* output); protected: QString m_programWD; /* just an intermediate storage */ QString m_xslFile; /* needed to display it initially */ bool m_haveDataFile; /* have we set the XML data file to use? */ QString m_redirect; /* redirection to /dev/null */ bool m_haveCoreFile; QString makeCmdString(DbgCommand cmd, QString strArg); QString makeCmdString(DbgCommand cmd, int intArg); QString makeCmdString(DbgCommand cmd, QString strArg, int intArg); QString makeCmdString(DbgCommand cmd, QString strArg1, QString strArg2); QString makeCmdString(DbgCommand cmd, int intArg1, int intArg2); virtual int findPrompt(const QByteArray& output) const; void parseMarker(); }; #endif // XSLDBGDRIVER_H kdbg-2.5.5/po/000077500000000000000000000000001247243200200130445ustar00rootroot00000000000000kdbg-2.5.5/po/.gitattributes000066400000000000000000000000241247243200200157330ustar00rootroot00000000000000*.po encoding=UTF-8 kdbg-2.5.5/po/CMakeLists.txt000066400000000000000000000013731247243200200156100ustar00rootroot00000000000000FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname kdbg) ADD_CUSTOM_TARGET(translations ALL) FILE(GLOB PO_FILES *.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND(TARGET translations COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES/ RENAME ${catalogname}.mo) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) kdbg-2.5.5/po/cs.po000066400000000000000000000544611247243200200140230ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2001 Johannes Sixt # Johannes Sixt , 2001 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 15:56MDT\n" "Last-Translator: Radek Malcic \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "&Zak獺zat" #: brkpt.cpp:181 msgid "&Enable" msgstr "&Povolit" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Podm穩nn獺 zar獺鱉ka" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktivn穩" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Z獺sobn穩k" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Lokaln穩 promnn矇" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "&Zak獺zat" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "Registry" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Zar獺鱉ky" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "V羸stup" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Vl獺kna" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "Pamt" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Otev穩t zdroj..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Znovu na穩st zdroj" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "Spustit&eln羸 soubor..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "Naposledy spu禳tn矇 soubory" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Globaln穩 nastaven穩..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "Zdrojov羸 &kod" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "Z獺sobn穩&k" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Lokaln穩 promnn矇" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&Registry" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "&Zar獺鱉ky" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "V&l獺kna" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&V羸stup" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "Pa&m" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Spustit" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Krok &do" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Krok &pes" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Krok &ven" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Spustit ke &kurzoru" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "Krok do po instrukci" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "Krok pes po instrukci" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "P&eru禳it" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&Zab穩t" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Res&tartovat" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "Pipojit..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenty..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Nastavit/smazat &zar獺鱉ku" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Nastavit &doasnou zar獺鱉ku" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "Po&volit/zak獺zat zar獺鱉ku" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Hodnota" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Restartovat" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' nen穩 souborem nebo neexistuje" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "Nemohu spustit proces ladn穩.\n" "Pros穩m, ukonete KDbg a upozornte autora programu." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Globaln穩 nastaven穩" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 #, fuzzy msgid "Miscellaneous" msgstr "&Nastaven穩" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": V羸stup programu" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|V禳echny zdrojov矇 soubory\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|Zdrojov矇 soubory\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Hlavikov矇 soubory\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|V禳echny soubory" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Vyberte spustiteln羸 soubor, kter羸 chcete trasovat" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Vyberte core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 se neoek獺van ukonilo\n" "Obnovit proces ?" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Hodnota" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Nov羸 pracovn穩 adres獺: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 msgid "path of executable to debug" msgstr "Vyberte spustiteln羸 soubor, kter羸 chcete trasovat" #: main.cpp:51 msgid "a core file to use" msgstr "soubor core, kter羸 chcete pou鱉穩t" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Nelze spustit debuger." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "Adresa" #: memwindow.cpp:59 msgid "B&ytes" msgstr "B&ytov獺" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "He&xadecim獺ln穩" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&Osmikov獺" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&Bin獺rn穩" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&Adresa" #: memwindow.cpp:80 msgid "&Character" msgstr "&Znak" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "&etzec..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "&Instrukce" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "Jak spustit &GDB - ponechte pr獺zdn矇,\n" "pokud chcete pou鱉穩t z獺kladn穩 nastaven穩:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "獺d&n羸 vstup a v羸stup" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "Pouze &v羸stup, jednoduch獺 emulace termin獺lu" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "Pln獺 emulace &termin獺lu" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: Nastaven穩 pro %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Chcete-li pou鱉穩t z獺kladn穩 nastaven穩, sma鱉te zadan矇 hodnoty." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Spu禳tn穩 &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T nahrazuje titulek okna,\n" "%C nahrazuje shell script, kter羸 otev穩r獺 okno termin獺lu." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Termin獺l pro v羸stup programu:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "&Um穩stit na pozad穩 po skonen穩 programu" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "Okno &zpt (v milisekund獺ch):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "Velikost &tabel獺toru (poet znak轡):" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "Filtr pro zdrojov矇 &soubory:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "Filtr pro &hlavikov矇 soubory:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Pipojit k procesu" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Zadejte 穩slo procesu pro pipojen穩:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "&Des穩tkov獺" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 msgid "Register" msgstr "Registr" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Dek籀dovan獺 hodnota" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "ID Vl獺kna" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Um穩stn穩" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&Smazat" #: watchwindow.cpp:17 msgid " Add " msgstr " Pidat " #: watchwindow.cpp:18 msgid " Del " msgstr " Smazat " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "Spu禳t&n穩" #: winstack.cpp:384 msgid ": Search" msgstr ": Hledat" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Rozli禳ovat velk獺/mal獺" #: winstack.cpp:393 msgid "&Forward" msgstr "&Vped" #: winstack.cpp:395 msgid "&Backward" msgstr "V&zad" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Hodnoty" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorovat" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Podm穩nka" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "Pidat &Zar獺鱉ku" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "Pidat &Watchpoint" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Zobrazit k籀d" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Podm穩nka..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Podm穩nka:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignorovat &n獺sleduj穩c穩 hodnoty:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Zak獺zat" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Zobrazit k籀d" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "Spu禳t&n穩" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Zar獺鱉ka" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "Na&staven穩..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argumenty programu" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenty..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Spustit %1 s argumenty:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Pracovn穩 adres獺:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&V穩ce..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Promnn矇 prosted穩 (Jm矇no=hodnota):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Jm矇no" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Globaln穩 nastaven穩..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Pipojit k procesu" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Clear filter" #~ msgstr "|Hlavikov矇 soubory\n" #~ msgid "Source" #~ msgstr "Zdroj" #, fuzzy #~ msgid "&Find" #~ msgstr "&Okno" #~ msgid "Toggle &Toolbar" #~ msgstr "Pepnout panel &n獺stroj轡" #~ msgid "Toggle &Statusbar" #~ msgstr "Pepnout &stavov羸 獺dek" #~ msgid "Executable" #~ msgstr "Spustiteln羸 soubor" #~ msgid "Open a source file" #~ msgstr "Otev穩t zdrojov羸 soubor" #~ msgid "Reload source file" #~ msgstr "Znovu na穩st zdrojov羸 soubor" #~ msgid "Run/Continue" #~ msgstr "Spustit/Pokraovat" #~ msgid "Step into" #~ msgstr "Krok do" #~ msgid "Step over" #~ msgstr "Krok pes" #~ msgid "Step out" #~ msgstr "Krok ven" #~ msgid "Step into by instruction" #~ msgstr "Krok do po instrukci" #~ msgid "Step over by instruction" #~ msgstr "Krok pes po instrukci" #~ msgid "Breakpoint" #~ msgstr "Zar獺鱉ka" #~ msgid "Search" #~ msgstr "Hledat" kdbg-2.5.5/po/da.po000066400000000000000000000513371247243200200140010ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 15:57MDT\n" "Last-Translator: Steen Rabol \n" "Language-Team: da \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Betingelses breakpoint" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktiv" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "V疆rdi" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Genstart" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&ben kilde kode..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Genl疆s kilde kode" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Applikation..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Applikation" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Genstart" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "S疆t/fjern &breakpoint" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Udf繪r" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "G疇 &ind i" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Spring &over" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Hop &ud" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Udf繪r til mark繪r" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Gen&start" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Vedh疆ft..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenter..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "S疆t/fjern &breakpoint" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "S疆t midlertidigt breakpoint" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Aktiver/Deaktiver breakpoint" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "V疆rdi" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Genstart" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "'%1' er ikke en fil eller findes ikke" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr "" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Genl疆s kilde kode" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "ben en kilde kode fil" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "V疆lg program der skal debugges" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "V疆lg core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 afsluttede uventet.\n" "Genstart sesionen (eks. med fil|Applikation)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "V疆rdi" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "V疆lg program der skal debugges" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Kan ikke starte debugger" #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Genl疆s kilde kode" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": H疆ft til proces" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Specificer det proces nummer der skal h疆ftes til:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Genstart" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Lokation" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Tilf繪j " #: watchwindow.cpp:18 msgid " Del " msgstr " Slet " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "&Udf繪relse" #: winstack.cpp:384 msgid ": Search" msgstr ": S繪g" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Forskel p疇 store og sm疇 bogstaver" #: winstack.cpp:393 msgid "&Forward" msgstr "&Fremad" #: winstack.cpp:395 msgid "&Backward" msgstr "&Bagl疆ns" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorer" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Betingelse" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "S疆t/fjern &breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Vis kode" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Betingelser..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Betingelse:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignorer og g疇 til &n疆ste" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Vindue" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Vis kode" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&Udf繪relse" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 #, fuzzy msgid "&Breakpoint" msgstr "S疆t/fjern &breakpoint" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Program argumenter" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenter..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Udf繪r %1 med disse parametre" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Mere..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Enviroment variable(NAVN=v疆rdi)" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Navn" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": H疆ft til proces" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Genl疆s kilde kode" #~ msgid "Toggle &Toolbar" #~ msgstr "Vis/gem &toolbar" #~ msgid "Toggle &Statusbar" #~ msgstr "Vis/gem &statusbar" #~ msgid "Executable" #~ msgstr "Applikation" #~ msgid "Open a source file" #~ msgstr "ben en kilde kode fil" #~ msgid "Reload source file" #~ msgstr "Genl疆s kilde kode" #~ msgid "Run/Continue" #~ msgstr "Udf繪r/forts疆t" #~ msgid "Step into" #~ msgstr "Hop ind i" #~ msgid "Step over" #~ msgstr "Spring over" #~ msgid "Step out" #~ msgstr "Hop ud" #~ msgid "Search" #~ msgstr "S繪g" kdbg-2.5.5/po/de.po000066400000000000000000000623221247243200200140010ustar00rootroot00000000000000# translation of de.po to Deutsch # KDbg - Debugger GUI for gdb # Copyright (C) Johannes Sixt , 1998-2009. # # Johannes Sixt , 2005, 2006, 2007, 2009, 2011. msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2011-03-01 22:59+0100\n" "Last-Translator: Johannes Sixt \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "&Deaktivieren" #: brkpt.cpp:181 msgid "&Enable" msgstr "&Aktivieren" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Bedingten Haltepunkt setzen" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktiv" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Stack" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Lokale Variablen" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "Variable" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "Ausdr羹cke" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "Register" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Haltepunkte" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "Ausgabe" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Threads" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "Speicher" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "Quellcode &ffnen..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "E&rneut laden" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Programm..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "&Zuletzt ge繹ffnete Programme" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "Dieses &Programm" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Globale Einstellungen..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "&Quellcode" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "Stac&k" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Lokale Variablen" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "&Ausdr羹cke" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&Register" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "&Haltepunkte" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "&Threads" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&Ausgabe" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "&Speicher" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "Aus&f羹hren" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "&In Funktion" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&ber Funktion" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Aus Funktion" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "&Zum Cursor" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "I&nstruktion - in Funktion" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "In&struktion - 羹ber Funktion" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "&Programmz瓣hler auf aktuelle Zeile" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Unterbrechen" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "Been&den" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Erneut ausf羹hren" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "A&ttachen..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "Argu&mente..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "&Setzen/entfernen" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "&Tempor瓣ren Haltepunkt setzen" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Aktiv/inaktiv" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "Ausdruck beobachten" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "Wert bearbeiten" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Erneut ausf羹hren" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' ist keine Datei oder existiert nicht" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "Sprache `%1' unbekannt" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "Konnte den Debugger nicht starten.\n" "Bitte beenden Sie KDbg und beheben Sie das Problem." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Globale Einstellungen" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "Debugger" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "Verschiedenes" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Programmausgabe" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|Alle Quellcodedateien\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|Quellcodedateien\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Header-Dateien\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|Alle Dateien" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "ffnen" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Ausf羹hrbares Programm zum Debuggen w瓣hlen" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Core dump w瓣hlen" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 wurde unerwartet beendet.\n" "Sie m羹ssen die Sitzung neu starten (z.B. mit Datei|Programm)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "Die Einstellungen f羹r dieses Programm legen folgende Debugger-Anweisung " "fest:\n" "%1\n" "Soll diese Anweisung benutzt werden?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Wert" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Neues Arbeitsverzeichnis: " #: main.cpp:23 msgid "KDbg" msgstr "KDbg" #: main.cpp:25 msgid "A Debugger" msgstr "Ein Debugger" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "(c) 1998-2015 Johannes Sixt" #: main.cpp:31 msgid "Johannes Sixt" msgstr "Johannes Sixt" #: main.cpp:32 msgid "Keith Isdale" msgstr "Keith Isdale" #: main.cpp:33 msgid "XSLT debugging" msgstr "XSLT debuggen" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "Daniel Kristjansson" #: main.cpp:36 msgid "Register groups and formatting" msgstr "Registergruppen und -formatierung" #: main.cpp:38 msgid "David Edmundson" msgstr "David Edmundson" #: main.cpp:39 msgid "KDE4 porting" msgstr "Portierung nach KDE4" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "Mitschrift der Kommunikation zw. KDbg und gdb" #: main.cpp:45 msgid "remote debugging via " msgstr "entferntes Debuggen 羹ber " #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "Programmiersprache: C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "verwende XSLT (羹berholt, verwende -l stattdessen)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "gibt Argumente f羹r das Programm an" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "gibt den PID des zu debuggenden Prozesses an" #: main.cpp:50 msgid "path of executable to debug" msgstr "Pfad zum zu debuggenden Programm" #: main.cpp:51 msgid "a core file to use" msgstr "ein zu verwendender Core-Dump" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Kann Debugger nicht ausf羹hren." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "Adresse" #: memwindow.cpp:59 msgid "B&ytes" msgstr "B&ytes" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "Halbw繹rter (&2 Bytes)" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "W繹rter (&4 Bytes)" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "Doppelw繹rter (&8 Bytes)" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "He&xadezimal" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "&Dezimal mit Vorzeichen" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "D&ezimal ohne Vorzeichen" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&Oktal" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&Bin瓣r" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&Adressen" #: memwindow.cpp:80 msgid "&Character" msgstr "&Zeichen" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "&Fliekomma" #: memwindow.cpp:84 msgid "&Strings" msgstr "&Zeichenketten" #: memwindow.cpp:86 msgid "&Instructions" msgstr "D&isassembliert" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "Als Programmargument einzusetzende Datei w瓣hlen" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "Als Programmargument einzusetzendes Verzeichnis w瓣hlen" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "Aufruf von &GDB - wenn Sie dieses Feld leer lassen,\n" "wird die globale Einstellung 羹bernommen:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "&Keine Ein- und Ausgabe" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "Nur &Ausgabe, einfache Terminalemulation" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "&Volle Terminalemulation" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: Einstellungen f羹r %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Wenn die Eintr瓣ge leer sind, werden Standardeinstellungen verwendet." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Aufruf von &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T wird durch eine berschrift ersetzt,\n" "%C wird durch eine Bourne-Shell-Skript ersetzt, das\n" "das Terminal-Fenster offen h瓣lt." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal f羹r die Programmausgabe" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "Debugger nach &vorne bringen, sobald das Programm stoppt" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" "Ver&z繹gerung, bis Debugger wieder\n" "nach hinten geht (in Millisek.):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "&Tabulatorweite (in Zeichen):" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "Dateifilter f羹r &Quellcodedateien:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "Dateifilter f羹r &Header-Dateien:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": An Prozess attachen" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Geben Sie die Prozessnummer ein:" #: procattach.cpp:302 msgid "OK" msgstr "OK" #: procattach.cpp:307 msgid "Cancel" msgstr "Abbrechen" #: regwnd.cpp:73 msgid "&GDB default" msgstr "&GDB-Standard" #: regwnd.cpp:76 msgid "&Decimal" msgstr "&Dezimal" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "Reell (&e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "Reell (&f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "&Reell (g)" #: regwnd.cpp:416 msgid "Register" msgstr "Register" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Dekodierter Wert" #: regwnd.cpp:434 msgid "GP and others" msgstr "Allgemein u.a." #: regwnd.cpp:436 msgid "Flags" msgstr "Schalter" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "x86/x87 Segment" #: threadlist.cpp:42 msgid "Thread ID" msgstr "Thread-ID" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Ort" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&L繹schen" #: watchwindow.cpp:17 msgid " Add " msgstr " Neu " #: watchwindow.cpp:18 msgid " Del " msgstr " Entf " #: watchwindow.cpp:19 msgid "Expression" msgstr "Ausdruck" #: winstack.cpp:384 msgid ": Search" msgstr ": Suche" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Gro-/Kleinschreibung" #: winstack.cpp:393 msgid "&Forward" msgstr "&Vorw瓣rts" #: winstack.cpp:395 msgid "&Backward" msgstr "&R羹ckw瓣rts" #: winstack.cpp:396 msgid "Close" msgstr "Schlieen" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "Speicherinhalt nicht verf羹gbar" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "Form" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Stops" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorieren" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Bedingung" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "&Haltepunkt" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "&Watchpoint" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "&Entfernen" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Code anzeigen" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Bedingt..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "Dialog" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Bedingung:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignoriere &n瓣chste Treffer:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "nicht ignorieren" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 msgid "&File" msgstr "&Datei" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 msgid "&View" msgstr "&Ansicht" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "A&usf羹hrung" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "Halte&punkt" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "&Einstellungen" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "Programmargumente" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "&Argumente" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "%1 mit folgenden Argumenten ausf羹hren:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" "Geben Sie hier die Argumente an, mit denen das Programm in dieser Debug-" "Sitzung ausgef羹hrt werden soll. Sie geben die Argumente genau so an, wie Sie " "das auch auf der Kommandozeile angeben w羹rden; d.h. Sie k繹nnen auch " "Anf羹hrungszeichen und Umgebungsvariablen verwenden, z.B.:

    --message " "'start in: ' $HOME" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" "Suchen Sie nach einer Datei; der komplette Dateiname wird an der " "Cursorposition im obigen Feld eingef羹gt." #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "&Dateinamen einf羹gen..." #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "Alt+D" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" "Suchen Sie nach einem Verzeichnis;der komplette Verzeichnisname wird an der " "Cursorposition im obigen Feld eingef羹gt." #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "&Verzeichnis einf羹gen..." #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "Alt+V" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "Arbeitsverzeichnis" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" "Geben Sie hier das Arbeitsverzeichnis an, in dem das Program ausgef羹hrt " "werden soll." #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" "Hiermit suchen Sie das Arbeitsverzeichnis, in dem das Programm ausgef羹hrt " "werden soll." #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 msgid "&Browse..." msgstr "&Durchsuchen..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "Alt+D" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "&Umgebungsvariablen" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "Umgebungsvariablen (NAME=Wert):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" "Um eine neue Umgebungsvariable anzulegen oder eine vorhandene zu ver瓣ndern, " "geben Sie sie hier in der Form NAME=Wert an und w瓣hlen Sie " "ndern." #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" "Die Umgebungsvariablen in dieser Liste werden zus瓣tzlich zu den " "vererbten gesetzt. Um eine neue Umgebungsvariable anzulegen, geben Sie sie " "in der Form NAME=Wert im Eingebefeld an und w瓣hlen ndern. " "Um den Wert zu ver瓣ndern, w瓣hlen Sie die Variable in der Liste aus und " "w瓣hlen ndern. Mit L繹schen wird die ausgew瓣hlte Variable aus " "der Liste entfernt." #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Name" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" "F羹gt die Umgebungsvariable, die gerade im Eingabefeld angegeben ist, zu der " "Liste hinzu. Wenn die genannte Variable schon vorhanden ist, wird ihr Wert " "ge瓣ndert." #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "&ndern" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "Alt+" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" "Entfernt die ausgew瓣hlte Umgebungsvariable aus der Liste. Diese Funktion " "kann nicht verwendet werden, um vererbte Variablen zu entfernen." #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "&L繹schen" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "&xsldbg-Einstellungen" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "An Prozess attachen" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "&Filter oder PID:" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" "Geben Sie hier den Programmnamen oder die Prozess-ID (PID) an, sodass " "weniger Eintr瓣ge in der Tabelle aufscheinen." #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" "

    Diese Tabelle zeigt alle Prozesse an, die gerade auf dem System laufen. " "Sie m羹ssen einen Prozess ausw瓣hlen, an den sich KDbg attachen soll. Geben " "Sie in Filter oder PID den Programmnamen oder die Prozess-ID ein; " "damit wird die Tabelle k羹rzer.

    Der Text in der Spalte Befehlszeile " "ist normalerweise (aber nicht immer) der Befehl, mit dem der Prozess " "gestartet wurde. Die Spalte PID zeigt die Prozess-ID. Die Spalte " "PPID zeigt die Prozess-ID des Vater-Prozesses. In den weiteren " "Spalten stehen zus瓣tzliche Informationen 羹ber die Prozesse, die auch mit dem " "Systembefehl ps angezeigt werden k繹nnen.

    Die Tabelle wird nicht " "automatisch aktualisiert. Benutzen Sie dazu die Schaltfl瓣che " "Aktualisieren.

    " #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "Befehlszeile" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "PID" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "PPID" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "Diese Schaltfl瓣che aktualisiert die Anzeige." #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "&Aktualisieren" kdbg-2.5.5/po/es.po000066400000000000000000000625241247243200200140240ustar00rootroot00000000000000# translation of es.po to # KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # # Johannes Sixt , 2000. # Borja Bergua Guerra , 2007. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2007-12-30 12:45+0100\n" "Last-Translator: Borja Bergua Guerra \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "&Deshabilitar" #: brkpt.cpp:181 msgid "&Enable" msgstr "&Habilitar" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Parada condicional" #: dbgmainwnd.cpp:71 msgid "active" msgstr "activo" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Pila" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Locales" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "Variable" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "Expresiones Vigiladas" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "Registros" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Puntos de interrupci籀n" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "Salida" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Hilos" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "Memoria" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Abrir un fichero fuente..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Recargar el fichero fuente" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Ejecutable..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "E&jecutables Recientes" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "&Este Programa" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Opciones globales..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "&C籀digo fuente" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "&Pila" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Locales" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "&Expresiones Vigiladas" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&Registros" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "&Puntos de interrupci籀n" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "&Hilos" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&Salida" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "&Memoria" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Ejecutar" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Entrar en la &funci籀n" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&Otra instrucci籀n" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Salir de la funci籀n" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Ejecutar hasta &cursor" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Parar" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&Matar" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Reiniciar" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Ligar..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumentos..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "&Poner/Quitar puntos de interrupci籀n" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "&Definir puntos de interrupci籀n temporales" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Activar/Desactivar puntos de interrupci籀n" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "Vigilar Expresi籀n" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "Editar Valor" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Reiniciar" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' no es un fichero o no existe" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "No se puede depurar el lenguaje `%1'" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "No se pudo iniciar el depurador.\n" "Por favor, cierre KDbg y solucione el problema." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Opciones globales" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 #, fuzzy msgid "Debugger" msgstr "&Depurador" #: dbgmainwnd.cpp:842 #, fuzzy msgid "Miscellaneous" msgstr "&Miscel獺nea" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Datos de salida" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|Todos los ficheros fuente\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|Ficheros fuente\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Ficheros de cabeceras\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|Todos los ficheros" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Elija el ejecutable a analizar" #: dbgmainwnd.cpp:1196 #, fuzzy msgid "Select core dump" msgstr "Elija el core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 se muri籀 de forma inesperada.\n" "Reinicie la sesi籀n (por ejemplo,.: con Fichero|Ejecutable)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "La configuraci籀n de este programa especifica el siguiente depurador:\n" "%1\n" "聶Se debe usar esta orden?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Valor" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Nuevo directorio de trabajo:" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "Un depurador" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "Depuraci籀n XSLT" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 #, fuzzy msgid "Register groups and formatting" msgstr "Registro de grupos y formato" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 #, fuzzy msgid "transcript of conversation with the debugger" msgstr "transcripci籀n de conversaci籀n con el depurador" #: main.cpp:45 msgid "remote debugging via " msgstr "depuraci籀n remota a trav矇s de " #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "especificar lenguaje: C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "usar lenguaje XSLT (en desuso)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "especificar el PID del proceso a depurar" #: main.cpp:50 msgid "path of executable to debug" msgstr "ruta del ejecutable a depurar" #: main.cpp:51 #, fuzzy msgid "a core file to use" msgstr "un fichero core a usar" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Imposible iniciar el depurador." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "Direcci籀n" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "&Instrucciones" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "Seleccione un fichero para insertarlo como argumento del programa" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "Seleccione un directorio para insertarlo como argumento del programa" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "C籀mo iniciar &GDB - dejar en blanco para usar\n" "la opci籀n por omisi籀n de las opciones globales:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "&Sin entrada ni salida" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "S籀&lo salida, emulaci籀n de terminal sencilla" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "&Emulaci籀n de terminal completa" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: Configuraci籀n para %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Borrar las entradas para volver a los valores por omisi籀n" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "C籀mo iniciar &GDB" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T Ser獺 reemplazado por un t穩tulo,\n" "%C ser獺 reemplazado por un gui籀n de Bourne shell que\n" "mantenga la ventana de terminal abierta." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal de los datos de salida:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "&Saltar a primer plano cuando el programa finalice" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "Tiempo hasta que la ventana vuelva (en milisegundos):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "Filtro para ficheros fuente:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "Filtro para ficheros de &cabeceras:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Ligarse al proceso" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Especificar el n繳mero de proceso al que ligarse :" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 msgid "Register" msgstr "Registro" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Valor Decodificado" #: regwnd.cpp:434 msgid "GP and others" msgstr "GP y otros" #: regwnd.cpp:436 msgid "Flags" msgstr "Banderas" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "Segmento x86/x87" #: threadlist.cpp:42 msgid "Thread ID" msgstr "ID de Hilo" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Lugar" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&Limpiar" #: watchwindow.cpp:17 msgid " Add " msgstr " A簽adir " #: watchwindow.cpp:18 msgid " Del " msgstr " Borrar " #: watchwindow.cpp:19 msgid "Expression" msgstr "Expresi籀n" #: winstack.cpp:384 msgid ": Search" msgstr ": Buscar" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Distinci籀n de may繳sculas" #: winstack.cpp:393 msgid "&Forward" msgstr "&Siguiente" #: winstack.cpp:395 msgid "&Backward" msgstr "&Anterior" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "Volcado de memoria no disponible" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Ocurrencias" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorar" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Condici籀n" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "A簽adir &Breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "A簽adir &Watchpoint" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Ver C籀digo" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Condicionados..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Condici籀n : " #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ig&norar siguientes ocurrencias:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Deshabilitar" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Ver C籀digo" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "E&jecuci籀n" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Punto de interrupci籀n" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "Argumentos del programa" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "&Argumentos" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "Ejecutar %1 con estos argumentos: " #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" "Especifique los argumentos con los que se debe invocar el programa para esta " "sesi籀n de depuraci籀n. Especifique los argumentos como lo har穩a en l穩nea de " "籀rdenes, es decir, puede incluso usar comillas y variables de entorno, por " "ejemplo:

    --message 'start in: ' $HOME" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" "Busque un fichero; la ruta completa se insertar獺 en la posici籀n actual del " "cursor en la caja de edici籀n de arriba." #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "Insertar nombre de &fichero..." #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" "Busque un directorio; la ruta completa se insertar獺 en la posici籀n actual " "del cursor en la caja de edici籀n de arriba." #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "Insertar nombre de d&irectorio..." #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "&Directorio de trabajo" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" "Especifique aqu穩 el directorio de trabajo inicial donde se ejecuta el " "programa" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "Elija el directorio de trabajo inicial donde se ejecuta el programa" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&M獺s..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "&Entorno" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "Variables de entorno (NOMBRE=valor):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" "Para a簽adir una nueva variable de entorno o para modificar una, " "especifiquela aqu穩 de la forma NOMBRE=valor y pulse Modificar." #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" "Las variables de entorno que se especifiquen adem獺s de aquellas que " "se hereden se listan en esta tabla. Para a簽adir nuevas variables de entorno, " "especifiquelas de la forma NOMBRE=valor en la caja de edici籀n de " "arriba y pulse Modificar. Para modificar un valor, selecci籀nelo en " "esta lista y pulse Modificar. Para eliminar una variable de entorno, " "selecci籀nela en esta lista y pulse Eliminar" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Nombre" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" "Introduce la variable de entorno que est獺 especificada actualmente en la " "caja de edici籀n dentro de la lista. Si la variable ya est獺 en la lista, " "recibe un nuevo valor, en otro caso, se crea una nueva entrada." #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" "Elimina la variables de entorno seleccionada de la lista. No puede usarse " "para eliminar variables de entorno heredadas." #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "&Opciones xsldbg" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "Ligar al proceso" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "&Filtro o PID" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" "Escriba el nombre del proceso o su identificador (PID) aqu穩 para reducir el " "n繳mero de entradas en la lista." #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" "

    Esta lista muestra todos los procesos que se esta ejecutando " "actualmente. Debe seleccionar el proceso al que quiera que KDbg se ligue. " "Use la caja de edici籀n Filtro o PID para reducir el n繳mero de " "entradas en esta lista.

    El texto en la columna Comando es " "normalmente, pero no siempre, la orden que se us籀 para iniciar el proceso. " "La columna PID muestra el identificador del proceso. La columna " "PPID muestra el identificador del proceso padre. Las dem獺s columnas " "muestran m獺s informaci籀n sobre los procesos que tambi矇n esta disponible a " "trav矇s de la orden del sistema ps.

    La lista no se actualiza " "autom獺ticamente. Use el bot籀n Actualizar para actualizarla.

    " #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "Comando" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "Este bot籀n actualiza la lista de procesos." #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "&Actualizar" #~ msgid "Clear filter" #~ msgstr "Borrar filtro" #~ msgid "" #~ "Use this button to clear the filter text so that all processes are " #~ "displayed." #~ msgstr "" #~ "Use este bot籀n para borrar el texto del filtro de forma que se muestren " #~ "todos los procesos." #~ msgid "" #~ "You must select a process from the list. Then click the OK button " #~ "to attach to that process." #~ msgstr "" #~ "Debe seleccionar un proceso de la lista. Despu矇s, pulse el bot籀n " #~ "Aceptar para ligar a ese proceso." #~ msgid "Source" #~ msgstr "Fuente" #~ msgid "&Find" #~ msgstr "&Buscar" kdbg-2.5.5/po/fr.po000066400000000000000000000566431247243200200140310ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2006-10-10 23:08MDT\n" "Last-Translator: Sylvestre Ledru \n" "Language-Team: none\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "&D矇sactiver" #: brkpt.cpp:181 msgid "&Enable" msgstr "&Activer" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Points d'arr礙t conditionn矇s" #: dbgmainwnd.cpp:71 msgid "active" msgstr "actif" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Pile" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Locales" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "&D矇sactiver" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "Points de surveillance" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Registres" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Points d'arr礙t" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "Sortie" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Threads" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "M矇moire" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Ouvrir un fichier source..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Recharger ce fichier source" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Ex矇cutable..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Ex矇cutables r矇cents" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "Ce &programme..." #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Pr矇f矇rences" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "Code &source" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "&Pile" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Locales" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "&Expressions surveill矇es" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "&Registres" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "&Points d'arr礙t" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "T&hreads" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&Sortie" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "&M矇moire" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "E&x矇cuter" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "&Entrer dans cette fonction" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&Prochaine instruction" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Sortir de cette fonction" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Ex矇cuter &jusqu'au curseur" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "&Entrer dans cette instruction" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "&Passer cette instruction" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "&Program Counter jusqu' la ligne courante" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Stopper" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&Tuer" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Continuer" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "A&ttacher..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Param癡tres..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Placer/supp. &point d'arr礙t" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Point d'arr礙t &temporaire" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Activer/D矇sactiver pt. d'arr礙t" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "Expression surveill矇e" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Valeur" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Red矇marrer" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' n'est pas un fichier ou n'existe pas" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "Ne sait pas d矇bogguer le langage `%1'" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "Impossible de d矇marrer le processus de d矇boggage.\n" "Quittez KDbg et corrigez le probl癡me." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Pr矇f矇rences" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 #, fuzzy msgid "Debugger" msgstr "&D矇boguer" #: dbgmainwnd.cpp:842 #, fuzzy msgid "Miscellaneous" msgstr "Di&vers" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Sortie du programme" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Recharger ce fichier source\n" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Ouvrir un fichier source\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Fichiers d'ent礙te\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|Tous les fichiers" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Choisissez l'ex矇cutable d矇boguer" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Choisissez le core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 s'est termin矇 involontairement.\n" "Red矇marrez votre session (avec Fichier|Ex矇cutable)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "La commande pour le d矇bogueur pour ce programme est :\n" "%1\n" "Cette commande doit-elle 礙tre utilis矇e ?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Valeur" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Nouveau r矇pertoire de travail" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "Un d矇bogueur" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "D矇boggage XSLT" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "Groupes de registre et formatage" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "Log de la communication avec le d矇bogueur" #: main.cpp:45 msgid "remote debugging via " msgstr "D矇boggage distant via " #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "Entrez le langage : C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "Utilise le langage XSLT (d矇pr矇ci矇)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "Entrez le PID du processus d矇bogger" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Choisissez l'ex矇cutable d矇bogguer" #: main.cpp:51 msgid "a core file to use" msgstr "Fichier core utiliser" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Incapable de d矇marrer le d矇bogueur." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "Adresse" #: memwindow.cpp:59 msgid "B&ytes" msgstr "B&ytes" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "Demi-mots (&2 Bytes)" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "Mots (&4 Bytes)" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "Double-mots (&8 Bytes)" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "He&xadecimal" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "&D矇cimal sign矇" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "D矇cimal non-sign矇" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&Octal" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&Binaire" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&Adresses" #: memwindow.cpp:80 msgid "&Character" msgstr "&Caract癡re" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "&Virgule flottante" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "Re&chercher..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "&Instructions" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "Selectionner un nom de fichier ins矇rer comme argument de programme" #: pgmargs.cpp:212 #, fuzzy msgid "Select a directory to insert as program argument" msgstr "Selectionner un nom de fichier ins矇rer comme argument de programme" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "Comment lancer &GDB - laissez la cellule vide\n" "pour utiliser les valeurs par d矇fault:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "&Pas d'entr矇e/sortie" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "Uniquement la &sortie, 矇mulation de terminal simple" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "&Emulation compl癡te de terminal " #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: Param癡tres pour %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Pour les param礙tres par d矇faut, effacez les valeurs" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Comment lancer &GDB" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T sera remplac矇 par un titre,\n" "%C sera remplac矇 par un script qui\n" "garde la console active." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Sortie du programme :" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "&Apparait au premier plan quand le programme s'arr礙te" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "Temps partir duquel la fen礙tre revient (en millisecondes):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "&Tabstop chaque (caract癡res):" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Filtre fichier pour les fichier sources:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "Filtre fichier pour les fichiers d'ent礙te:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Attacher au processus" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Entrez le num矇ro du processus attacher :" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "D矇faut &GDB" #: regwnd.cpp:76 msgid "&Decimal" msgstr "&D矇cimal" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "R矇el (&e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "R矇el (&f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "&R矇el (g)" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Registre" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Valeur d矇cod矇e" #: regwnd.cpp:434 msgid "GP and others" msgstr "GR et autres" #: regwnd.cpp:436 msgid "Flags" msgstr "Flags" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "Segment x86/x87" #: threadlist.cpp:42 msgid "Thread ID" msgstr "ID du Thread" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Position" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&Vider" #: watchwindow.cpp:17 msgid " Add " msgstr " Ajouter " #: watchwindow.cpp:18 msgid " Del " msgstr " Supp " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "Expression surveill矇e" #: winstack.cpp:384 msgid ": Search" msgstr ": Rechercher" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Diff矇rencier min/maj" #: winstack.cpp:393 msgid "&Forward" msgstr "&Suivant" #: winstack.cpp:395 msgid "&Backward" msgstr "&Pr矇c矇dent" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "Pas de dump de la m矇moire disponible" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Hits" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorer" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Condition" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Points d'arr礙t" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "Ajouter un &point de surveillance" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Voir le code" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Conditionn矇s" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Condition : " #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignore les hits &suivants" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&D矇sactiver" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Voir le code" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "E&x矇cution" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Points d'arr礙t" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "Re&chercher..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Param癡tres du programme" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Param癡tres..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Ex矇cuter %1 avec ces param癡tres : " #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "R矇pertoire de travail:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Autres..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Variables d'environnement (Nom=Valeur):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Nom" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Pr矇f矇rences" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Attacher au processus" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Clear filter" #~ msgstr "|Fichiers d'ent礙te\n" #, fuzzy #~ msgid "Source" #~ msgstr "&Recharger ce fichier source" #, fuzzy #~ msgid "&Find" #~ msgstr "&Recherche" #~ msgid "Options:" #~ msgstr "Options:" #~ msgid "Toggle &Toolbar" #~ msgstr "Barre d'ou&tils" #~ msgid "Toggle &Statusbar" #~ msgstr "Barre d'矇t&at" #~ msgid "Executable" #~ msgstr "Ex矇cutable" #~ msgid "Open a source file" #~ msgstr "Ouvrir un fichier source" #~ msgid "Reload source file" #~ msgstr "Recharger ce fichier source" #~ msgid "Run/Continue" #~ msgstr "Ex矇cuter/Continuer" #~ msgid "Step into" #~ msgstr "Entrer dans cette fonction" #~ msgid "Step over" #~ msgstr "Prochaine instruction" #~ msgid "Step out" #~ msgstr "Sortir de cette fonction" #~ msgid "Breakpoint" #~ msgstr "Point d'arr礙t" #~ msgid "Search" #~ msgstr "Rechercher" kdbg-2.5.5/po/hr.po000066400000000000000000000616241247243200200140260ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # Vladimir Vuksan , 1998. # Luka Hranjec , 2012. # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2012-11-26 15:52+0100\n" "Last-Translator: Luka Hranjec \n" "Language-Team: Croatian <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 2.91.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "O&nemogui" #: brkpt.cpp:181 msgid "&Enable" msgstr "&Omogui" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Uvjetni breakpoint" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktivan" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Stog" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Lokalni" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "Varijabla" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "Nadgledanja" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "Registri" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Breakpointovi" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "Izlaz" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Niti" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "Memorija" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Otvori izvorni kod..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Ponovno uitaj kod" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Izvr禳na datoteka..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "&Nedavne datoteke..." #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "Ovaj &Progam" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Globalne Postavke..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "Izvorni &Kod" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "&Stog" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Lokalni" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "&Promatrani izrazi" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&Registri" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "&Breakpoints" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "&Niti" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&Izlaz" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "&Memorija" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "Pok&reni" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "&Uskoi" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&Preskoi" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Iskorai" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Izvr禳i do poka&zivaa" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "Uskoi u &instrukciju" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "&Preskoi za instrukciju" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "&Programski broja do trenutne linije" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Prekid" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&Ubij" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Restart" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Prikai" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenti..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Postavi/Obri禳i &breakpoint" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Postavi pri&vremeni breakpoint" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Ukljui/Iskljui breakpoint" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "Promatrani Izrazi" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "Uredi Vrijednost" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Restart" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' nije datoteka ili ne postoji" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "Ne znam kako debagirati jezik `%1'" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "Ne mogu zapoeti proces otklanjanja pogre禳aka\n" "Molim zatvorite KDbg i popravite gre禳ku" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Globalne opcije" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "Debuger" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "Razno" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Izlaz programa" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|Sve datoteteke izvornog koda\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|Izvorne datoteka\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Zaglavne datoteke\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|Sve datoteke" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "Otvori" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Izaberite izvr禳ni program za debugiranje" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Izaberi core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 neoekivani izlaz.\n" "Restartaj sezonu (npr. Datoteka|Izvr禳na datoteka)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "Postavke ovog programa daju sljedeu naredbu:\n" "%1\n" "Koristiti datu naredbu?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Vrijednost" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Novi radni direktorij:" #: main.cpp:23 msgid "KDbg" msgstr "KDbg" #: main.cpp:25 msgid "A Debugger" msgstr "Debuger" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "(c) 1998-2015 Johannes Sixt" #: main.cpp:31 msgid "Johannes Sixt" msgstr "Johannes Sixt" #: main.cpp:32 msgid "Keith Isdale" msgstr "Keith Isdale" #: main.cpp:33 msgid "XSLT debugging" msgstr "XSLT debagiranje" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "Daniel Kristjansson" #: main.cpp:36 msgid "Register groups and formatting" msgstr "Grupe registra i formatiranje" #: main.cpp:38 msgid "David Edmundson" msgstr "David Edmundson" #: main.cpp:39 msgid "KDE4 porting" msgstr "KDE4 inaica" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "transkript komunikacije s debagerom" #: main.cpp:45 msgid "remote debugging via " msgstr "daljinsko debagiranje putem " #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "odredi jezik: C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "koristi XSLT jezik (zastarjelo)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "odredi argumente izvr禳ne datoteka" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "odredi PID procesa za otklanjanje gre禳aka" #: main.cpp:50 msgid "path of executable to debug" msgstr "putanja do datoteke za debagiranje" #: main.cpp:51 msgid "a core file to use" msgstr "core datoteka za kori禳tenje" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Ne mogu pokrenuti debager." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "Adresa" #: memwindow.cpp:59 msgid "B&ytes" msgstr "B&yteovi" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "Halfwords (&2 Bytea)" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "Words (&4 Byteova)" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "Giantwords (&8 Byteova)" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "&Heksadecimalni" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "&Decimalni s predznakom" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "Decimalni &bez predznaka" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&Oktalni" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&Binarni" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&Adrese" #: memwindow.cpp:80 msgid "&Character" msgstr "&Slovo" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "&Pomian zarez" #: memwindow.cpp:84 msgid "&Strings" msgstr "&String" #: memwindow.cpp:86 msgid "&Instructions" msgstr "&Instrukcija" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "Izaberi ime datoteke koja e biti argument programa" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "Izaberi direktorij kao argument programa" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "Kako pozvati &GDB - ostaviti prazno\n" "za kori禳tenje zadanih globalnih opcija" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "&Nema ulaza ni izlaza" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "&Samo izlaz, jednostavna emulacija terminala" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "&Potpuna emulacija terminala" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: Postavke za %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Vrati prethodne postavke, obri禳i unose" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Kako pozvati &DGB" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T string reprezentira naslov\n" "%C reprezentira Bourne shell skriptu koja\n" "odr鱉ava prozor terminala otvorenim" #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal za izlazne vrijednosti programa" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "&Iskoi u prvi plan kod prekida programa" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "Vrijeme (u milisekundama) kad se prozor &vraa:" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "&Tabstop (znakova):" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "Filter datoteka &izvornog koda:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "Filter &zaglavnih datoteka" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Prikai na proces" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Unesi broj procesa za prikaiti se na:" #: procattach.cpp:302 msgid "OK" msgstr "OK" #: procattach.cpp:307 msgid "Cancel" msgstr "Otka鱉i" #: regwnd.cpp:73 msgid "&GDB default" msgstr "&GDB zadano" #: regwnd.cpp:76 msgid "&Decimal" msgstr "&Decimalni" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "Realni (&e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "Realni (&f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "&Realni (g)" #: regwnd.cpp:416 msgid "Register" msgstr "Register" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Dekodirana vrijednost" #: regwnd.cpp:434 msgid "GP and others" msgstr "GP i ostalo" #: regwnd.cpp:436 msgid "Flags" msgstr "Flags" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "x86/x87 segment" #: threadlist.cpp:42 msgid "Thread ID" msgstr "ID Niti" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Lokacija" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&Oisti" #: watchwindow.cpp:17 msgid " Add " msgstr " Dodaj " #: watchwindow.cpp:18 msgid " Del " msgstr " Obri禳i " #: watchwindow.cpp:19 msgid "Expression" msgstr "Izraz" #: winstack.cpp:384 msgid ": Search" msgstr ": Pretraga" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Razlikuj mala i velika slova" #: winstack.cpp:393 msgid "&Forward" msgstr "&Naprijed" #: winstack.cpp:395 msgid "&Backward" msgstr "&Natrag" #: winstack.cpp:396 msgid "Close" msgstr "Zatvori" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "Ispisa memorije nije dostupan" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "Forma" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Prolaza" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignoriraj" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Uvjet" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "Dodaj &Breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "Dodaj &Watchpoint" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "&Ukloni" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Gledaj kod" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Uvijetni.." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "Dialog" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Uvijet" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignoriraj &sljedeih prolaza:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "ne ignoriraj" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 msgid "&File" msgstr "&Datoteka" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 msgid "&View" msgstr "&Pregled" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "I&zvr禳avanje" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Breakpoint" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "&Postavke" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "Argumenti Programa" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "&Argumenti" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "Pokreni %1 sa ovim argumentima:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" "Odredi argumente s kojima e program biti pokrenut za ovu sezonu " "debagiranja. Unesi listu argumenata na isti nain kao 禳to bi u komandnoj " "liniji; dozvoljeno je kori禳tenje navodnika i environment varijabli, npr: " "

    --message 'start in: ' $HOME" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" "Pretraga datoteka; cijela putanja e biti ubaena na trenutnu lokaciju " "pokazivaa u gornjem edit box-u" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "Unesi ime &datoteke..." #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "Alt+F" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" "Pretraga za direktorijem; cijela putanja e biti ubaena na trenutnu " "poziciju kursora u gornjem edit box-u." #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "Unesi ime &direktorija..." #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "Alt+D" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "&Radni Direktorij" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "Ovdje unesi poetni radni direktorij iz kojeg se izvr禳ava program" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "Pretra鱉i poetni radni direktorij iz kojeg izvr禳iti datoteku." #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 msgid "&Browse..." msgstr "&Pretra鱉i..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "Alt+B" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "&Okru鱉enje" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "Environment varijable (IME=vrijednost):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" "Da biste dodali ili izmjenili postojeu environment varijablu, unesi ju " "ovdje u obliku IME=vrijednost i klikni Izmijeni" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" "Environment varijable koje postavljate UZ one koje se nasljeuju " "izlistane su u ovoj tablici. Da biste dodali nove environment varijable, " "unesite ih u formatu IME=vrijednost u edit box iznad i potom " "kliknite Izmjeni. Da biste izmjenili vrijednost, oznaite ju u listi " "i kliknite Izmjeni. Kako biste obrisali environment varijablu, " "izaberite ju u ovoj listi i kliknite na Obri禳i" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Ime" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" "Unosi environment varijablu koja je trenutno prikazana u edit box-u u listu. " "Ako je ime varijable ve u listi, ona poprima novu vrijednost; u protivnom " "kreira se novi zapis." #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "&Izmijeni" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "Alt+M" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" "Bri禳e oznaenu environment varijablu iz liste. Ne mo鱉e se koristiti za " "brisanje environment varijabli koje su nasljeene." #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "&Obri禳i" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "&xsldbg Opcije" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "Prikai na Proces" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "&Filter ili PID:" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" "Unesi ime procesa ili pripadnog proces ID-a (PID) kako bi se reduciro broj " "unosa u listi." #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" "

    Ova lista prikazuje sve procese koji su trenutno pokrenuti. Izaberite " "proces koji 鱉elite debagirati putem KDbg-a. Koristei Filter ili PID " "edit box mo鱉ete reducirati broj unosa u ovoj listi.

    Tekst u " "Naredba koloni je obino (ne i nu鱉no) naredba kojom je pokrenuti " "proces. PID kolona prikazuje ID roditeljskog procesa. Ostale kolone " "prikazuju dodatne informacije o procesu koje su dostupne putem naredbe " "ps.

    Ta lista se ne osvije鱉ava automatski nego treba pritisnuti " "Osvije鱉i gumb.

    " #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "Naredba" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "PID" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "PPID" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "Ovaj gumb osvije鱉ava listu procesa." #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "&Osvije鱉i" #~ msgid "Toggle &Toolbar" #~ msgstr "Uklj./isklj. &traku sa alatima" #~ msgid "Toggle &Statusbar" #~ msgstr "Uklj./isklj. traku sa &statusom" #~ msgid "Executable" #~ msgstr "Izvr禳ni program..." #~ msgid "Open a source file" #~ msgstr "Otvori datoteku sa izvornim kodom" #~ msgid "Run/Continue" #~ msgstr "Izvr禳i/Nastavi" #~ msgid "Breakpoint" #~ msgstr "Mjesto prekida" kdbg-2.5.5/po/hu.po000066400000000000000000000557031247243200200140320ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # Mucsi L獺szl籀 , 1999. # Tamas Szanto, , 2005. msgid "" msgstr "" "Project-Id-Version: 2.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2005-08-18 10:10+0100\n" "Last-Translator: Tamas Szanto \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "Kik&apcsol獺s" #: brkpt.cpp:181 msgid "&Enable" msgstr "Bekap&csol獺s" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Felt矇teles t繹r矇spont" #: dbgmainwnd.cpp:71 msgid "active" msgstr "akt穩v" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "Verem" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "Helyi v獺ltoz籀k" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Kik&apcsol獺s" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "Figyeltek" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "Regiszterek" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "T繹r矇spontok" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "Kimenet" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "Sz獺lak" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "Mem籀ria" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "Forr獺s &megnyit獺sa..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "A forr獺s 繳&jrat繹lt矇se" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Programf獺jl..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "A leg&ut籀bbi programf獺jlok" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "Mem籀r&iak矇p..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "Ez a p&rogram..." #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Glob獺lis be獺ll穩t獺sok..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "&Forr獺sk籀d" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "&Verem" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&Helyi v獺ltoz籀k" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "F&igyelt kifejez矇sek" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&Regiszterek" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "T繹r矇sp&ontok" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "S&z獺lak" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&Kimenet" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "M&em籀ria" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Futtat獺s" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "&Bel矇p矇s" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&tl矇p矇s" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Kil矇p矇s" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Futtat獺s a k&urzorig" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "&Bel矇p矇s az utas穩t獺sba" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "Az utas穩t獺s 獺&tl矇p矇se" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "Az aktu獺lis sor pr&ogramsz獺ml獺l籀ja" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "Me&gszak穩t獺s" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "Kil繹&v矇s" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "jra&ind穩t獺s" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Hozz獺f羹z矇s..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumentumok..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "T繹r矇spont &be獺ll穩t獺sa/t繹rl矇se" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "tmeneti t繹r矇s&pont be獺ll穩t獺sa" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "T繹r矇spont &ki-be kapcsol獺sa" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "Figyelt kifejez矇s" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "Az 矇rt矇k szerkeszt矇se" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "jraind穩t獺s" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Mem籀riak矇p" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' nem f獺jl vagy nem l矇tezik" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "Nem lehet nyomk繹vetni a(z) '%1' nyelvet" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "Nem siker羹lt elind穩tani a nyomk繹vet矇si folyamatot.\n" "Z獺rja be a KDbg-t 矇s h獺r穩tsa el a probl矇m獺t." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Glob獺lis be獺ll穩t獺sok" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 #, fuzzy msgid "Debugger" msgstr "Ny&omk繹vet" #: dbgmainwnd.cpp:842 #, fuzzy msgid "Miscellaneous" msgstr "&Egy矇b" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": A program kimenete" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|Minden forr獺sf獺jl\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|Forr獺sf獺jlok\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|Header f獺jlok\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|Minden f獺jl" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "A nyomk繹vetni k穩v獺nt programf獺jl kiv獺laszt獺sa" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Mem籀riak矇p kiv獺laszt獺sa" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 v獺ratlanul le獺llt.\n" "Ind穩tsa 繳jra a munkafolyamatot (pl. a F獺jl|Programf獺jl men羹ponttal)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "A program be獺ll穩t獺sai az al獺bbi nyomk繹vet矇si parancsot 穩rj獺k el:\n" "%1\n" "Ezt a parancsot szeretn矇 haszn獺lni?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "rt矇k" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "j munkak繹nyvt獺r: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "Nyomk繹vet" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "XSLT nyomk繹vet矇s" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "Regisztercsoportok 矇s form獺z獺s" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "a nyomk繹vetvel folytatott p獺rbesz矇d 獺tirata" #: main.cpp:45 msgid "remote debugging via " msgstr "t獺voli nyomk繹vet矇s a eszk繹z繹n kereszt羹l" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "a nyelv megd獺sa: C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "XSLT nyelv haszn獺lata (elavult)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "a nyomk繹vetni k穩v獺nt folyamat azonos穩t籀ja" #: main.cpp:50 msgid "path of executable to debug" msgstr "a nyomk繹vetni k穩v獺nt f獺jl el矇r矇si 繳tja" #: main.cpp:51 msgid "a core file to use" msgstr "a haszn獺lni k穩v獺nt mem籀riak矇p" #: main.cpp:114 msgid "Cannot start debugger." msgstr "A nyomk繹vett nem siker羹lt elind穩tani." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "C穩m" #: memwindow.cpp:59 msgid "B&ytes" msgstr "B獺&jt" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "F矇lsz籀 (&2 b獺jt)" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "Sz籀 (&4 b獺jt)" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "Hossz繳sz籀 (&8 b獺jt)" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "He&xadecim獺lis" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "Eljeles de&cim獺lis" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "Eljel n矇lk羹li &decim獺lis" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&Okt獺lis" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&Bin獺ris" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&C穩mek" #: memwindow.cpp:80 msgid "&Character" msgstr "&Karakter" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "&Lebegpontos" #: memwindow.cpp:84 msgid "&Strings" msgstr "Sztr&ingek" #: memwindow.cpp:86 msgid "&Instructions" msgstr "Utas穩t獺s&ok" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "V獺lassza ki a programnak argumentumk矇nt 獺tadni k穩v獺nt f獺jlnevet" #: pgmargs.cpp:212 #, fuzzy msgid "Select a directory to insert as program argument" msgstr "V獺lassza ki a programnak argumentumk矇nt 獺tadni k穩v獺nt f獺jlnevet" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "A &GDB ind穩t獺si m籀dja - ha 羹resen hagyja,\n" "a glob獺lis alap矇rtelmez矇s lesz 矇rv矇nyes:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "Kimenet 矇s bemenet n矇l&k羹l" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "Csa&k a kimenet, egyszer鑄 termin獺lemul獺ci籀" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "Teljes termin獺lemul獺&ci籀" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: %2 be獺ll穩t獺sai" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Az eredeti be獺ll穩t獺sok vissza獺ll穩t獺s獺hoz t繹r繹lje a bejegyz矇seket." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "A &GDB megh穩v獺si m籀dja:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T hely矇re a c穩m,\n" "%C hely矇re egy szkript ker羹l,\n" "amely nyitva tartja a termin獺lablakot." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Termin獺l a program kimenet矇nek:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "Az elt矇&rbe hoz獺s a program le獺ll獺sakor" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "Az ablak v&isszahoz獺si ideje (ms):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "Tab&ul獺torsz矇less矇g (karakter):" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "F獺jlsz鑄r a f&orr獺sf獺jlokhoz:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "F獺jlsz鑄r a &header f獺jlokhoz:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Kapcsol籀d獺s folyamathoz" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Adja meg, mely azonos穩t籀j繳 folyamathoz szeretne kapcsol籀dni:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "GDB ala&p矇rtelmez矇s" #: regwnd.cpp:76 msgid "&Decimal" msgstr "De&cim獺lis" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "Val籀s (&e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "Val籀s (&f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "Val籀s (&g)" #: regwnd.cpp:416 msgid "Register" msgstr "Regiszter" #: regwnd.cpp:418 msgid "Decoded value" msgstr "Dek籀dolt 矇rt矇k" #: regwnd.cpp:434 msgid "GP and others" msgstr "GP 矇s egy矇b" #: regwnd.cpp:436 msgid "Flags" msgstr "Jelzk" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "x86/x87 szegmens" #: threadlist.cpp:42 msgid "Thread ID" msgstr "Sz獺lazonos穩t籀" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Hely" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&T繹rl矇s" #: watchwindow.cpp:17 msgid " Add " msgstr " Hozz獺ad獺s " #: watchwindow.cpp:18 msgid " Del " msgstr " T繹rl矇s " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "Figyelt kifejez矇s" #: winstack.cpp:384 msgid ": Search" msgstr ": Keres矇s" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Nagybet鑄矇rz矇keny" #: winstack.cpp:393 msgid "&Forward" msgstr "&Elre" #: winstack.cpp:395 msgid "&Backward" msgstr "&H獺tra" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "Nem 矇rhet el mem籀riak矇p" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Tal獺latok" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Figyelmen k穩v羹l hagy獺s" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Felt矇tel" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "&T繹r矇spont hozz獺ad獺sa" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "Figyelpont ho&zz獺ad獺sa" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "A k籀&d megtekint矇se" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Felt矇teles..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Felt矇tel:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "A k繹vetkez繹 tal獺latok figyelmen k穩v羹l &hagy獺sa:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "Kik&apcsol獺s" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "A k籀&d megtekint矇se" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "F&uttat獺s" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&T繹r矇spont" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "Sztr&ingek" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Program argumentumok" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumentumok..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "%1 futtat獺sa ezekkel az argumentokkal:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Munkak繹nyvt獺r:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "T&ov獺bb..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "K繹rnyezeti v獺ltoz籀k (NV=矇rt矇k):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "N矇v" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Glob獺lis be獺ll穩t獺sok..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Kapcsol籀d獺s folyamathoz" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Clear filter" #~ msgstr "|Header f獺jlok\n" #~ msgid "Source" #~ msgstr "Forr獺s" #~ msgid "&Find" #~ msgstr "&Keres矇s" #~ msgid "Options:" #~ msgstr "Be獺ll穩t獺sok:" kdbg-2.5.5/po/it.po000066400000000000000000000661521247243200200140320ustar00rootroot00000000000000# Translation Table for KDbg into Italian # # Tabella di traduzione per KDbg dall'inglese all'italiano # # # Copyright (C) 1999 Free Software Foundation, Inc. # Massimo Morin , 1999. # Walter Tasin , 1999. # # Queste regole vengono da Kdevelop it.po # # Regole Base # # Bisogna fissarsi delle regole da cui partire, per cui parto da # queste; se qualcuno me ne pu簷 suggerire di altre e/o di # migliori.... # # o Uso sempre la seconda persona singolare in forma IMPERATIVA # PRESENTE (fai, premi etc..) quando mi riferisco all'utente # o Uso la prima persona singolare indicativa quando riferito al # programma (compilo.... controllo....) # o Parole che riferiscono a programmi all'interno di frasi le # racchiudo in `' cosicch癡 non siano troppo ambigui # o Cerco di evitare il pi羅 possibile ripetizioni di aggettivi # possessivi quali "tuo, nostro..." per cui "your project" diventa "il # progetto" # o Gli avverbi come "here" e simili non hanno molto senso in # italiano (sono proprio brutti ed ovvii) per cui se sono ripetitivi # e inutili come "Add comments here" diviene "Aggiungi commenti" li # tolgo # o Le parole inglesi sono ammesse in italiano ma non hanno plurale, # per cui "file" diventa "il file" e "files" diventa "i file" # o Non sono sicuro ma alcune parole inglesi si sono italianizzate, # per cui "to click" 癡 diventato "clickare" e "to debug" # "debuggare"... vedo di usare "the comon sense (tm)" # o Le abbreviazioni le tengo uguali (CV, RFV) anche perch癡 # molte volte non so come interpretarle.... # # (WAT) spiegazione (CV = class view - struttura di classe, # RFV = real file view - presentazione di tutti i file, # LFV=logical fileview - presentazione dei file collegati # col progetto) # # # o Uso ' come apostrofo e ` come accento (non ho i caratteri a, e i # # accentati per ora :( ) # # # o (WAT) Sempre usare la vocale e con ` per 癡 (o con 織 per 籀, o con ` per 簷, # u con ` per 羅, ecc. ...) # ... c'癡 un programma che cambier poi queste combinazioni # nelle vocali accentate # ' <= usa questo tipo di accento come apostrofo # # Traduzioni mancate # # Secondo me alcune parole inglesi hanno pi羅 significato per i # programmatori nella loro forma originale che non in una "possibile" # traduzione. Qui di seguito indico le parole non tradotte. # # - file # - directory # - bug detesto la parola "baco", anche perch癡 diciamo # debuggare e non debacare :) # - editor what the heck we are talking with programmers not with # secretaries! # - ChangeLog non mi viene niente di meglio # - DistClean 癡 una opzione standard del make # - window manager # - warning sembra pi羅 bello di avvisi (quando non 癡 attenzione!) # - widget # - syntax highlighting # - bookmark segnalibro non mi piace # - clipboard 癡 pi羅 bello di avagnetta # - wizard decisamente meglio che mago o stregone 8-) # - stop (vedi sotto) # - breakpoint meglio di "punto di interruzione" # - database # - logo # - private protected public sono keyword # - team non esiste un analogo in italiano # - target quando si riferisce a regola del makefile # - symbol table # - shared library librerie condivise?? pi羅 bello inalterato # - touch quando si tratta del programma (touch) # - job quando si tratta di job=task # - cast promozione nei casi che ha senso, senn簷 invariato (eppoi si dice cast anche in italiano) # - prototype quando parliamo di prototype di funzione # - signed/unsigned quando si tratta di modificatori # - fixed point and floating point non ha senso tradurre # - old-style # - C-style # - breakpoint # - process-id # # Ambiguit # # Queste sono parole che traduco in parte ma non sono la "miglior traduzione # possibile" ma mi pare che il senso sia vicino (almeno nelle # intenzioni.... consigli???) # # - source lo traduco in `sorgente', solo se non 癡 chiaro dal # contesto altrimenti lascio inalterato # - project qualche volta ha pi羅 senso parlare di `project file' # che `file del progetto' # - report in alcuni casi lo traduco in rapporto in altri lo # lascio inalterato (come Bug report) # - tree qualche volta `albero' va bene ma altre volte # preferisco `struttura' # - dialog qualche volta lo traduco in "finestra di dialogo" o # semplicemente "finestra" ma in casi come "dialog # editor" lo lascio inalterato # - history page la lascio come "history page" perch矇 non so come # tradurla nel modo pi羅 sensato # - view 癡 vista o visualizzazione o visore???? Mah!!! Cerco # di esser consistente..... In linea di massima se 癡 ...-View # come in Output-View la traduco come Vista (Vista-Output) # - All of Fame che 癡 l'Aula Magna??? Ah簷 facciamo meno i ganzi per # favore ;) # - Make se 癡 il programma lo lascio inalterato, altrimenti lo # traduco in "Crea" # - Build preferirei lasciarlo in inglese ma penso che # "costruire" vada bene lo stesso # - Clean "elimina" mi pare pi羅 appropriato che "pulisci" # - Access traduco con Accedi ma potrebbe essere anche "Entra" o # "Procedi" # - Severity => severit ma non mi piace meglio gravit # - Application "applicazione" ma certe volte lo lascio # inalterato come in "Application Wizard" # - fail "fallire" ma non mi piace # - stop alcune volte rimane inalterato come semplicemente # "Stop" ma altre lo traduco con interrompi. # - togglebutton selettore o bottone di selezione # - machine lo traduco con sistema perch癡 mi pare pi羅 bello di macchina # msgid "" msgstr "" "Project-Id-Version: Kdbg\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:16MDT\n" "Last-Translator: Massimo Morin \n" "Language-Team: Italiano \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" # (WAT) comm: titolo della finestra di dialogo, mentre mettere le impostazioni # meglio cominciare con una lettera maiuscola #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Breakpoint condizionato" #: dbgmainwnd.cpp:71 msgid "active" msgstr "attiva" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Valore" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Riparti" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Breakpoint" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Apri Sorgente..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Ricarica Sorgente" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Eseguibile" #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Eseguibile" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Impostazioni Globali..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Riparti" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Breakpoint" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Esegui" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Entra nella &funzione" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&Salta la funzione" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "&Esci dalla funzione" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Esegui fino al &cursore" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Interrompi" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Riparti" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "Co&nnetti..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argomenti..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Imposta/Elimina &breakpoint" # (WAT) corr: mancanza del hotkey #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Imposta breakpoint &temporaneo" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Abilita/Disabilita breakpoint" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Valore" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Riparti" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' non 癡 un file oppure non esiste" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Impostazioni globali" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Output del programma" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Ricarica file sorgente" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Apri file sorgente" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Seleziona l'eseguibile da debuggare" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Seleziona il core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 癡 terminato inaspettatamente.\n" "Riapri la sessione (ad esempio con File|Esegui)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Valore" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" # (WAT) corr: directory #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Nuova directory di lavoro: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Seleziona l'eseguibile da debuggare" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Non riesco ad eseguire il debugger" #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&Trova..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Per rimettere i valori di default, cancella le impostazioni" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Come eseguire &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T verr sostituita con il titolo,\n" "%C verr sostituito da uno script Bourne shell\n" "che terr la finestra del terminale aperta." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminale per l'output del programma:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Ricarica file sorgente" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Connessione al processo" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Specifica il process-id al quale connettersi:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Riparti" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Posizione" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Aggiungi " #: watchwindow.cpp:18 msgid " Del " msgstr " Elimina " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "E&secuzione" #: winstack.cpp:384 msgid ": Search" msgstr ": Cerca" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Maiuscole/Minuscole" #: winstack.cpp:393 msgid "&Forward" msgstr "&Avanti" #: winstack.cpp:395 msgid "&Backward" msgstr "&Indietro" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" # Penso si riferisca a breakpoint, per cui sono i "passaggi" di esecuzione dell'istruzione #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Passaggi" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignora" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Condizione" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Mostra Codice" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Condizione..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Condizione:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignora il &prossimo passaggio:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Finestra" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Mostra Codice" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "E&secuzione" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Breakpoint" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Trova..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argomenti del programma" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argomenti..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Esegui %1 con questi argomenti:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Directory di lavoro" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Altri..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Variabili di ambiente (NAME=valore):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Nome" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Impostazioni Globali..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Connessione al processo" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Ricarica Sorgente" #~ msgid "Toggle &Toolbar" #~ msgstr "Attiva/Disattiva &Toolbar" #~ msgid "Toggle &Statusbar" #~ msgstr "Attiva/Disattiva &Barra di Stato" #~ msgid "Executable" #~ msgstr "Eseguibile" #~ msgid "Open a source file" #~ msgstr "Apri file sorgente" #~ msgid "Reload source file" #~ msgstr "Ricarica file sorgente" #~ msgid "Run/Continue" #~ msgstr "Esegui/Continua" #~ msgid "Step into" #~ msgstr "Entra nella funzione" #~ msgid "Step over" #~ msgstr "Salta la funzione" #~ msgid "Step out" #~ msgstr "Esci dalla funzione" #~ msgid "Breakpoint" #~ msgstr "Breakpoint" #~ msgid "Search" #~ msgstr "Cerca" kdbg-2.5.5/po/ja.po000066400000000000000000000537531247243200200140130ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # Johannes Sixt , 2000 # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2000-05-12 20:54+0900\n" "Last-Translator: Eri Ishida <>\n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Generator: PODB ver.0.2.0\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": ∩辣隞研潦胯扎喋" #: dbgmainwnd.cpp:71 msgid "active" msgstr "U胯" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "嫘踴潦" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "研潦胯扎喋" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "賬潦嫘(&O)" #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "賬潦嫘桀隤准輯噯(&R)" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "摰銵航(&E)" #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "摰銵航" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "喋U喋(&C)" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "啜准潦怒芥瑯扼(&G)" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "研潦胯扎喋" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "摰銵(&R)" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "嫘 扎喋(&i)" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "嫘 芥潦(&o)" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "嫘 U艾(&u)" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "怒潦賬怒整扯(&c)" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "研潦(&B)" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "嫘踴潦(&s)" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "亦(&t)" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "撘(&A)" #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "研潦胯扎喋柴颯嚗胯芥(&b)" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "隞柴研潦胯扎喋颯(&t)" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "研潦胯扎喋對∪(&E)" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "嫘踴潦" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "喋U喋" #: dbgmainwnd.cpp:623 #, fuzzy msgid "`%1' is not a file or does not exist" msgstr "`%s'胯∼扎怒扼芥臬具整" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": 啜准潦怒芥瑯扼" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": 准啜押桀箏" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "賬潦嫘∼扎怒隤准輯噯" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "賬潦嫘∼扎怒" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "啣航賬芥柴豢" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "喋U喋豢" #: debugger.cpp:650 #, fuzzy msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "gdb桐祉鈭\n" "颯瑯扼喋嫘踴潦(靘嚗with File|Executable)" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "啜雿璆准研胯:" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "啣航賬芥柴豢" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "研韏瑕扼整" #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "押怒株身摰敺拙怒胯具喋芥潦扎艾" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "GDB潦喳箝怒(&G):" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T胯踴扎怒格摮函蔭\n" "%C胯踴潦怒柴艾扎喋艾艾潦喋瑯扼俞n" "嫘胯芥怎蔭整" #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "准啜押桀箏具踴潦(&T):" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "賬潦嫘∼扎怒隤准輯噯" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": 准颯嫘急亦" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "亦准颯寧芸瑯摰:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "嫘踴潦" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "湔" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr "餈賢" #: watchwindow.cpp:18 msgid " Del " msgstr "" #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "摰銵(&x)" #: winstack.cpp:384 msgid ": Search" msgstr ": 璊蝝" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "憭扳摮典摮箏乓(&C)" #: winstack.cpp:393 msgid "&Forward" msgstr "脯(&F)" #: winstack.cpp:395 msgid "&Backward" msgstr "颯(&B)" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "∟" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "嗆" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "研潦胯扎喋(&B)" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "喋潦銵函內(&V)" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "∩辣隞...(&C)" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "∩辣(&C)" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "∟甈∼柴(&n)" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "璊蝝(&F)" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "喋潦銵函內(&V)" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "摰銵(&x)" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "研潦胯扎喋(&B)" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "璊蝝(&F)" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr "准啜押桀" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "撘(&A)" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "桀啜 %s 摰銵" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "雿璆准研胯:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "More(&M)" #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "啣憭 (NAME=values):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "憭(&M)" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "啜准潦怒芥瑯扼(&G)" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": 准颯嫘急亦" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "賬潦嫘桀隤准輯噯(&R)" #~ msgid "Toggle &Toolbar" #~ msgstr "潦怒潦啜(&T)" #~ msgid "Toggle &Statusbar" #~ msgstr "嫘潦踴嫘潦啜(&S)" #~ msgid "Executable" #~ msgstr "摰銵航" #~ msgid "Open a source file" #~ msgstr "賬潦嫘∼扎怒" #~ msgid "Reload source file" #~ msgstr "賬潦嫘∼扎怒隤准輯噯" #~ msgid "Run/Continue" #~ msgstr "摰銵嚗蝬" #~ msgid "Step into" #~ msgstr "嫘扎喋" #~ msgid "Step over" #~ msgstr "嫘芥潦" #~ msgid "Step out" #~ msgstr "嫘U艾" #~ msgid "Breakpoint" #~ msgstr "研潦胯扎喋" #~ msgid "Search" #~ msgstr "璊蝝" #~ msgid "&Add" #~ msgstr "餈賢(&A)" #~ msgid "&List..." #~ msgstr "芥嫘(&L)" kdbg-2.5.5/po/kdbg.pot000066400000000000000000000460271247243200200145100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "" #: dbgmainwnd.cpp:71 msgid "active" msgstr "" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "" #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "" #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "" #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr "" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 msgid "path of executable to debug" msgstr "" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "" #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr "" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 msgid "Register" msgstr "" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr "" #: watchwindow.cpp:18 msgid " Del " msgstr "" #: watchwindow.cpp:19 msgid "Expression" msgstr "" #: winstack.cpp:384 msgid ": Search" msgstr "" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "" #: winstack.cpp:393 msgid "&Forward" msgstr "" #: winstack.cpp:395 msgid "&Backward" msgstr "" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 msgid "&File" msgstr "" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 msgid "&View" msgstr "" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 msgid "&Browse..." msgstr "" #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" kdbg-2.5.5/po/nb.po000066400000000000000000000513731247243200200140140ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # Hans Petter Bieker , 1998. # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:09MDT\n" "Last-Translator: Hans Petter Bieker \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktiv" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Verdi" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Omstart" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Brytningspunkter" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&pne kildekode..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "L&ast kildekode p疇 nytt" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Programfil..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Programfil" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Minnedump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Omstart" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Brytningspunkter" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Kj繪r" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Hopp &inn i" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Hopp &over" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Hopp &ut" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Kj繪r til &mark繪r" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Bryt" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Omstart" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Knytt til..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenter..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Sett/nullstill &brytningspunkter" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Se&tt midlertidig brytningspunkt" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Skru av/p疇 brytningspunkter" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Verdi" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Omstart" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Minnedump" #: dbgmainwnd.cpp:623 #, fuzzy msgid "`%1' is not a file or does not exist" msgstr "`%1' er ikke en fil eller eksisterer ikke" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Programutmating" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "pne kildekode p疇 nytt" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "pne en kildekodefil" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Velg programmet du vil avluse" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Velg en minnedump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Verdi" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Velg programmet du vil avluse" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Kan ikke starte avluser." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&Finn..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 #, fuzzy msgid "&Terminal for program output:" msgstr ": Programutmating" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "pne kildekode p疇 nytt" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Knytt til prosess" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Oppgi prosessnummeret du vil knytte til:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Omstart" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Sted" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Legg til " #: watchwindow.cpp:18 msgid " Del " msgstr " Slett " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "&Programfil" #: winstack.cpp:384 msgid ": Search" msgstr ": S繪k" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Avhengig av bokstavst繪rrelse" #: winstack.cpp:393 msgid "&Forward" msgstr "&Forover" #: winstack.cpp:395 msgid "&Backward" msgstr "&Bakover" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Brytningpunkter" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Vis kode" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Vindu" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Vis kode" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&Programfil" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Brytningpunkter" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Finn..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Programargumenter" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenter..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Kj繪r %1 med disse argumentene:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Mer..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Navn" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Knytt til prosess" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "L&ast kildekode p疇 nytt" #~ msgid "Toggle &Toolbar" #~ msgstr "Vis/skjul &verkt繪ylinje" #~ msgid "Toggle &Statusbar" #~ msgstr "Vis/skjul &statuslinje" #~ msgid "Executable" #~ msgstr "Programfil" #~ msgid "Open a source file" #~ msgstr "pne en kildekodefil" #~ msgid "Reload source file" #~ msgstr "pne kildekode p疇 nytt" #~ msgid "Run/Continue" #~ msgstr "Kj繪r/fortsett" #~ msgid "Step into" #~ msgstr "Hopp inn i" #~ msgid "Step over" #~ msgstr "Hopp over" #~ msgid "Step out" #~ msgstr "Hopp ut" #~ msgid "Breakpoint" #~ msgstr "Brytningspunkt" #~ msgid "Search" #~ msgstr "S繪k" kdbg-2.5.5/po/nn.po000066400000000000000000000523311247243200200140230ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # Johannes Sixt , 2000 # Norwegian (Nynorsk) KDE translation # Copyright (C) 2000 Gaute Hvoslef Kvalnes. # Gaute Hvoslef Kvalnes , 1999 # msgid "" msgstr "" "Project-Id-Version: OTHERS/kdbg\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:10MDT\n" "Last-Translator: Gaute Hvoslef Kvalnes \n" "Language-Team: Norsk (nynorsk)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Brotpunkt p疇 vilk疇r" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktiv" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Verdi" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Start om att" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Brotpunkt" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Opna kjelde ..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Last kjelde om att" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&K繪yrbar fil ..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "K繪yrbar fil" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "K&jernedump ..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Globale val ..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Brotpunkt" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&K繪yr" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "G疇 &inn" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Hopp &over" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "G疇 &ut" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "K繪yr til &skrivemerket" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Avbryt" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "&Start om att" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Legg ved ..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argument ..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Set/fjern brotpunkt" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Set &mellombels brotpunkt" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "Brotpunkt &av/p疇" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Verdi" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Start om att" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Kjernedump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "'%1' er inga fil eller finst ikkje" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Globale val" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Programutskrift" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Last kjeldefil om att" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Opna ei kjeldefil" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Vel den k繪yrbare fila som skal avlusast" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Vel kjernedump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 avslutta uventa.\n" "Start om att (med Fil|K繪yrbar fil)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Verdi" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Ny arbeidskatalog: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Vel den k繪yrbare fila som skal avlusast" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Kan ikkje starta avlusar." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Slett oppf繪ringane for 疇 g疇 tilbake til standardinnstilingane." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Korleis starta &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T vert erstatta med ein titteltekst,\n" "%C vert erstatta me eit Bourne-skalskript som\n" "held terminalvindauget 簷pe." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal for programutskrift:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Last kjeldefil om att" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Knyt til prosess" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Vel prosessnummeret det skal knytast til:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Start om att" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Plassering" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Legg til " #: watchwindow.cpp:18 msgid " Del " msgstr " Slett " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "&K繪yring" #: winstack.cpp:384 msgid ": Search" msgstr ": S繪k" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Omsyn til bokstavstorleik" #: winstack.cpp:393 msgid "&Forward" msgstr "&Framover" #: winstack.cpp:395 msgid "&Backward" msgstr "&Bakover" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Treff" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignorer" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Vilk疇r" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Brotpunkt" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Vis kode" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Vilk疇r ..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Vilk疇r:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignorer &neste treff:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Vindauge" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Vis kode" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&K繪yring" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Brotpunkt" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Finn ..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Programargument" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argument ..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "K繪yr %1 med desse arguenta:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Arbeidskatalog:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Meir ..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Milj繪variablar (NAMN=verdi):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Namn" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Globale val ..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Knyt til prosess" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Last kjelde om att" #~ msgid "Toggle &Toolbar" #~ msgstr "&Verkt繪ylinje av/p疇" #~ msgid "Toggle &Statusbar" #~ msgstr "&Statuslinje av/p疇" #~ msgid "Executable" #~ msgstr "K繪yrbar fil" #~ msgid "Open a source file" #~ msgstr "Opna ei kjeldefil" #~ msgid "Reload source file" #~ msgstr "Last kjeldefil om att" #~ msgid "Run/Continue" #~ msgstr "K繪yr/fortset" #~ msgid "Step into" #~ msgstr "G疇 inn" #~ msgid "Step over" #~ msgstr "Hopp over" #~ msgid "Step out" #~ msgstr "G疇 ut" #~ msgid "Breakpoint" #~ msgstr "Brotpunkt" #~ msgid "Search" #~ msgstr "S繪k" kdbg-2.5.5/po/pl.po000066400000000000000000000526271247243200200140330ustar00rootroot00000000000000# KDbg Polish translation file. # Main translation work: # Jacek Wojdel msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:12MDT\n" "Last-Translator: Jacek Wojdel \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: iso-8859-2\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Warunkowy punkt zatrzymania" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktywny" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Warto" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Restartuj" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Punkty zatrzymania" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Otw籀rz 驕r籀da..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "P&rzeaduj 驕r籀da..." #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "Plik &wykonywalny..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Plik wykonywalny" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Zrzut rdzenia..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "Opcje o&g籀lne..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Restartuj" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Punkty zatrzymania" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "U&ruchom" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Wejd驕 &w" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Przejd驕 &przez" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Wyjd驕 &z" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Uruchom do &kursora" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Zatrzymaj" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Re&startuj" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Podcz..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenty..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Ustaw/usu punkt &zatrzymania" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Us&taw chwilowy punkt zatrzymania" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Wcz/wycz punkt zatrzymania" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Warto" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Restartuj" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Zrzut rdzenia" #: dbgmainwnd.cpp:623 #, fuzzy msgid "`%1' is not a file or does not exist" msgstr "%1' nie jest plikiem lub nie istnieje" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Og籀lne opcje" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Wyniki dziaania programu" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Przeaduj plik 驕r籀dowy" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Otw籀rz plik 驕r籀dowy" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Wybierz plik wykonywalny do debugowania" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Wybierz zrzut rdzenia" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 niespodziewanie zakoczy prac.\n" "Uruchom sesj ponownie (np. u髒ywajc Plik|Plik wykonywalny)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Warto" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Nowy katalog roboczy: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Wybierz plik wykonywalny do debugowania" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Nie udao si uruchomi debugera." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&Wyszukaj..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Wyczy pola by przywr籀ci domylne ustawienia." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Jak uruchomi &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T zostanie zastpione tekstem tytuowym,\n" "%C zostanie zastpione przez skrypt w Bourne shell,\n" "kt籀ry spowoduje pozostawienie otwartego okna terminala." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal dla wynik籀w programu:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Przeaduj plik 驕r籀dowy" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Podcz do procesu" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Podaj numer procesu do podczenia si:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Restartuj" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Lokacja" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Dodaj " #: watchwindow.cpp:18 msgid " Del " msgstr " Usu " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "&Wykonywanie" #: winstack.cpp:384 msgid ": Search" msgstr ": Wyszukaj" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Rozr籀髒niaj wielkie/mae" #: winstack.cpp:393 msgid "&Forward" msgstr "&Do przodu" #: winstack.cpp:395 msgid "&Backward" msgstr "&Wstecz" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Trafienia" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Warunek" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "Punkt &zatrzymania" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Poka髒 kod" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Warunkowy..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Warunek:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignoruj &nastpne trafienia:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Okno" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Poka髒 kod" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&Wykonywanie" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "Punkt &zatrzymania" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Wyszukaj..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argumenty programu" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenty..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Uruchom %1 z tymi argumentami:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Katalog roboczy:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Wicej..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Zmienne rodowiskowe (NAZWA=warto):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "Opcje o&g籀lne..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Podcz do procesu" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "P&rzeaduj 驕r籀da..." #~ msgid "Toggle &Toolbar" #~ msgstr "Pasek &narzdzi" #~ msgid "Toggle &Statusbar" #~ msgstr "Pasek &stanu" #~ msgid "Executable" #~ msgstr "Plik wykonywalny" #~ msgid "Open a source file" #~ msgstr "Otw籀rz plik 驕r籀dowy" #~ msgid "Reload source file" #~ msgstr "Przeaduj plik 驕r籀dowy" #~ msgid "Run/Continue" #~ msgstr "Uruchom/kontynuuj" #~ msgid "Step into" #~ msgstr "Wejd驕 w" #~ msgid "Step over" #~ msgstr "Przejd驕 przez" #~ msgid "Step out" #~ msgstr "Wyjd驕 z" #~ msgid "Breakpoint" #~ msgstr "Punkt zatrzymania" #~ msgid "Search" #~ msgstr "Wyszukaj" kdbg-2.5.5/po/preparemessages.sh000077500000000000000000000016361247243200200165770ustar00rootroot00000000000000#!/bin/sh # run in the directory where this script is located dir=${0%/*} cd "${dir:-.}" || exit basedir="../kdbg/" # root of translatable sources project="kdbg" # project name echo "Preparing rc files" ( cd "$basedir" && extractrc $(ls -1 *.rc *.ui) ) > rc.cpp || exit echo "Extracting messages" infiles=$(mktemp) || exit trap 'rm -f "$infiles" rc.cpp' EXIT HUP INT TERM ( cd "$basedir" && ls -1 *.cpp *.h && echo rc.cpp ) > "$infiles" && xgettext --from-code=UTF-8 -C -kde \ -ci18n \ -ki18n:1 \ -ki18nc:1c,2 \ -ki18np:1,2 \ -ki18ncp:1c,2,3 \ -ktr2i18n:1 \ -kI18N_NOOP:1 \ -kI18N_NOOP2:1c,2 \ -kaliasLocale \ -kki18n:1 \ -kki18nc:1c,2 \ -kki18np:1,2 \ -kki18ncp:1c,2,3 \ --files-from="$infiles" -D "$basedir" -D . -o "$project".pot || exit echo "Merging translations" for cat in *.po; do echo $cat msgmerge -o "$cat.new" "$cat" "$project".pot && mv "$cat.new" "$cat" || exit done echo "Done" kdbg-2.5.5/po/pt.po000066400000000000000000000502201247243200200140260ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:12MDT\n" "Last-Translator: Pedro Morais \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "" #: dbgmainwnd.cpp:71 msgid "active" msgstr "activo" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Breakpoints" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Abrir Cdigo..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Executavel..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Executavel..." #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Breakpoints" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Correr" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "&Entrar" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "&Saltar" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "S&air" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Correr at ao &cursor" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Paragens" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumentos..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Colocar/tirar &breakpoint" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Colocar breakpoint &temporario" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Activar/desactivar breakpoint" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' no um ficheiro ou no existe" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Sada do programa" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Abrir o ficheiro com o cdigo" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Abrir o ficheiro com o cdigo" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Seleccione o executavel a depurar" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Seleccione o executavel a depurar" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "No consigo iniciar o depurador." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&Listar..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 #, fuzzy msgid "&Terminal for program output:" msgstr ": Sada do programa" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr "" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 msgid "Register" msgstr "" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Localizao" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Adicionar " #: watchwindow.cpp:18 msgid " Del " msgstr " Apagar " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "E&xecuo" #: winstack.cpp:384 msgid ": Search" msgstr "" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "" #: winstack.cpp:393 msgid "&Forward" msgstr "" #: winstack.cpp:395 msgid "&Backward" msgstr "" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Ver Cdigo" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Janela" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Ver Cdigo" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "E&xecuo" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Breakpoint" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Listar..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argumentos do programa" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumentos..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Correr %1 com estes argumentos:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Mais..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #~ msgid "Toggle &Toolbar" #~ msgstr "Mostrar Barra de &Ferramentas" #~ msgid "Toggle &Statusbar" #~ msgstr "Mostrar Barra de &Status" #~ msgid "Executable" #~ msgstr "Executavel..." #~ msgid "Open a source file" #~ msgstr "Abrir o ficheiro com o cdigo" #~ msgid "Run/Continue" #~ msgstr "Correr/Continuar" #~ msgid "Step into" #~ msgstr "Entrar" #~ msgid "Step over" #~ msgstr "Saltar" #~ msgid "Step out" #~ msgstr "Sair" #~ msgid "Breakpoint" #~ msgstr "Breakpoint" kdbg-2.5.5/po/ro.po000066400000000000000000000503601247243200200140300ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:12MDT\n" "Last-Translator: Vatafu Valerica \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "" #: dbgmainwnd.cpp:71 msgid "active" msgstr "activ" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Breakpoints" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Deschide sursa..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Executabil..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Executabil..." #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Breakpoints" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Ruleaz" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Pas &簾nauntru" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Pas &deasupra" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Pas 簾n a&far" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Ruleaz la &cursor" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Break" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumente..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Seteaz/terge &Breakpoint" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Seteaz breakpoint-ul &temporar" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&Activeaz/Dezactiveaz breakpoint" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "'%1' nu exist ca fiier" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Program output" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Deschide un fiier surs" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Deschide un fiier surs" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Selecteaz programul pentru debug" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Selecteaz programul pentru debug" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Nu pot porni debugger-ul." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&Lista..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 #, fuzzy msgid "&Terminal for program output:" msgstr ": Program output" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr "" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 msgid "Register" msgstr "" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Loca籟ia" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr "Adaug" #: watchwindow.cpp:18 msgid " Del " msgstr " terge " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "E&xecutarea" #: winstack.cpp:384 msgid ": Search" msgstr "" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "" #: winstack.cpp:393 msgid "&Forward" msgstr "" #: winstack.cpp:395 msgid "&Backward" msgstr "" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Breakpoint" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Analizeaz Codul" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Fereastra" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Analizeaz Codul" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "E&xecutarea" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Breakpoint" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Lista..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argumentele programului" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumente..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Ruleaz %1 cu aceste argumente:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Mai mult..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #~ msgid "Toggle &Toolbar" #~ msgstr "Toggle &Toolbar" #~ msgid "Toggle &Statusbar" #~ msgstr "Toggle &Statusbar" #~ msgid "Executable" #~ msgstr "Executabil..." #~ msgid "Open a source file" #~ msgstr "Deschide un fiier surs" #~ msgid "Run/Continue" #~ msgstr "Ruleaz/Continu" #~ msgid "Step into" #~ msgstr "Pas 簾nauntru" #~ msgid "Step over" #~ msgstr "Pas 簾nafar" #~ msgid "Step out" #~ msgstr "Pas 簾n afar" #~ msgid "Breakpoint" #~ msgstr "Breakpoint" kdbg-2.5.5/po/ru.po000066400000000000000000000732151247243200200140420ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999, 2013. # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-16 16:29+0100\n" "PO-Revision-Date: 2013-03-16 18:38+0100\n" "Last-Translator: Ilmar Habibulin \n" "Language-Team: ru@li.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "&郕郅邽" #: brkpt.cpp:181 msgid "&Enable" msgstr "&郕郅邽" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": 苺郅郋赲郇訄 郋郕訄 郋訄郇郋赲訄" #: dbgmainwnd.cpp:71 msgid "active" msgstr "訄郕邽赲郇邿" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "苤迮郕" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "郋郕訄郅郇迮 郈迮迮邾迮郇郇迮" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "迮迮邾迮郇郇訄" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "苤郈邽郋郕 郇訄訇郅迡迮郇邽邿" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "迮迣邽" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "苠郋郕邽 郋訄郇郋赲訄" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "赲郋迡" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "郋郋郕邽" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "訄邾" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&郕 邽郋迡郇邿 迮郕..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&迮迮郱訄迣郱邽 邽郋迡郇邿 迮郕" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&郈郋郅郇迮邾邿 邾郋迡郅..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "郋&郅迮迡郇邽迮 訄邿郅" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&訇訄郱 郈訄邾邽..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "訄訄邾迮 郈&郋迣訄邾邾..." #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "郅郋訇訄郅郇迮 &訄訄邾迮..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "郋迡郇邿 &迮郕" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "苤迮&郕" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "&郋郕訄郅郇迮 郈迮迮邾迮郇郇迮" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "&訄訇郅迡訄迮邾迮 赲訄迠迮郇邽" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "&迮迣邽" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "&苠郋郕邽 郋訄郇郋赲訄" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "&郋郋郕邽" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "&赲郋迡" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "&訄邾" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "訄郈邽" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "虼訄迣 &赲郇" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "虼訄迣 &迮迮郱" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "虼訄迣 &邽郱郇邽" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "郈郋郅郇 迡郋 &郕郋訄" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "虼訄迣 郋 赲&郋迡郋邾 赲 邽郇郕邽" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "虼訄迣 赲 郋&訇郋迡 邽郇郕邽邽" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "&苺訄郇郋赲邽 邽郕 郕郋邾訄郇迡 郇訄 迮郕 郋郕" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&邽郋訄郇郋赲邽" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&訄郇郋赲" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "迮迮&郱訄郈郕" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "郋迡&郋迮迡邽郇迮郇邽迮..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&迣邾迮郇..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "苺訄郇郋赲邽/苤郇 &郋郕 郋訄郇郋赲訄" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "苺訄郇郋赲邽 &赲迮邾迮郇郇 郋郕 郋訄郇郋赲訄" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&郕郅/郕郅 郋郕 郋訄郇郋赲訄" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "郋訇訄赲邽 郇訄訇郅迡迮郇邽迮" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "郱邾迮郇邽" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "迮迮郱訄郈邽" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "訇訄郱 郈訄邾邽 郈郋迮訄" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%s' 郇迮 訄邿郅 邽郅邽 郇迮 迮赲迮" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "迮 郱郇訄 郕訄郕 郋郅訄迠邽赲訄 郈郋迣訄邾邾 郇訄 郱郕迮 `%1'" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" "迮 迡訄郅郋 郱訄郈邽 郈郋迮 郋郅訄迡邽郕訄.\n" "郋迠訄郅邿訄, 郱訄郕郋邿迮 KDbg 邽 訄郇邽迮 郈郋訇郅迮邾." #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": 郅郋訇訄郅郇迮 郈訄訄邾迮" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "郅訄迡邽郕" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "訄郱郇郋迮" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": 赲郋迡 郈郋迣訄邾邾" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|迮 訄邿郅 邽郋迡郇邽郕郋赲\n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|郋迡郇迮 迮郕\n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|訄迣郋郅郋赲郋郇迮 訄邿郅\n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|迮 訄邿郅" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "郕" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "訇迮邽迮 邽郈郋郅郇迮邾邿 邾郋迡郅 迡郅 郋郅訄迡郕邽" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "訇迮邽迮 郋訄郇迮郇郇邿 郋訇訄郱 郈訄邾邽 郈郋迮訄" #: debugger.cpp:681 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 郇迮郋迠邽迡訄郇郇郋 郱訄赲迮邽郅\n" "迮迮郱訄郈邽迮 迮邽 (郇訄郈邽邾迮, 迮迮郱 苳訄邿郅|郈郋郅郇迮邾邿 邾郋迡郅)." #: debugger.cpp:872 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" " 郈訄訄邾迮訄 郈郋迣訄邾邾 郕訄郱訄郇 郅迮迡邽邿 郋郅訄迡邽郕:\n" "%1\n" "郋郅迠郇訄 郅邽 邽郈郋郅郱郋赲訄 訄 郕郋邾訄郇迡訄?" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:314 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "郇訄迮郇邽迮" #: gdbdriver.cpp:922 msgid "" msgstr "<訄郇郋郇邽邾郇訄 郕訄 邽郅邽 郋訇迮迡邽郇迮郇邽迮>" #: gdbdriver.cpp:1569 msgid "" msgstr "<郋訄郅郇迮 郅迮邾迮郇 邾訄邽赲訄 郕>" #: gdbdriver.cpp:2221 xsldbgdriver.cpp:1288 msgid "New working directory: " msgstr "郋赲訄 訄訇郋訄 迡邽迮郕郋邽: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "郅訄迡邽郕" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "郅訄迡郕訄 XSLT" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "郈郈 迮迣邽郋赲 邽 郋邾訄邽郋赲訄郇邽迮" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "迮迮郇郋 郇訄 KDE4" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "迠郇訄郅 赲郱訄邽邾郋迡迮邿赲邽 郋郅訄迡邽郕郋邾" #: main.cpp:45 msgid "remote debugging via " msgstr "迡訄郅郇郇訄 郋郅訄迡郕訄 迮迮郱 " #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "郕訄迠邽迮 郱郕: C, XSLT" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "邽郈郋郅郱郋赲訄 郱郕 XSLT (訄迮郅郋)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "郕訄迠邽迮 訄迣邾迮郇 郋郅訄迠邽赲訄迮邾郋邿 郈郋迣訄邾邾" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "郕訄迠邽迮 PID 郈郋迮訄 迡郅 郋郅訄迡郕邽" #: main.cpp:50 msgid "path of executable to debug" msgstr "郈 邽郈郋郅郇迮邾郋迣郋 邾郋迡郅 迡郅 郋郅訄迡郕邽" #: main.cpp:51 msgid "a core file to use" msgstr "邽郈郋郅郱郋赲訄 迡訄邾郈 郈訄邾邽" #: main.cpp:114 msgid "Cannot start debugger." msgstr "迮赲郋郱邾郋迠郇郋 郱訄郈邽 郋郅訄迡邽郕." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "迡迮" #: memwindow.cpp:59 msgid "B&ytes" msgstr "&訄邿" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "苤郅郋赲訄 (&2 訇訄邿訄)" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "赲郋邿郇迮 郅郋赲訄 (&4 訇訄邿訄)" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "苺迮赲迮郇郇迮 郅郋赲訄 (&8 訇訄邿)" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "&虼迮郇訄迡訄迮邽郇郋迮" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "迮邽郇郋迮 郋 &郱郇訄郕郋邾" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "迮邽郇郋迮 &訇迮郱 郱郇訄郕訄" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "&郋邾迮邽郇郋迮" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "&赲郋邽郇郋迮" #: memwindow.cpp:78 msgid "&Addresses" msgstr "&迡迮訄" #: memwindow.cpp:80 msgid "&Character" msgstr "&苤邽邾赲郋郅" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "苤 郈郅訄赲訄迮邿 &郱訄郈郋邿" #: memwindow.cpp:84 msgid "&Strings" msgstr "&苤郋郕邽" #: memwindow.cpp:86 msgid "&Instructions" msgstr "&郇郕邽邽" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "訇迮邽迮 訄邿郅 訄迣邾迮郇 郈郋迣訄邾邾" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "訇迮邽迮 郈訄郈郕 訄迣邾迮郇 郈郋迣訄邾邾" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "訄郕 赲郱赲訄 &GDB - 郋訄赲迮 郈邾, 郋訇 邽郈郋郅郱郋赲訄\n" "赲訄邽訄郇 郈郋 邾郋郅訄郇邽 邽郱 迣郅郋訇訄郅郇 郈訄訄邾迮郋赲:" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "&迮郱 赲赲郋迡訄/赲赲郋迡訄" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "苠郋郅郕郋 赲&赲郋迡, 郈郋訄 邾郅邽 迮邾邽郇訄郅訄" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "&郋郅郇訄 邾郅邽 迮邾邽郇訄郅訄" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1: 訄訄邾迮 %2" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "郅 赲郋郱赲訄訄 郱郇訄迮郇邽邿 郈郋-邾郋郅訄郇邽, 郋邽邽迮 郈郋郅." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "訄郕 赲郱赲訄 &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T 訇迡迮 郱訄邾迮郇迮郇郋 郇訄 郋郕 郱訄迣郋郅郋赲郕訄,\n" "%C 訇迡迮 郱訄邾迮郇迮郇郋 郕邽郈郋邾 郇訄 Bourne shell, 郕郋郋邿\n" "訇迡迮 迡迮迠訄 迮邾邽郇訄郅郇郋迮 郋郕郇郋 郋郕邾." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "郋迣訄邾邾訄 &迮邾邽郇訄郅訄 迡郅 赲赲郋迡訄:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "&郋郕訄郱訄 郋郕郇郋 郈邽 郋訄郇郋赲郕迮 郈郋迣訄邾邾" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "迮邾 迡郋 &郕邽 郋郕郇訄 (赲 邾邽郅郅邽迮郕郇迡訄):" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "訄郱邾迮 &訄訇郅邽邽 (赲 邽邾赲郋郅訄):" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "訄郕訄 迡郅 &邽郋迡郇 迮郕郋赲:" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "訄郕訄 迡郅 &郱訄迣郋郅郋赲郋郇 訄邿郅郋赲:" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": 郋迡郋迮迡邽郇邽 郕 郈郋迮" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "苺郕訄迠邽迮 郇郋邾迮 郈郋迮訄: 郕 郕郋郋郋邾 訇迡迮邾 郈郋迡郋迮迡邽郇:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "邾迮郇訄" #: regwnd.cpp:73 msgid "&GDB default" msgstr "苺邾郋郅訄郇邽 &GDB" #: regwnd.cpp:76 msgid "&Decimal" msgstr "迮&邽郇郋迮" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "迮迮赲迮郇郇郋迮 (&e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "迮迮赲迮郇郇郋迮 (&f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "&迮迮赲迮郇郇郋迮 (g)" #: regwnd.cpp:416 msgid "Register" msgstr "迮迣邽" #: regwnd.cpp:418 msgid "Decoded value" msgstr "迮郕郋迡邽郋赲訄郇郇郋迮 郱郇訄迮郇邽迮" #: regwnd.cpp:434 msgid "GP and others" msgstr "GP 邽 迡迣邽迮" #: regwnd.cpp:436 msgid "Flags" msgstr "苳郅訄迣邽" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "苤迮迣邾迮郇 x86/x87" #: threadlist.cpp:42 msgid "Thread ID" msgstr "ID 郈郋郋郕訄" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "訄郈郋郅郋迠迮郇邽迮" #: ttywnd.cpp:214 msgid "&Clear" msgstr "&邽邽" #: watchwindow.cpp:17 msgid " Add " msgstr " 郋訇訄赲邽 " #: watchwindow.cpp:18 msgid " Del " msgstr " 苺迡訄郅邽 " #: watchwindow.cpp:19 msgid "Expression" msgstr "訄迠迮郇邽迮" #: winstack.cpp:382 msgid ": Search" msgstr ": 郋邽郕" #: winstack.cpp:389 msgid "&Case sensitive" msgstr "&苺邽赲訄 迮迣邽" #: winstack.cpp:391 msgid "&Forward" msgstr "&迮迮訄迡迮訄邽" #: winstack.cpp:393 msgid "&Backward" msgstr "&訄郱訄迡" #: winstack.cpp:394 msgid "Close" msgstr "訄郕" #: xsldbgdriver.cpp:1386 msgid "No memory dump available" msgstr "迮 迡訄邾郈訄 郈訄邾邽" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "苳郋邾訄" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "郋郈訄迡訄郇邽" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "迣郇郋邽郋赲訄" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "苺郅郋赲邽迮" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "郋訇訄赲邽 &郋郕 郋訄郇郋赲訄" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "郋訇訄赲邽 郋郕 &郇訄訇郅迡迮郇邽" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "&苺迡訄郅邽" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&郋邾郋迮 郕郋迡" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&苺郅郋赲郇邿..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "邽訄郅郋迣郋赲郋迮 郋郕郇郋" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&苺郅郋赲邽迮:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "迣郇郋邽郋赲訄 &郅迮迡迮迮 郈郋郈訄迡訄郇邽迮:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "郇迮 邽迣郇郋邽郋赲訄" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 msgid "&File" msgstr "&苳訄邿郅" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 msgid "&View" msgstr "&邽迡" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&郈郋郅郇迮郇邽迮" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&苠郋郕邽 郋訄郇郋赲訄" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 msgid "&Settings" msgstr "&訄郋邿郕訄" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "迣邾迮郇 郈郋迣訄邾邾" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "&迣邾迮郇" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "訄郈邽 %1 郋 郅迮迡邽邾邽 訄迣邾迮郇訄邾邽:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" "苺郕訄迠邽迮 訄迣邾迮郇 郈郋迣訄邾邾 迡郅 郋迣郋 迮訄郇訄. 郋迠郇郋 赲赲郋迡邽 訄迣邾迮郇 郕訄郕 赲 " "郕郋邾訄郇迡郇郋邿 郋郕迮, 赲 郋邾 邽郅迮 邽郈郋郅郱 郕訄赲郕邽 邽 郈迮迮邾迮郇郇迮 郋郕迠迮郇邽, " "郇訄郈邽邾迮:

    --message '邾 赲: ' $HOME" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "訇迮邽迮 訄邿郅; 郈郋郅郇郋迮 邽邾 訇迡迮 赲訄赲郅迮郇郋 郕郋訄 赲 郈郋郅迮 赲赲郋迡訄." #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "訄赲邽 邽邾 &訄邿郅訄..." #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "訇迮邽迮 郈訄郈郕; 郈郋郅郇邿 郈 訇迡迮 赲訄赲郅迮郇 郕郋訄 赲 郈郋郅迮 赲赲郋迡訄." #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "訄赲邽 邽邾 &郈訄郈郕邽..." #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "&訄訇郋訄 迡邽迮郕郋邽:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "苺郕訄迠邽迮 邽郱郇訄訄郅郇 訄訇郋 迡邽迮郕郋邽 郋郕迡訄 郱訄郈郕訄迮 郈郋迣訄邾邾訄." #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "訇迮邽迮 邽郱郇訄訄郅郇 訄訇郋 迡邽迮郕郋邽 郋郕迡訄 郱訄郈郕訄迮 郈郋迣訄邾邾訄." #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 msgid "&Browse..." msgstr "&訇郱郋..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "&郕迠迮郇邽迮" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "迮迮邾迮郇郇迮 郋郕迠迮郇邽 (觓=郱郇訄迮郇邽迮):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" "虴郋訇 迡郋訇訄赲邽 邽郅邽 邽郱邾迮郇邽 郈迮迮邾迮郇郇 郋郕迠迮郇邽, 郕訄迠邽迮 迮 赲 赲邽迡迮 " "觓=郱郇訄迮郇邽迮 邽 郇訄迠邾邽迮 郱邾迮郇邽." #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" "迮迮邾迮郇郇迮 郋郕迠迮郇邽, 郱訄迡訄郇郇迮 赲 迡郋郈郋郅郇迮郇邽迮 郕 郇訄郅迮迡郋赲訄郇郇邾, " "郈迮迮邽郅迮郇 赲 訄訇郅邽迮. 虴郋訇 迡郋訇訄赲邽 郇郋赲迮 郈迮迮邾迮郇郇迮, 郕訄迠邽迮 邽 赲 赲邽迡迮 <" "tt>觓=郱郇訄迮郇邽迮 邽 郇訄迠邾邽迮 郱邾迮郇邽. 虴郋訇 邽郱邾迮郇邽 郱郇訄迮郇邽迮, " "赲訇迮邽迮 迮迣郋 赲 郈邽郕迮 邽 郇訄迠邾邽迮" "郱邾迮郇邽. 虴郋訇 迡訄郅邽 郈迮迮邾迮郇郇, 赲訇迮邽迮 迮 赲 郈邽郕迮 邽 郇訄迠邾邽迮 " "苺迡訄郅邽. " #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "邾" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" "郋訇訄赲郅迮 赲赲迮迡郇郇 郈迮迮邾迮郇郇 郋郕迠迮郇邽 赲 郈邽郋郕. 郅邽 郈迮迮邾迮郇郇訄 迠迮 " "迮赲迮, 郱郇訄迮郇邽迮 郈迮迮郱訄郈邽赲訄迮." #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "郱邾迮郇邽&" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" "苺迡訄郅迮 赲訇訄郇郇 郈迮迮邾迮郇郇 郋郕迠迮郇邽. 苺郇訄郅迮迡郋赲訄郇郇 郈迮迮邾迮郇郇 迡訄郅邽 " "郇迮郅郱." #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "&苺迡訄郅邽" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "訄訄邾迮 &xsldbg" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "郋迡郋迮迡邽郇邽 郕 郈郋迮" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "&苳邽郅 邽郅邽 PID" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "赲迮迡邽迮 邽邾 邽郅邽 ID 郈郋迮訄, 郋訇 郋邽郅郋赲訄 郈邽郋郕." #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" "

    苤郈邽郋郕 郋迡迮迠邽 赲迮 郱訄郈迮郇郇迮 郈郋迮. 迡郋郅迠郇 赲訇訄 郈郋迮, 郕 " "郕郋郋郋邾 郇迠郇郋 郈郋迡郋迮迡邽郇邽 KDbg. 郈郋郅郱邿迮 郈郋郅迮 苳邽郅 邽郅邽 PID, " "郋訇 郋郕訄邽 郈邽郋郕.

    苠迮郕 赲 郕郋郅郋郇郕迮 郋邾訄郇迡郇訄 郋郕訄 郋訇郇郋, 郇郋 " "郇迮 赲迮迣迡訄, 郋迡迮迠邽 郕郋邾訄郇迡 郱訄郈郕訄 迡訄郇郇郋迣郋 郈郋迮訄. 郋郅郋郇郕訄 PID " "郈郋郕訄郱赲訄迮 ID 郈郋迮訄. 郋郅郋郇郕訄 PPID 郈郋郕訄郱赲訄迮 ID 郋迡邽迮郅郕郋迣郋 " "郈郋迮訄. 迣邽迮 郕郋郅郋郇郕邽 郈郋郕訄郱赲訄 迡郋郈郋郅郇邽迮郅郇 邽郇郋邾訄邽 郋 郈郋迮訄, " "迡郋郈郇 迮迮郱 郕郋邾訄郇迡 ps.

    苤郈邽郋郕 訄赲郋邾訄邽迮郕邽 郇迮 郋訇郇郋赲郅迮." " " "郈郋郅郱邿迮 郕郇郋郈郕 訇郇郋赲邽 迡郅 郋邿 迮郅邽.

    " #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "郋邾訄郇迡郇訄 郋郕訄" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "衪訄 郕郇郋郈郕訄 郋訇郇郋赲郅迮 郈邽郋郕 郈郋迮郋赲." #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "&訇郇郋赲邽" #, fuzzy #~ msgid "Source" #~ msgstr "&迮迮郱訄迣郱邽 邽郋迡郇邿 迮郕" #~ msgid "Toggle &Toolbar" #~ msgstr "郕郅/郕郅 郈訄郇迮郅 &邽郇邾迮郇郋赲" #~ msgid "Toggle &Statusbar" #~ msgstr "郕郅/郕郅 郈訄郇迮郅 &郋郋郇邽" #~ msgid "Executable" #~ msgstr "郈郋郅郇迮邾邿 邾郋迡郅" #~ msgid "Open a source file" #~ msgstr "郕 訄邿郅 邽郋迡郇 迮郕郋赲" #~ msgid "Reload source file" #~ msgstr "迮迮郱訄迣郱邽 訄邿郅 邽郋迡郇 迮郕郋赲" #~ msgid "Run/Continue" #~ msgstr "訄郈邽/郋迡郋郅迠邽" #~ msgid "Step into" #~ msgstr "虼訄迣 赲郇" #~ msgid "Step over" #~ msgstr "虼訄迣 迮迮郱" #~ msgid "Step out" #~ msgstr "虼訄迣 邽郱郇邽" #~ msgid "Breakpoint" #~ msgstr "苠郋郕訄 郋訄郇郋赲訄" #~ msgid "Search" #~ msgstr "郋邽郕" #, fuzzy #~ msgid "&Font..." #~ msgstr "郕訄..." #, fuzzy #~ msgid "&View mode" #~ msgstr "&郋邾郋迮 郕郋迡" #~ msgid "&Add" #~ msgstr "&郋訇訄赲邽" #~ msgid "&List..." #~ msgstr "苤郈邽郋郕..." #~ msgid "&About" #~ msgstr "& 郈郋迣訄邾邾迮" kdbg-2.5.5/po/sk.po000066400000000000000000000514701247243200200140300ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999 Johannes Sixt # Johannes Sixt , 1999 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:13MDT\n" "Last-Translator: Peter Iv獺nyi \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "" #: dbgmainwnd.cpp:71 msgid "active" msgstr "akt穩vny" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Re禳tart" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Zar獺鱉ky" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Otvori聽 zdroj..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Znovu na穩ta聽 zdroj" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "Spustit&e躂n羸 s繳bor..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Spustite躂n羸 s繳bor" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Re禳tart" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Zar獺鱉ky" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "S&pusti聽" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Krokova聽 &do" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Krokova聽 &nad" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Krokova聽 &za" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Spusti聽 po &kurzor" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Preru禳enie" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Re禳&tart" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "P&ripoji聽..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenty..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Nastavi聽/zmaza聽 &zar獺鱉ku" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Nastavi聽 &doasn繳 zar獺鱉ku" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "Po&voli聽/zak獺za聽 &zar獺鱉ku" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Re禳tart" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' nie je s繳bor alebo neexistuje" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr "" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": V羸stup programu" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Znovu na穩ta聽 zdrojov羸 s繳bor" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Otvori聽 zdrojov羸 s繳bor" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Vyberte, kt. spustite躂n羸 s繳bor chcete debugova聽 " #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Zvoli聽 core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Vyberte, kt. spustite躂n羸 s繳bor chcete debugova聽 " #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Nem繫鱉em spusti聽 debuger." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&H躂ada聽..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" #: prefdebugger.cpp:37 #, fuzzy msgid "&Terminal for program output:" msgstr ": V羸stup programu" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Znovu na穩ta聽 zdrojov羸 s繳bor" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Pripoji聽 k procesu" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "pecifikova聽 proces na pripojenie:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Re禳tart" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Umiestnenie" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Prida聽 " #: watchwindow.cpp:18 msgid " Del " msgstr " Zmaza聽 " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "Spust&enie" #: winstack.cpp:384 msgid ": Search" msgstr ": H躂ada聽" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Rozli禳ova聽 ve躂k矇/mal矇" #: winstack.cpp:393 msgid "&Forward" msgstr "&Vpred" #: winstack.cpp:395 msgid "&Backward" msgstr "V&zad" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Zar獺鱉ka" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Prezrie聽 k籀d" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "" #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Okno" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Prezrie聽 k籀d" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "Spust&enie" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Zar獺鱉ka" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&H躂ada聽..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": argumenty programu" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenty..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Spusti聽 %1 s t羸mito argumentami:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Viac..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Pripoji聽 k procesu" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Znovu na穩ta聽 zdroj" #~ msgid "Toggle &Toolbar" #~ msgstr "Prepn繳聽 panel &n獺strojov" #~ msgid "Toggle &Statusbar" #~ msgstr "Prepn繳聽 &stavov羸 riadok" #~ msgid "Executable" #~ msgstr "Spustite躂n羸 s繳bor" #~ msgid "Open a source file" #~ msgstr "Otvori聽 zdrojov羸 s繳bor" #~ msgid "Reload source file" #~ msgstr "Znovu na穩ta聽 zdrojov羸 s繳bor" #~ msgid "Run/Continue" #~ msgstr "Spusti聽/pokraova聽" #~ msgid "Step into" #~ msgstr "Krokova聽 do" #~ msgid "Step over" #~ msgstr "Krokova聽 cez" #~ msgid "Step out" #~ msgstr "Krokova聽 za" #~ msgid "Breakpoint" #~ msgstr "Zar獺鱉ka" #~ msgid "Search" #~ msgstr "H躂ada聽" kdbg-2.5.5/po/sr.po000066400000000000000000000524401247243200200140350ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # Johannes Sixt , 2000 # Strahinja Radi , 2000. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:14MDT\n" "Last-Translator: Strahinja Radi \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: ENCODING\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Uslovni prekid" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktivan" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Vrednost" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Pokreni ponovo" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Prekidi" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Otvori izvorni kod..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Ponovo uitaj izvorni kod" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&Program..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "Program" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core fajl..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Globalna pode禳avanja..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Prekidi" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&Pokreni" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Kroi &u" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Kroi prek&o" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "Kroi &iz" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "Izvr禳i do &kursora" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "P&rekid" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Po&novo pokreni" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "&Zakai..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argumenti..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "Postavi/oisti p&rekid" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "Pos&tavi privremeni prekid" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "Omogui/on&emogui prekid" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Vrednost" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Pokreni ponovo" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core fajl" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' nije fajl ili ne postoji" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Globalna pode禳avanja" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Izlaz programa" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Ponovo uitaj izvorni kod" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Otvori izvorni kod" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Izaberite program za trebljenje" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "Izaberite core fajl" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 je neoekivano iza禳ao.\n" "Ponovo pokrenite seansu (npr. sa Fajl|Program)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Vrednost" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Novi radni direktorijum: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Izaberite program za trebljenje" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Ne mogu da pokrenem trebilicu." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "Da vratite podraz. pode禳avanja, obri禳ite stavke." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Kako da pokrenem &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T e biti zamenjeno naslovom,\n" "%C e biti zamenjeno skriptom ljuske Bourne koji\n" "dr鱉i terminalski prozor otvoren." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal za izlaz programa:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Ponovo uitaj izvorni kod" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": Zakai za proces" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Unesite broj procesa za zakainjanje:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Pokreni ponovo" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Lokacija" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Dodaj " #: watchwindow.cpp:18 msgid " Del " msgstr " Bri禳i " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "I&zvr禳avanje" #: winstack.cpp:384 msgid ": Search" msgstr ": Pretraga" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&Razlikuj velika i mala slova" #: winstack.cpp:393 msgid "&Forward" msgstr "&Napred" #: winstack.cpp:395 msgid "&Backward" msgstr "&Nazad" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Prolaza" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ignori禳i" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Uslov" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Prekid" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Pregled koda" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Uslovni..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Uslov:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignori禳i sledee prolaze:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "Pr&ozor" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Pregled koda" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "I&zvr禳avanje" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Prekid" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Nai..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Argumenti programa" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argumenti..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "Pokreni %1 sa sledeim argumentima:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Radni direktorijum:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Vi禳e..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Promenljive ljuske (IME=vrednost):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Ime" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Globalna pode禳avanja..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": Zakai za proces" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Ponovo uitaj izvorni kod" #~ msgid "Toggle &Toolbar" #~ msgstr "Ukljui/iskljui alatke" #~ msgid "Toggle &Statusbar" #~ msgstr "Ukljui/iskljui statusnu liniju" #~ msgid "Executable" #~ msgstr "Program" #~ msgid "Open a source file" #~ msgstr "Otvori izvorni kod" #~ msgid "Reload source file" #~ msgstr "Ponovo uitaj izvorni kod" #~ msgid "Run/Continue" #~ msgstr "Pokreni/nastavi" #~ msgid "Step into" #~ msgstr "Kroi u" #~ msgid "Step over" #~ msgstr "Kroi preko" #~ msgid "Step out" #~ msgstr "Kroi iz" #~ msgid "Breakpoint" #~ msgstr "Prekid" #~ msgid "Search" #~ msgstr "Pretraga" kdbg-2.5.5/po/sv.po000066400000000000000000000522341247243200200140420ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998,1999,2000 Johannes Sixt # Johannes Sixt , 2000 # msgid "" msgstr "" "Project-Id-Version: kdbg 1.0.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:15MDT\n" "Last-Translator: rjan Lindbergh \n" "Language-Team: (None)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr "Beroende brytpunkt" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktiv" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "V瓣rde" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Starta om" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "Brytpunkt" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&pnna k瓣lla..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Ladda om k瓣lla" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "K繹rbar..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "K繹rbar" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&Core dump..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Allm瓣nna inst瓣llningar..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 #, fuzzy msgid "&Registers" msgstr "Starta om" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "Brytpunkt" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&K繹r" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "Stega &in" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Stega &繹ver" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "stega u&t" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "K繹r till &mark繹r" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&Bryt" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "&Stoppa" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "St&arta om" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "L&瓣gg till..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Argument..." #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "S瓣tt/rensa &brytpunkt" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "S瓣tt &temopr瓣r brytpunkt" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "&S瓣tt p疇/ st瓣ng av brytpunkt" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "V瓣rde" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Starta om" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "Core dump" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' 瓣r inte n疇gon fil eller s疇 finns den inte" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Allm瓣nna inst瓣llningar" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Programutskrift" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Ladda om k瓣llfilen" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "ppna en k瓣llfil" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "V瓣lj exefil f繹r avlusning" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "V瓣lj core dump" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 avslutades ov瓣ntat.\n" "Starta om programmet (e.g. med Fil|exefil)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "V瓣rde" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Ny arbets katalog:" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "V瓣lj exefil f繹r avlusning" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Kan inte starta avlusaren." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 #, fuzzy msgid "&Strings" msgstr "&S繹k..." #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "F繹r att s瓣tta p疇 dom ordinarie inst瓣llningarna, ta bort texten" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "Hur man anropar &GDB:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T kommer att bytas mot en text\n" "%C kommer att bytas mot ett Bourne skript som\n" "beh疇ller terminalf繹nstret 繹ppet." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "&Terminal f繹r programutskrift:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Ladda om k瓣llfilen" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr "L瓣gg till processen" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "Specifiera processnumret att l瓣gga till" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Starta om" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Plats" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr "L瓣gg till" #: watchwindow.cpp:18 msgid " Del " msgstr " Ta bort " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "K&繹r" #: winstack.cpp:384 msgid ": Search" msgstr ": S繹k" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&G繹r skillnad p疇 sm疇 och stora bokst瓣ver" #: winstack.cpp:393 msgid "&Forward" msgstr "&Fram疇t" #: winstack.cpp:395 msgid "&Backward" msgstr "&Bak疇t" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Tr瓣ffar" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Ingorera" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Vilkor" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&Brytpunkt" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Visa kod" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "Beroende..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Villkor" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "Ignorera &n瓣sta tr瓣ff:" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&F繹nster" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Visa kod" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "K&繹r" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&Brytpunkt" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&S繹k..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr "Program argument" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Argument..." #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "K繹r %1 med dessa argument:" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "Arbets katalog:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Mer..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "Milj繹 variabel (Namn=v瓣rde):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Namn" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Allm瓣nna inst瓣llningar..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr "L瓣gg till processen" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Ladda om k瓣lla" #~ msgid "Toggle &Toolbar" #~ msgstr "S瓣tt p疇 &verktygsraden" #~ msgid "Toggle &Statusbar" #~ msgstr "S瓣tt p疇 &statusraden" #~ msgid "Executable" #~ msgstr "K繹rbar" #~ msgid "Open a source file" #~ msgstr "ppna en k瓣llfil" #~ msgid "Reload source file" #~ msgstr "Ladda om k瓣llfilen" #~ msgid "Run/Continue" #~ msgstr "K繹r/forts瓣tt" #~ msgid "Step into" #~ msgstr "Stig in i" #~ msgid "Step over" #~ msgstr "Stega 繹ver" #~ msgid "Step out" #~ msgstr "Stega ut" #~ msgid "Breakpoint" #~ msgstr "Brytpunkt" #~ msgid "Search" #~ msgstr "S繹k" kdbg-2.5.5/po/tr.po000066400000000000000000000530771247243200200140450ustar00rootroot00000000000000# KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # Johannes Sixt , 2000 # KDE TRKELET襤RME PROJES襤. # Adem GUNES , 2000. # msgid "" msgstr "" "Project-Id-Version: kdbg\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2002-03-03 16:16MDT\n" "Last-Translator: Serdar Cevher \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Generator: KBabel 0.9.5\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "" #: brkpt.cpp:181 msgid "&Enable" msgstr "" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ": Koullu b覺rakma" #: dbgmainwnd.cpp:71 msgid "active" msgstr "aktif" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "" #: dbgmainwnd.cpp:82 #, fuzzy msgid "Variable" msgstr "Deer" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "" #: dbgmainwnd.cpp:87 #, fuzzy msgid "Registers" msgstr "Yeniden balat" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "B覺rakma noktalar覺" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "&Kayna覺 A癟..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "&Kayna覺 Yeniden Y羹kle" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "&al覺t覺r覺labilir..." #: dbgmainwnd.cpp:261 #, fuzzy msgid "Recent E&xecutables" msgstr "al覺t覺r覺labilir" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "&I癟i at..." #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "" #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "&Genel Se癟enekler..." #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "" #: dbgmainwnd.cpp:285 #, fuzzy msgid "&Breakpoints" msgstr "B覺rakma noktalar覺" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "&al覺t覺r" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "襤癟&e ad覺m" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "Biten &ad覺m" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "D覺a ad覺m" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "襤&mlece kadar 癟al覺t覺r" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "&B覺rak" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "Yeniden &balat" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "襤&litir..." #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "&Arg羹manlar" #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "B覺rakma noktalar覺 Koy/Kald覺r" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "&Ge癟ici b覺rakma noktas覺 koy" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "B覺rakma noktas覺n覺 etkinletir/etkinlikten 癟覺kart" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "" #: dbgmainwnd.cpp:351 #, fuzzy msgid "Edit Value" msgstr "Deer" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "Yeniden balat" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "襤癟i at" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1' dosya deil veya yok" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ": Genel se癟enekler" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 msgid "Debugger" msgstr "" #: dbgmainwnd.cpp:842 msgid "Miscellaneous" msgstr "" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ": Program 癟覺kt覺s覺" #: dbgmainwnd.cpp:1070 #, fuzzy msgid "|All source files\n" msgstr "Kaynak dosyas覺n覺 yeniden y羹kle" #: dbgmainwnd.cpp:1071 #, fuzzy msgid "|Source files\n" msgstr "Kaynak dosyas覺 a癟" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "Hatalar覺 ay覺klanacak 癟al覺t覺r覺labilir dosyay覺 se癟in" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "At覺lacak i癟i se癟in" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "%1 beklenmedik ekilde sonland覺.\n" "Oturumu yeniden balat覺n (繹r., Dosya|al覺t覺r覺labilir)." #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "Deer" #: gdbdriver.cpp:911 msgid "" msgstr "" #: gdbdriver.cpp:1526 msgid "" msgstr "" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "Yeni 癟al覺ma dizini: " #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "" #: main.cpp:45 msgid "remote debugging via " msgstr "" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "" #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "" #: main.cpp:50 #, fuzzy msgid "path of executable to debug" msgstr "Hatalar覺 ay覺klanacak 癟al覺t覺r覺labilir dosyay覺 se癟in" #: main.cpp:51 msgid "a core file to use" msgstr "" #: main.cpp:114 msgid "Cannot start debugger." msgstr "Hata ay覺klay覺c覺 balat覺lam覺yor." #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "" #: memwindow.cpp:59 msgid "B&ytes" msgstr "" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "" #: memwindow.cpp:78 msgid "&Addresses" msgstr "" #: memwindow.cpp:80 msgid "&Character" msgstr "" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "" #: memwindow.cpp:84 msgid "&Strings" msgstr "" #: memwindow.cpp:86 msgid "&Instructions" msgstr "" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "ntan覺ml覺 ayarlara d繹nmek i癟in, girileri temizleyiniz." #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "&GDB nas覺l balat覺l覺r:" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T'nin yerine bir bal覺k konulacak,\n" "%C bir Bourne kabuk betiiyle deitirilecek,\n" "b繹ylece u癟birim penceresi a癟覺k kalacak." #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "Program 癟覺kt覺s覺 i癟in &Terminal:" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "" #: prefmisc.cpp:37 #, fuzzy msgid "File filter for &source files:" msgstr "Kaynak dosyas覺n覺 yeniden y羹kle" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "" #: procattach.cpp:290 msgid ": Attach to process" msgstr ": S羹rece ilitir" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "襤litirilecek s羹re癟 numaras覺n覺 belirtin:" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "" #: regwnd.cpp:76 msgid "&Decimal" msgstr "" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "" #: regwnd.cpp:416 #, fuzzy msgid "Register" msgstr "Yeniden balat" #: regwnd.cpp:418 msgid "Decoded value" msgstr "" #: regwnd.cpp:434 msgid "GP and others" msgstr "" #: regwnd.cpp:436 msgid "Flags" msgstr "" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "" #: threadlist.cpp:42 msgid "Thread ID" msgstr "" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "Konum" #: ttywnd.cpp:214 msgid "&Clear" msgstr "" #: watchwindow.cpp:17 msgid " Add " msgstr " Ekle " #: watchwindow.cpp:18 msgid " Del " msgstr " Sil " #: watchwindow.cpp:19 #, fuzzy msgid "Expression" msgstr "&al覺t覺rma" #: winstack.cpp:384 msgid ": Search" msgstr ": Ara" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "&B羹y羹k/k羹癟羹k harfe duyarl覺" #: winstack.cpp:393 msgid "&Forward" msgstr "襤&leri" #: winstack.cpp:395 msgid "&Backward" msgstr "&Geri" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "Vurular" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "Yoksay" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "Koul" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 #, fuzzy msgid "Add &Breakpoint" msgstr "&B覺rakma noktas覺" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "&Kodu G繹ster" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "&Koullu..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "&Koul" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "&Sonraki vurular覺 yoksay" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "&Pencere" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "&Kodu G繹ster" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "&al覺t覺rma" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "&B覺rakma noktas覺" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "&Bul..." #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 #, fuzzy msgid "Program Arguments" msgstr ": Program arg羹manlar覺" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 #, fuzzy msgid "&Arguments" msgstr "&Arg羹manlar" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, fuzzy, no-c-format msgid "Run %1 with these arguments:" msgstr "%1'i bu arg羹manlarla 癟al覺t覺r" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 #, fuzzy msgid "&Working Directory" msgstr "al覺ma dizini:" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 #, fuzzy msgid "&Browse..." msgstr "&Dier..." #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 #, fuzzy msgid "Environment variables (NAME=value):" msgstr "evre deikenleri (AD=deer):" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "Ad" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 #, fuzzy msgid "&xsldbg Options" msgstr "&Genel Se癟enekler..." #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 #, fuzzy msgid "Attach to Process" msgstr ": S羹rece ilitir" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "" #, fuzzy #~ msgid "Source" #~ msgstr "&Kayna覺 Yeniden Y羹kle" #~ msgid "Toggle &Toolbar" #~ msgstr "&Ara癟 ubuuna Ge癟" #~ msgid "Toggle &Statusbar" #~ msgstr "&Durum ubuuna Ge癟" #~ msgid "Executable" #~ msgstr "al覺t覺r覺labilir" #~ msgid "Open a source file" #~ msgstr "Kaynak dosyas覺 a癟" #~ msgid "Reload source file" #~ msgstr "Kaynak dosyas覺n覺 yeniden y羹kle" #~ msgid "Run/Continue" #~ msgstr "al覺t覺r/Devam et" #~ msgid "Step into" #~ msgstr "襤癟e ad覺m" #~ msgid "Step over" #~ msgstr "Biten ad覺m" #~ msgid "Step out" #~ msgstr "D覺a ad覺m" #~ msgid "Breakpoint" #~ msgstr "B覺rakma noktas覺" #~ msgid "Search" #~ msgstr "Ara" kdbg-2.5.5/po/zh_CN.po000066400000000000000000000571571247243200200144240ustar00rootroot00000000000000# translation of zh_CN.po to # KDbg - Debugger GUI for gdb # Copyright (C) 1998-2000 Johannes Sixt # # Johannes Sixt , 2000. # Moligaloo , 2008. msgid "" msgstr "" "Project-Id-Version: zh_CN\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-03-01 22:35+0100\n" "PO-Revision-Date: 2008-04-18 18:27+0800\n" "Last-Translator: Moligaloo \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" #. i18n: file: brkptbase.ui:85 #. i18n: ectx: property (text), widget (QPushButton, btEnaDis) #: brkpt.cpp:179 rc.cpp:30 msgid "&Disable" msgstr "舐" #: brkpt.cpp:181 msgid "&Enable" msgstr "蝳" #: brkpt.cpp:363 msgid ": Conditional breakpoint" msgstr ":∩辣剔" #: dbgmainwnd.cpp:71 msgid "active" msgstr "瞈瘣" #: dbgmainwnd.cpp:78 msgid "Stack" msgstr "" #: dbgmainwnd.cpp:81 msgid "Locals" msgstr "撅典" #: dbgmainwnd.cpp:82 msgid "Variable" msgstr "" #: dbgmainwnd.cpp:84 msgid "Watches" msgstr "閫" #: dbgmainwnd.cpp:87 msgid "Registers" msgstr "撖摮" #: dbgmainwnd.cpp:90 msgid "Breakpoints" msgstr "剔" #: dbgmainwnd.cpp:93 pgmsettings.cpp:108 msgid "Output" msgstr "颲" #: dbgmainwnd.cpp:96 msgid "Threads" msgstr "蝥輻" #: dbgmainwnd.cpp:99 msgid "Memory" msgstr "摮" #: dbgmainwnd.cpp:251 msgid "&Open Source..." msgstr "撘皞隞..." #: dbgmainwnd.cpp:253 msgid "&Reload Source" msgstr "頧賢交蝔摨" #: dbgmainwnd.cpp:255 msgid "&Executable..." msgstr "舀扯蝔摨..." #: dbgmainwnd.cpp:261 msgid "Recent E&xecutables" msgstr "餈舀扯蝔摨" #: dbgmainwnd.cpp:262 msgid "&Core dump..." msgstr "詨頧砍" #: dbgmainwnd.cpp:267 msgid "This &Program..." msgstr "餈銝芰摨..." #: dbgmainwnd.cpp:269 msgid "&Global Options..." msgstr "典憿" #: dbgmainwnd.cpp:279 msgid "Source &code" msgstr "皞隞" #: dbgmainwnd.cpp:281 msgid "Stac&k" msgstr "" #: dbgmainwnd.cpp:282 msgid "&Locals" msgstr "撅典" #: dbgmainwnd.cpp:283 msgid "&Watched expressions" msgstr "鋡怎閫銵刻噢撘" #: dbgmainwnd.cpp:284 msgid "&Registers" msgstr "撖摮" #: dbgmainwnd.cpp:285 msgid "&Breakpoints" msgstr "剔" #: dbgmainwnd.cpp:286 msgid "T&hreads" msgstr "蝥輻" #: dbgmainwnd.cpp:287 msgid "&Output" msgstr "颲" #: dbgmainwnd.cpp:288 msgid "&Memory" msgstr "摮" #: dbgmainwnd.cpp:298 msgid "&Run" msgstr "扯" #: dbgmainwnd.cpp:302 msgid "Step &into" msgstr "頝喳" #: dbgmainwnd.cpp:306 msgid "Step &over" msgstr "頝唾" #: dbgmainwnd.cpp:310 msgid "Step o&ut" msgstr "頝喳" #: dbgmainwnd.cpp:314 msgid "Run to &cursor" msgstr "餈銵啣" #: dbgmainwnd.cpp:318 msgid "Step i&nto by instruction" msgstr "頝喳亙唳蝻隞" #: dbgmainwnd.cpp:322 msgid "Step o&ver by instruction" msgstr "隞瘙蝻隞支葉頝喳" #: dbgmainwnd.cpp:326 msgid "&Program counter to current line" msgstr "啣銵蝔摨霈⊥" #: dbgmainwnd.cpp:329 msgid "&Break" msgstr "剖" #: dbgmainwnd.cpp:331 msgid "&Kill" msgstr "甇" #: dbgmainwnd.cpp:333 msgid "Re&start" msgstr "" #: dbgmainwnd.cpp:335 msgid "A&ttach..." msgstr "餈" #: dbgmainwnd.cpp:337 msgid "&Arguments..." msgstr "" #: dbgmainwnd.cpp:341 msgid "Set/Clear &breakpoint" msgstr "霈曄蔭/皜斗剔" #: dbgmainwnd.cpp:343 msgid "Set &temporary breakpoint" msgstr "霈曄蔭銝湔嗆剔" #: dbgmainwnd.cpp:345 msgid "&Enable/Disable breakpoint" msgstr "舐/蝳冽剔" #: dbgmainwnd.cpp:349 msgid "Watch Expression" msgstr "閫銵刻噢撘" #: dbgmainwnd.cpp:351 msgid "Edit Value" msgstr "蝻颲" #: dbgmainwnd.cpp:379 msgid "Restart" msgstr "" #: dbgmainwnd.cpp:380 msgid "Core dump" msgstr "詨頧砍" #: dbgmainwnd.cpp:623 msgid "`%1' is not a file or does not exist" msgstr "`%1'銝臭銝芣隞嗆隞嗡摮" #: dbgmainwnd.cpp:691 msgid "Don't know how to debug language `%1'" msgstr "銝質霂霂剛:%1" #: dbgmainwnd.cpp:704 msgid "" "Could not start the debugger process.\n" "Please shut down KDbg and resolve the problem." msgstr "瘜臬刻霂刻蝔" #: dbgmainwnd.cpp:826 msgid ": Global options" msgstr ":典憿" #: dbgmainwnd.cpp:841 pgmsettings.cpp:107 #, fuzzy msgid "Debugger" msgstr "靚霂" #: dbgmainwnd.cpp:842 #, fuzzy msgid "Miscellaneous" msgstr "憿" #: dbgmainwnd.cpp:980 msgid ": Program output" msgstr ":蝔摨颲" #: dbgmainwnd.cpp:1070 msgid "|All source files\n" msgstr "|皞隞跚n" #: dbgmainwnd.cpp:1071 msgid "|Source files\n" msgstr "|皞隞跚n" #: dbgmainwnd.cpp:1072 msgid "|Header files\n" msgstr "|憭湔隞跚n" #: dbgmainwnd.cpp:1073 msgid "*|All files" msgstr "*|隞" #: dbgmainwnd.cpp:1165 msgid "Open" msgstr "" #: dbgmainwnd.cpp:1183 msgid "Select the executable to debug" msgstr "抵靚霂舀扯蝔摨" #: dbgmainwnd.cpp:1196 msgid "Select core dump" msgstr "拇詨頧砍" #: debugger.cpp:650 msgid "" "%1 exited unexpectedly.\n" "Restart the session (e.g. with File|Executable)." msgstr "" "gdb憸銝剜迫\n" "霂琿臭霂嚗餈隞銝%1" #: debugger.cpp:841 msgid "" "The settings for this program specify the following debugger command:\n" "%1\n" "Shall this command be used?" msgstr "" "餈銝芰摨霈曄蔭摰鈭銝Y靚霂賭誘嚗\n" "%1 雿輻刻銝芸賭誘嚗" #. i18n: file: pgmargsbase.ui:234 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: exprwnd.cpp:312 regwnd.cpp:417 rc.cpp:127 msgid "Value" msgstr "" #: gdbdriver.cpp:911 msgid "" msgstr "<踹蝏雿梁其>" #: gdbdriver.cpp:1526 msgid "" msgstr "<鋡急嗆啁憸憭∠>" #: gdbdriver.cpp:2084 xsldbgdriver.cpp:1287 msgid "New working directory: " msgstr "啁撌乩桀嚗" #: main.cpp:23 msgid "KDbg" msgstr "" #: main.cpp:25 msgid "A Debugger" msgstr "銝銝芸箔GDB曉耦Z霂" #: main.cpp:27 msgid "(c) 1998-2015 Johannes Sixt" msgstr "" #: main.cpp:31 msgid "Johannes Sixt" msgstr "" #: main.cpp:32 msgid "Keith Isdale" msgstr "" #: main.cpp:33 msgid "XSLT debugging" msgstr "XSLT靚霂" #: main.cpp:35 msgid "Daniel Kristjansson" msgstr "" #: main.cpp:36 msgid "Register groups and formatting" msgstr "撖摮函銝澆" #: main.cpp:38 msgid "David Edmundson" msgstr "" #: main.cpp:39 msgid "KDE4 porting" msgstr "" #: main.cpp:44 msgid "transcript of conversation with the debugger" msgstr "銝靚霂其霂舀" #: main.cpp:45 msgid "remote debugging via " msgstr "餈餈銵餈蝔靚霂" #: main.cpp:46 msgid "specify language: C, XSLT" msgstr "摰霂剛嚗C,XSLT " #: main.cpp:47 msgid "use language XSLT (deprecated)" msgstr "雿輻刻祗閮XSLT(餈)" #: main.cpp:48 msgid "specify arguments of debugged executable" msgstr "" #: main.cpp:49 msgid "specify PID of process to debug" msgstr "摰閬靚霂餈蝔PID" #: main.cpp:50 msgid "path of executable to debug" msgstr "舀扯蝔摨頝臬" #: main.cpp:51 msgid "a core file to use" msgstr "閬雿輻函詨頧砍" #: main.cpp:114 msgid "Cannot start debugger." msgstr "銝賢臬刻霂" #. i18n: file: brkptbase.ui:37 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: memwindow.cpp:32 rc.cpp:9 msgid "Address" msgstr "啣" #: memwindow.cpp:59 msgid "B&ytes" msgstr "摮" #: memwindow.cpp:61 msgid "Halfwords (&2 Bytes)" msgstr "摮" #: memwindow.cpp:63 msgid "Words (&4 Bytes)" msgstr "摮" #: memwindow.cpp:65 msgid "Giantwords (&8 Bytes)" msgstr "摮" #: memwindow.cpp:68 regwnd.cpp:77 msgid "He&xadecimal" msgstr "剛" #: memwindow.cpp:70 msgid "Signed &decimal" msgstr "蝚血瑟湔" #: memwindow.cpp:72 msgid "&Unsigned decimal" msgstr "蝚血瑟湔" #: memwindow.cpp:74 regwnd.cpp:75 msgid "&Octal" msgstr "怨" #: memwindow.cpp:76 regwnd.cpp:74 msgid "&Binary" msgstr "鈭餈" #: memwindow.cpp:78 msgid "&Addresses" msgstr "啣" #: memwindow.cpp:80 msgid "&Character" msgstr "摮蝚" #: memwindow.cpp:82 msgid "&Floatingpoint" msgstr "瘚桃寞" #: memwindow.cpp:84 msgid "&Strings" msgstr "摮蝚虫葡" #: memwindow.cpp:86 msgid "&Instructions" msgstr "隞" #: pgmargs.cpp:198 msgid "Select a file name to insert as program argument" msgstr "拐銝芣隞嗅雿銝箇摨" #: pgmargs.cpp:212 msgid "Select a directory to insert as program argument" msgstr "拐銝芰桀雿銝箇摨" #: pgmsettings.cpp:25 msgid "" "How to invoke &GDB - leave empty to use\n" "the default from the global options:" msgstr "" "瑕臬沁DB\n" "暺霈支典憿寧詨" #: pgmsettings.cpp:59 msgid "&No input and output" msgstr "瘝⊥颲亙颲" #: pgmsettings.cpp:63 msgid "&Only output, simple terminal emulation" msgstr "芣颲綽蝞蝏蝡舐璅⊥" #: pgmsettings.cpp:67 msgid "&Full terminal emulation" msgstr "函蝡舀芋" #: pgmsettings.cpp:104 msgid "%1: Settings for %2" msgstr "%1嚗%2霈曄蔭" #: prefdebugger.cpp:20 msgid "To revert to the default settings, clear the entries." msgstr "W暺霈方挽蝵格斗∠" #: prefdebugger.cpp:24 msgid "How to invoke &GDB:" msgstr "瑁沁DB" #: prefdebugger.cpp:31 msgid "" "%T will be replaced with a title string,\n" "%C will be replaced by a Bourne shell script that\n" "keeps the terminal window open." msgstr "" "%T撠隡踵V蛹銝銝芣憸摮蝚虫葡\n" "%C隡踵V蛹鈭銝銝朋ourne shell枯n" "隞乩蝏蝡舐撘" #: prefdebugger.cpp:37 msgid "&Terminal for program output:" msgstr "蝔摨颲箇蝏蝡" #: prefmisc.cpp:23 msgid "&Pop into foreground when program stops" msgstr "敶蝔摨甇X嗅撕亙" #: prefmisc.cpp:28 msgid "Time until window goes &back (in milliseconds):" msgstr "霈⊥塚瘥怎嚗游啁啣" #: prefmisc.cpp:35 msgid "&Tabstop every (characters):" msgstr "瘥銝芸蝚虫渡湧" #: prefmisc.cpp:37 msgid "File filter for &source files:" msgstr "皞隞嗉皛" #: prefmisc.cpp:39 msgid "File filter for &header files:" msgstr "憭湔隞嗉皛" #: procattach.cpp:290 msgid ": Attach to process" msgstr ":餈亙啗蝔" #: procattach.cpp:294 msgid "Specify the process number to attach to:" msgstr "摰閬餈亦餈蝔" #: procattach.cpp:302 msgid "OK" msgstr "" #: procattach.cpp:307 msgid "Cancel" msgstr "" #: regwnd.cpp:73 msgid "&GDB default" msgstr "GDB暺霈" #: regwnd.cpp:76 msgid "&Decimal" msgstr "餈嗆" #: regwnd.cpp:78 msgid "Real (&e)" msgstr "摰(e)" #: regwnd.cpp:79 msgid "Real (&f)" msgstr "摰(f)" #: regwnd.cpp:80 msgid "&Real (g)" msgstr "摰(g)" #: regwnd.cpp:416 msgid "Register" msgstr "撖摮" #: regwnd.cpp:418 msgid "Decoded value" msgstr "蝻" #: regwnd.cpp:434 msgid "GP and others" msgstr "GP嗅" #: regwnd.cpp:436 msgid "Flags" msgstr "敹雿" #: regwnd.cpp:439 msgid "x86/x87 segment" msgstr "x86/x87畾" #: threadlist.cpp:42 msgid "Thread ID" msgstr "蝥輻ID" #. i18n: file: brkptbase.ui:32 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: threadlist.cpp:42 rc.cpp:6 msgid "Location" msgstr "雿蝵" #: ttywnd.cpp:214 msgid "&Clear" msgstr "皜" #: watchwindow.cpp:17 msgid " Add " msgstr "瘛餃" #: watchwindow.cpp:18 msgid " Del " msgstr "" #: watchwindow.cpp:19 msgid "Expression" msgstr "銵刻噢撘" #: winstack.cpp:384 msgid ": Search" msgstr ":蝝" #: winstack.cpp:391 msgid "&Case sensitive" msgstr "箏憭批" #: winstack.cpp:393 msgid "&Forward" msgstr "餈" #: winstack.cpp:395 msgid "&Backward" msgstr "" #: winstack.cpp:396 msgid "Close" msgstr "" #: xsldbgdriver.cpp:1385 msgid "No memory dump available" msgstr "瘝⊥舐函摮" #. i18n: file: brkptbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, BrkPtBase) #: rc.cpp:3 msgid "Form" msgstr "" #. i18n: file: brkptbase.ui:42 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:12 msgid "Hits" msgstr "蝷" #. i18n: file: brkptbase.ui:47 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:15 msgid "Ignore" msgstr "敹賜" #. i18n: file: brkptbase.ui:52 #. i18n: ectx: property (text), widget (QTreeWidget, bpList) #: rc.cpp:18 msgid "Condition" msgstr "嗆" #. i18n: file: brkptbase.ui:64 #. i18n: ectx: property (text), widget (QPushButton, btAddBP) #: rc.cpp:21 msgid "Add &Breakpoint" msgstr "瘛餃剔" #. i18n: file: brkptbase.ui:71 #. i18n: ectx: property (text), widget (QPushButton, btAddWP) #: rc.cpp:24 msgid "Add &Watchpoint" msgstr "瘛餃閫" #. i18n: file: brkptbase.ui:78 #. i18n: ectx: property (text), widget (QPushButton, btRemove) #: rc.cpp:27 msgid "&Remove" msgstr "" #. i18n: file: brkptbase.ui:92 #. i18n: ectx: property (text), widget (QPushButton, btViewCode) #: rc.cpp:33 msgid "&View Code" msgstr "亦隞" #. i18n: file: brkptbase.ui:99 #. i18n: ectx: property (text), widget (QPushButton, btConditional) #: rc.cpp:36 msgid "&Conditional..." msgstr "∩辣..." #. i18n: file: brkptcondition.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, BrkPtCondition) #: rc.cpp:39 msgid "Dialog" msgstr "" #. i18n: file: brkptcondition.ui:27 #. i18n: ectx: property (text), widget (QLabel, label) #: rc.cpp:42 msgid "&Condition:" msgstr "∩辣:" #. i18n: file: brkptcondition.ui:40 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:45 msgid "Ignore &next hits:" msgstr "敹賜乩銝銝芣蝷" #. i18n: file: brkptcondition.ui:50 #. i18n: ectx: property (specialValueText), widget (QSpinBox, ignoreCount) #: rc.cpp:48 msgid "do not ignore" msgstr "" #. i18n: file: kdbgui.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:51 #, fuzzy msgid "&File" msgstr "舐" #. i18n: file: kdbgui.rc:11 #. i18n: ectx: Menu (view) #: rc.cpp:54 #, fuzzy msgid "&View" msgstr "亦隞" #. i18n: file: kdbgui.rc:25 #. i18n: ectx: Menu (execution) #: rc.cpp:57 msgid "E&xecution" msgstr "扯" #. i18n: file: kdbgui.rc:42 #. i18n: ectx: Menu (breakpoint) #: rc.cpp:60 msgid "&Breakpoint" msgstr "剔" #. i18n: file: kdbgui.rc:47 #. i18n: ectx: Menu (settings) #: rc.cpp:63 #, fuzzy msgid "&Settings" msgstr "摮蝚虫葡" #. i18n: file: pgmargsbase.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, PgmArgsBase) #: rc.cpp:66 msgid "Program Arguments" msgstr "蝔摨" #. i18n: file: pgmargsbase.ui:26 #. i18n: ectx: attribute (title), widget (QWidget, argsPage) #: rc.cpp:69 msgid "&Arguments" msgstr "" #. i18n: file: pgmargsbase.ui:34 #. i18n: ectx: property (text), widget (QLabel, labelArgs) #: rc.cpp:73 #, no-c-format msgid "Run %1 with these arguments:" msgstr "隞乩啗銵%1" #. i18n: file: pgmargsbase.ui:47 #. i18n: ectx: property (whatsThis), widget (QLineEdit, programArgs) #: rc.cpp:76 msgid "" "Specify the arguments with which the program shall be invoked for this " "debugging session. You specify the arguments just as you would on the " "command line, that is, you can even use quotes and environment variables, " "for example:

    --message 'start in: ' $HOME" msgstr "" "摰蝔摨臬函堆撠勗雿隞賭誘銵銝剖臬其瑯\n" "瘀雿喳臭誑典瑕臬,靘憒:\n" "

    This list displays all processes that are currently running. You must " "select the process that you want KDbg to attach to. Use the Filter or " "PID edit box to reduce the number of entries in this list.

    The text in " "the Command column is usually, but not always, the command that was " "used to start the process. The PID column shows the process ID. The " "PPID column shows the process ID of the parent process. Additional " "columns show more information about the processes that is also available via " "the system's ps command.

    The list is not updated automatically. " "Use the Refresh button to update it.

    " msgstr "" "

    餈銝芸銵冽曄內鈭敶餈銵餈蝔,雿敺隞銝剝拐銝芯誑餈亥霂,雿輻餈皛文" "餈蝔ID臭誑撠敶∠

    賭誘銝剔摮撣豢荔雿撟嗡" "荔臬刻蝔賭誘PID曄內鈭餈蝔IDPPID曄內嗉蝔PID. " "憸憭曄內鈭餈銝芾蝔游靽⊥胯餈銝芸銵典僎銝隡芸冽湔堆霂瑞桐誑" "湔啜" #. i18n: file: procattachbase.ui:66 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:163 msgid "Command" msgstr "賭誘" #. i18n: file: procattachbase.ui:71 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:166 msgid "PID" msgstr "PID" #. i18n: file: procattachbase.ui:76 #. i18n: ectx: property (text), widget (QTreeWidget, processList) #: rc.cpp:169 msgid "PPID" msgstr "PPID" #. i18n: file: procattachbase.ui:92 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonRefresh) #: rc.cpp:172 msgid "This button updates the list of processes." msgstr "餈銝芣格湔啗銝芾蝔銵" #. i18n: file: procattachbase.ui:95 #. i18n: ectx: property (text), widget (QPushButton, buttonRefresh) #: rc.cpp:175 msgid "&Refresh" msgstr "瑟" #~ msgid "F1" #~ msgstr "F1" #~ msgid "..." #~ msgstr "..." #~ msgid "Clear filter" #~ msgstr "皜方皛" #~ msgid "" #~ "Use this button to clear the filter text so that all processes are " #~ "displayed." #~ msgstr "刻銝芣格交方皛斗穿餈瑕停臭誑曄內餈蝔" #~ msgid "" #~ "You must select a process from the list. Then click the OK button " #~ "to attach to that process." #~ msgstr "" #~ "雿敹憿颱銝Y銵其葉拐銝芾蝔,嗅孵蝖桀株仿銝芾蝔" #~ msgid "Source" #~ msgstr "皞隞" #~ msgid "&Find" #~ msgstr "交"

    --message 'start in: ' $HOME" #. i18n: file: pgmargsbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertFile) #: rc.cpp:79 msgid "" "Browse for a file; the full path name will be inserted at the current cursor " "location in the edit box above." msgstr "瘚閫銝銝芣隞,摰摰渡頝臬撠隡亙啣刻" #. i18n: file: pgmargsbase.ui:59 #. i18n: ectx: property (text), widget (QPushButton, insertFile) #: rc.cpp:82 msgid "Insert &file name..." msgstr "交隞嗅" #. i18n: file: pgmargsbase.ui:62 #. i18n: ectx: property (shortcut), widget (QPushButton, insertFile) #: rc.cpp:85 msgid "Alt+F" msgstr "Alt+F" #. i18n: file: pgmargsbase.ui:69 #. i18n: ectx: property (whatsThis), widget (QPushButton, insertDir) #: rc.cpp:88 msgid "" "Browse for a directory; the full path name will be inserted at the current " "cursor location in the edit box above." msgstr "瘚閫銝銝芰桀摰摰渡頝臬撠隡鋡急亙啣雿蝵" #. i18n: file: pgmargsbase.ui:72 #. i18n: ectx: property (text), widget (QPushButton, insertDir) #: rc.cpp:91 msgid "Insert &directory name..." msgstr "亦桀" #. i18n: file: pgmargsbase.ui:75 #. i18n: ectx: property (shortcut), widget (QPushButton, insertDir) #. i18n: file: pgmargsbase.ui:265 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonDelete) #: rc.cpp:94 rc.cpp:145 msgid "Alt+D" msgstr "Alt+D" #. i18n: file: pgmargsbase.ui:119 #. i18n: ectx: attribute (title), widget (QWidget, wdPage) #: rc.cpp:97 msgid "&Working Directory" msgstr "撌乩桀" #. i18n: file: pgmargsbase.ui:127 #. i18n: ectx: property (whatsThis), widget (QLineEdit, wdEdit) #: rc.cpp:100 msgid "Specify here the initial working directory where the program is run." msgstr "摰蝔摨餈銵憪桀" #. i18n: file: pgmargsbase.ui:136 #. i18n: ectx: property (whatsThis), widget (QPushButton, wdBrowse) #: rc.cpp:103 msgid "Browse for the initial working directory where the program is run." msgstr "瘚閫蝔摨餈銵憪撌乩桀" #. i18n: file: pgmargsbase.ui:139 #. i18n: ectx: property (text), widget (QPushButton, wdBrowse) #: rc.cpp:106 msgid "&Browse..." msgstr "瘚閫" #. i18n: file: pgmargsbase.ui:142 #. i18n: ectx: property (shortcut), widget (QPushButton, wdBrowse) #: rc.cpp:109 msgid "Alt+B" msgstr "Alt+B" #. i18n: file: pgmargsbase.ui:186 #. i18n: ectx: attribute (title), widget (QWidget, envPage) #: rc.cpp:112 msgid "&Environment" msgstr "臬" #. i18n: file: pgmargsbase.ui:196 #. i18n: ectx: property (text), widget (QLabel, envLabel) #: rc.cpp:115 msgid "Environment variables (NAME=value):" msgstr "臬(=)嚗" #. i18n: file: pgmargsbase.ui:209 #. i18n: ectx: property (whatsThis), widget (QLineEdit, envVar) #: rc.cpp:118 msgid "" "To add a new environment variable or to modify one, specify it here in the " "form NAME=value and click Modify." msgstr "" "瘛餃銝銝芰臬靽格孵歇嚗刻銝芸耦撘餅摰嚗\n" "=嚗嗅孵靽格" #. i18n: file: pgmargsbase.ui:216 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, envList) #: rc.cpp:121 msgid "" "Environment variables that are set in addition to those that are " "inherited are listed in this table. To add new environment variables, " "specify them as NAME=value in the edit box above and click " "Modify. To modify a value, select it in this list and click " "Modify. To delete an environment variable, select it in this list and " "click Delete." msgstr "" "臬霈曄蔭嚗瘛餃啗”潔葉嚗隞=靽格銝銝" "潘隞銵其葉抬嗅孵靽格" #. i18n: file: pgmargsbase.ui:229 #. i18n: ectx: property (text), widget (QTreeWidget, envList) #: rc.cpp:124 msgid "Name" msgstr "蝘" #. i18n: file: pgmargsbase.ui:246 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonModify) #: rc.cpp:130 msgid "" "Enters the environment variable that is currently specified in the edit box " "into the list. If the named variable is already in the list, it receives a " "new value; otherwise, a new entry is created." msgstr "颲亦臬潘憒摰摮典銵其葉嚗靽格嫣嚗銋撱箔" #. i18n: file: pgmargsbase.ui:249 #. i18n: ectx: property (text), widget (QPushButton, buttonModify) #: rc.cpp:133 msgid "&Modify" msgstr "" #. i18n: file: pgmargsbase.ui:252 #. i18n: ectx: property (shortcut), widget (QPushButton, buttonModify) #: rc.cpp:136 msgid "Alt+M" msgstr "Alt+M" #. i18n: file: pgmargsbase.ui:259 #. i18n: ectx: property (whatsThis), widget (QPushButton, buttonDelete) #: rc.cpp:139 msgid "" "Deletes the selected environment variable from the list. This cannot be used " "to delete environment variables that are inherited." msgstr "隞銵其葉日拍臬,餈銝賜冽亙日鈭蝏扳輻臬" #. i18n: file: pgmargsbase.ui:262 #. i18n: ectx: property (text), widget (QPushButton, buttonDelete) #: rc.cpp:142 msgid "&Delete" msgstr "" #. i18n: file: pgmargsbase.ui:293 #. i18n: ectx: attribute (title), widget (QWidget, xsldbgOptionsPage) #: rc.cpp:148 msgid "&xsldbg Options" msgstr "xsldbg憿" #. i18n: file: procattachbase.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ProcAttachBase) #: rc.cpp:151 msgid "Attach to Process" msgstr "餈亙啗蝔" #. i18n: file: procattachbase.ui:25 #. i18n: ectx: property (text), widget (QLabel, filterLabel) #: rc.cpp:154 msgid "&Filter or PID:" msgstr "餈皛斗祆PID" #. i18n: file: procattachbase.ui:38 #. i18n: ectx: property (whatsThis), widget (KLineEdit, filterEdit) #: rc.cpp:157 msgid "" "Type the name of the process or its process ID (PID) here to reduce the " "number of entries in the list." msgstr "刻颲亥蝔摮ID隞亙撠銵其葉餈蝔" #. i18n: file: procattachbase.ui:56 #. i18n: ectx: property (whatsThis), widget (QTreeWidget, processList) #: rc.cpp:160 msgid "" "