[WIP] Improve clarity and structure of experiment quality report #49
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress.
Original prompt
实验质量改进报告
1. 文档/指导书问题
高频痛点汇总
R_X86_64_64、R_X86_64_PC32等类型的计算公式、addend值的处理、是否需要pushback或直接赋值等细节说明不足。program)中必须清空relocs和symbols,导致许多学生被长时间卡住。readfle等工具,但使用方法、示例、常见错误分析不够详细。学生普遍反映调试困难,不知如何定位问题。ld.cpp中的函数、fle.hpp中的数据结构关联性弱,学生不知道代码该写在哪里,如何利用现有结构。.cpp)到目标文件(.fle)再到可执行文件(program)的完整示例,特别是重定位计算、符号解析的具体案例。改进建议
program必须清空relocs和symbols。.text.startup,.rodata.str)。readfle、disasm、std::cerr输出日志的详细使用示例。return code ***)的可能原因和排查步骤。build/目录下的program文件进行对比调试。ld.cpp的函数注释中,明确引用对应的文档章节和任务编号,增强指导的针对性。2. 工具/环境问题
高频痛点汇总
disasm工具在任务六之前几乎无用。报错信息过于简略(如仅提示return code),难以定位错误。缺乏像断点、单步调试这样的直观手段。11-bss-link)通过率低,且错误信息奇怪(SIGSEGV)。PHF::R | PHF::X的写法在C++枚举类中不合法,需要类型转换。FLESection等结构体成员设计(如缺少name)给使用带来不便。改进建议
disasm工具,使其能解析任务1-5生成的.load段内容。std::cerr输出关键数据结构进行日志调试的方法。11-bss-link等疑难测试点。README.md开头明确列出所有依赖及准确版本(如Python 3.12+)。rich、tomli等Python依赖写入requirements.txt。PHF枚举类的使用方式,或提供合法的操作示例。考虑完善FLESection等结构体的成员,使其更易用。3. 难度/设计合理性
高频痛点汇总
.load段,而任务六要求分离为四个段(.text,.rodata,.data,.bss),导致学生几乎需要完全重写或大幅重构前期代码,造成极大的挫折感和时间浪费。改进建议
.text,.rodata,.data,.bss)。任务六可以调整为处理更高级的特性(如静态库、共享库简化版,或更复杂的内存布局)。ld.cpp中为每个任务提供更丰富的函数框架和注释,特别是任务二的入口函数。明确每个步骤需要操作的数据结构。4. 其他建议
汇总
program文件,用于对比调试。fle.hpp、fle.cpp中的关键数据结构(FLEObject,Symbol,Relocation)和函数提供更详细的中文注释,解释其字段含义和相互关系。FLE开头)。改进建议
program文件(JSON格式),放在reference/目录下,供学生调试时参考。fle.hpp和fle.cpp,解释核心数据结构的设计意图和关联。报告总结:本次实验的核心问题集中在任务设计的结构性矛盾(尤其是任务六)、关键文档细节的缺失以及调试支持的薄弱。改进应优先解决任务顺序重构、补充明确的关键实现规则、并提供强大的调试指引,以降低不必要的认知负荷和调试成本,使学生能将精力更多集中于理解链接器原理本身。
附录:原始反馈记录
【学生 linklab-2024-ApiecePHweiweixu】:
实验难度偏难,花了readme预计时间还多两天
框架可以给的再全面一点
【学生 linklab-2024-gatzby-git】:
实验文档中关于符号表遍历和链接器实现的描述不够清晰,导致实现时对符号类型判断和段合并的具体规则理解困难。
初始代码将所有段合并到.load段并设置RWX权限,这种简化处理与真实链接器的段分离和权限设置不符,可能导致后续实验理解偏差。
实现符号冲突检测时,对“强符号优先原则”和“跨文件同名符号解析”的具体规则缺乏明确说明,增加了调试难度。
处理64位地址重定位时,实验文档未明确说明R_X86_64_64类型重定位的具体计算方式和可能存在的整数溢出问题。
分离代码和数据段时,实验文档未详细说明如何根据段前缀进行匹配和设置不同权限,导致实现时对齐和权限设置容易出错。
【学生 linklab-2024-greatganyuandsth】:
实验框架代码过少,建议在ld.cpp中为四个步骤都提供框架代码。
部分情况下,最后一个测试用例出现异常,满分仅为3.5分,导致总分只有113.5分。
【学生 linklab-2024-whisperLyx】:
实验文档可以增加更多实际案例,特别是重定位计算的具体示例。
实验文档可以在前面部分描述调试技巧和常见错误处理方法,可能会更清晰易懂。
任务二的文档部分结构不是特别清晰,在实现这部分时遇到了困难,希望能补充完善文档的任务二部分。
框架代码如果再有一个
fle.hpp的解释文档可能会更好。【学生 linklab-2024-TheSkyFuker54188】:
实验初期较难入手,没有明确的思路指引,接口繁杂,单一方向的尝试容易陷入死胡同。
报告的要求不够明确,写作时需要反复推敲才能确定内容是否符合预期。
建议可以提供一些参考实现的框架(可以隐去核心逻辑),帮助学生更快理解要求。
【学生 linklab-2024-sqyhj】:
实验文档在一些细节(例如符号冲突处理的具体实现)上可以进一步补充更多的解释
框架代码在某些部分(如符号表的合并...
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.