我的公司在自定义框架中使用 C++。由于某些原因,一些 C++ 代码驻留在扩展名为
.foo
的文件中。支持在这些文件上使用 gdb(我认为需要比我更聪明的人做一些工作,但它已经完成了) - 我可以使用 gdb 并且它可以很好地处理这些文件。
现在我喜欢使用gdb tui模式。我知道 tui 可以为 C++ 代码着色。事实上,在我们的项目中,只要代码位于 .h 文件中,它就会对 C++ 代码进行着色,但不会对
.foo
文件中的代码进行着色。
我如何告诉 gdb
.foo
文件是 C++ 代码并请相应地着色?
我看到了https://sourceware.org/gdb/current/onlinedocs/gdb.html/Output-Styling.html。我尝试了以下方法:
(gdb) show style sources
Source code styling is enabled.
(gdb) show style tui-current-position
Undefined show style command: "tui-current-position". Try "help show style".
我有 gdb 11.2-1
GDB 11.2 可以在 GNU 源代码突出显示库的支持下构建。如果您(或您的团队)修改了 GDB,那么您也必须构建 GDB。如果您在构建 GDB 之前安装了 GNU Source Highlight 开发包,那么 GDB 应该会选择它。
这样做的好处是 GNU 源代码突出显示,根据调试信息中声明的语言突出显示源文件,因此您应该自动获得 C++ 样式。
如果上述不可能,那么正如 ssbssa 在评论中所说,您必须使用 Python Pygments 库进行样式设置。可以更新 Pygments,以便它知道
*.foo
文件应突出显示为 C++。
要做到这一点,你必须首先找到你的Python Pygments安装,并找到文件
pygments/lexers/c_cpp.py
,在这个文件中你会发现一些类似于这样的代码:
filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++',
'*.cc', '*.hh', '*.cxx', '*.hxx',
'*.C', '*.H', '*.cp', '*.CPP']
通过在末尾添加
, '*.foo'
来更新此内容,这样您就拥有:
filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++',
'*.cc', '*.hh', '*.cxx', '*.hxx',
'*.C', '*.H', '*.cp', '*.CPP', '*.foo']
现在,在
c_cpp.py
文件旁边,您应该找到名为 _mapping.py
的文件。该文件缓存了词法分析器映射的扩展名,需要重新生成。通过运行 _mapping.py
文件来完成此操作,例如 python3 ./_mapping.py
。
完成后,重新启动 GDB,希望
*.foo
文件现在应该突出显示为 C++。
如果您因权限原因无法编辑词法分析器文件,请下载 Pygments 包并将其安装到您的主目录中,然后设置
PYTHONPATH
以便 GDB 在系统安装之前找到您本地安装的库,您就可以然后根据需要自由编辑本地安装。