项目的新手,有多个源文件用于编译,一些"可能"是动态库,在运行时加载.使用"GDB"调试可执行文件时,是否有命令列出用于构建可执行文件的所有源文件(静态).一旦我拥有所有的源文件,我就很容易设置断点,列出函数等.我找不到在GDB中执行它的命令(我确定应该有一个).在DDD(基于gui的gdb)中,有一个Menu:File-> List,它列出了所有使用的源文件和用于构建可执行文件的静态库.不幸的是,对于基于命令行的调试器(GDB),我找不到等效的命令.
我正在使用vim在linux上开发c并使用ddd进行调试.但是我发现ddd在这台机器上滚动时性能很差,所以它的使用有时非常令人沮丧.
我喜欢ddd与gdb命令集非常接近的方式,因为这意味着当我选择时我可以自由地使用gdb命令,但是使用gdb本身不是一个选项,因为它不能很好地显示源代码.
任何人都可以建议一个像ddd的体面替代品?我不是在寻找一个IDE,只是一个相当好的gui外观gdb是自由软件.
之前已经问过问题,我看到ddd新闻组的错误报告,但没有一个建议的解决方案适合我.
它出现了,但当你尝试做一些事情,比如打开一个文件时,它会挂起"等待GDB准备好"的消息.
其他人报告的一个关键事实是,它对某些用户而不是其他用户都有效.我对环境进行了比较,但未发现任何显着差异.任何建议将非常感谢.
是否可以在某处下载本地(非cygwin)版本的DDD?
我可以使用调试Python代码ddd -pydb prog.py
.所有python命令行参数也可以在之后传递prog.py
.在我的例子中,许多类已经在C++中实现,并且使用了python boost-python
.我希望我可以一起调试python代码和C++.例如,我想设置这样的断点:
break my_python.py:123
break my_cpp.cpp:456
cont
Run Code Online (Sandbox Code Playgroud)
当然我在用调试选项编译c ++代码后尝试它,但调试器不会跨越boost边界.有什么办法吗?
编辑:我看到http://www.boost.org/doc/libs/1_61_0/libs/python/doc/html/faq/how_do_i_debug_my_python_extensi.html.我跟着它,我可以为python和C++进行调试.但我最好还是想进行可视化调试,DDD
但我不知道怎么在里面给'target exec python'命令DDD
.如果不是(只是gdb
在链接中使用)我应该能够调试Python脚本,而不是交互式地给出链接中的python命令.
例:
# ddd --debugger /usr/bin/bashdb <sript-name> (on remote host)
Run Code Online (Sandbox Code Playgroud) std::unique_ptr
很好,但我发现在DDD或gdb中调试时不太舒服.
我正在使用作为gcc一部分的gdb漂亮打印机(例如/usr/share/gcc-4.8.2/python/libstdcxx/v6/printers.py
).这是可读性的一大胜利,例如:
$ print pTest
std::unique_ptr<MyType> containing 0x2cef0a0
Run Code Online (Sandbox Code Playgroud)
但是,取消引用指针不起作用:
$ print *pTest
Could not find operator*.
Run Code Online (Sandbox Code Playgroud)
当我需要访问该值时,我必须手动复制指针并将其强制转换为正确的类型,例如:
print *((MyType*) 0x2cef0a0)
Run Code Online (Sandbox Code Playgroud)
如果进程仍在运行,那么这个版本可以工作(仍然很难但更好):
print *pTest.get() // will not work if analyzing a core dump
Run Code Online (Sandbox Code Playgroud)
Display *pTest
在DDD中直接的方法也不起作用.它只会导致以下错误:
<error: Could not find operator*.>
Run Code Online (Sandbox Code Playgroud)
有没有办法在DDD中使用unique_ptr调试C++ 11代码(不像我使用繁琐的解决方法那样打破工作流程)?
我不怕使用gdb命令,但DDD集成将是一个加号.例如,通过双击它们来跟踪数据结构中的指针通常比键入更快.
我已经尝试放弃漂亮的打印机,但它也不是最佳选择.我能想到的最好的是以下内容:
print pTest._M_t->_M_head_impl
Run Code Online (Sandbox Code Playgroud) 如果按照Cython 调试文档中指定的那样使用 python2.7 配置它,则在从源代码构建 gdb 后,可以使用 gdb 调试 Python3/Cython 项目。
但是,文档中的示例:
python-gdb
实际上链接到python2
......那么它是如何工作的?)source.pyx
和myfile.pyx
)此外,它:
main
函数驻留在 .pyx 中(但我的函数驻留在常规main.py
)main.py
和cythonCode.pyx
do )有人可以解释一下(最好有工作示例)如何在涉及刚才提到的所有 3 点的情况下调试 Python3/Cython 项目吗?
目前看来我实际上可以按照这篇Cython wiki 文章让 DDD 工作,但后来我发现这是“旧”的做法,它指的是我也链接到的当前调试文档。然而,目前我还不清楚“新”方法如何发挥作用(旧方法对我来说更有意义),而且让它发挥作用似乎更复杂。
在使用DDD的许多(有时是淹没)调试会话期间,我偶然发现了循环.然后我一直按下它以通过它,如果有很多次迭代,我只需在它之后设置一个断点,然后按"继续".有没有其他方法可以通过循环?
我尝试使用以下命令安装并运行ddd:
brew install libtool
brew link lesstif
brew install ddd
Run Code Online (Sandbox Code Playgroud)
并尝试运行ddd时收到以下错误消息:
cd@new-host:~$ ddd
dyld: Library not loaded: /opt/X11/lib/libSM.6.dylib
Referenced from: /usr/local/lib/libXm.2.dylib
Reason: image not found
Trace/BPT trap: 5
Run Code Online (Sandbox Code Playgroud)
以下是brew配置的输出:
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: 7a427a6528c0aa123a43d3adf1c5944ab622c27e
Last commit: 2 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: dual-core 64-bit penryn
OS X: 10.7.5-i386
Xcode: 4.6.3
CLT: 4.6.0.0.1.1365549073
LLVM-GCC: build 2336
Clang: 4.2 build 425
X11: 2.6.5 => /usr/X11
System Ruby: 1.8.7-358
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)
以下是我从Brew医生的输出:
Warning: Some …
Run Code Online (Sandbox Code Playgroud)