gpt4 book ai didi

c++ - 跨 git 提交调试可执行文件

转载 作者:行者123 更新时间:2023-11-30 03:23:23 26 4
gpt4 key购买 nike

有没有人想出一个好的解决方案来使用 git 调试不同代码版本之间的可执行文件?基本上,我希望能够在我最近的一组提交和一组较早的提交之间生成并排可执行文件,并跟踪相关代码以进行处理,而不会在提交之间跳转时覆盖所有内容.

目前我这样做的方法是制作/编译当前代码并重命名可执行文件和我试图在调试器中分析的任何代码(在我的例子中是 gdb)。现在,对于旧代码,我喜欢在检查旧提交之前检查一个新分支,因为我很偏执,它会构建 reflog 以提供额外的安全性和检查点(我知道这不是真的必要)。我 checkout 旧代码并在旧提交上运行 make 文件。现在我有了可以与 gdb 一起运行的并行可执行文件。不过这有点乏味,特别是如果一些头文件/文件发生了变化(我喜欢分解我的代码),而且如果我现在想进行更改并重新编译(我有大量的引用/包含,我基本上只是必须重新开始该过程)。谁有更好的方法?

最佳答案

我最近在尝试调试/升级需要正确安装在系统上的库(使用make install)并在上一个稳定版本和开发版本之间跳转时遇到了类似的问题。

从 2.6.0 版开始(大约三年后),您现在可以使用

git worktree

它基本上使您能够将任何目录、任何地方变成官方 git 本地存储库的附件。它通过在其顶层填充一个 .git 文本文件(而不是常规子目录)来实现,其中包含指向原始文件的信息。在存储库端,此附件被声明为如此,并创建了一个新分支。

因此,您现在可以同时对两个不同的修订执行 git checkout(每个工作目录一个)。您可以根据需要添加任意数量的附件。当你完成后,简单地删除所有无用的附件,然后调用 git worktree prune 让它消除所有不再存在的东西(你可以使用 git worktree lock 来防止一些如果他们的附件目录有时不可用,例如使用可移动设备,则删除其中的一部分)。这将使您可以同时编译同一应用程序的两个不同版本。

但是,如果您需要检索软件的特定修订版,但在编译之前无法分辨是哪一个,则可能需要使用

git bisect run

…相反,它会自动调用一个脚本来判断修订是好是坏。当编译相当长并且整个搜索可能跨越数天时,它很有用。

这是 documentation page 的链接与 git worktree 相关。

关于c++ - 跨 git 提交调试可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com