认识我的
$ uname -a
Linux hostmachine 4.1.2-2-ARCH #1 SMP PREEMPT Wed Jul 15 08:30:32 UTC 2015 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我正在尝试学习如何使用GDB来调试C程序.我认为如果我可以使用GDB找出导致段错误的错误,那将是特别优秀的.我有一个小程序,我作为K&R练习1-13的解决方案编写,给定一个特定大小的输入字符串,它将生成一个段错误:
$ ~/learning_c/KR_exercises/chapter_1/1.13.x`
Run Code Online (Sandbox Code Playgroud)
- 我提供了stdin的字符串,并且......--
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
根据Arch wiki的说法,"Systemd的默认行为是为所有进程生成核心转储/var/lib/systemd/coredump/."
Okie doke:
$ls /var/lib/systemd/coredump/core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时:
$ gdb -q ~/learning_c/KR_exercises/chapter_1/1.13.x /var/lib/systemd/coredump/core.1\\x2e13\\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4
Run Code Online (Sandbox Code Playgroud)
我明白了:
Reading symbols from /home/dean/learning_c/KR_exercises/chapter_1/1.13.x...done.
"/var/lib/systemd/coredump/core.1\x2e13\x2ex.1000.0da6be3a2b4647c8befe14e0e73af848.1719.1438627150000000.lz4" is not a core dump: File format not recognized
Run Code Online (Sandbox Code Playgroud)
试图通过在GDB连接过程中生成核心转储为这里详述不仅使我的终端仿真器开始捕获控制字符(^D,^C以及^Z将在仿真器连接后GDB无法正常工作),如果段错误是否附着GDB后存在的它不是在shell中报告.
帮助我理解,堆栈溢出的仁慈和仁慈的领主!
附录:
我已经解决了这个特殊问题,主要归功于WhozCraig,他建议GDB在强制馈送lz4压缩核心文件时表现得如此.如果克雷格会如此善良地发布一个类似的解决方案的解决方案,我会很乐意给他那个大的复选标记.
最简单的解决方案是通过一个以coredumpctl崩溃程序的PID 命名的子程序启动gdb ,a la
$coredumpctl gdb *PID HERE* …
我为本书第 8.3 节中的第三个建议练习编写了一个可行的解决方案,但有些行为违背了我的直觉。具体来说,我似乎能够改变一个看起来被实例化为不可变的向量。
我已经包含了我认为相关的代码部分,省略了不Vec与HashMap.
我在代码块之后进行了一些猜测,但我确实可以对实际发生的情况进行更可靠的解释。
// Start by declaring a new HashMap. This is where the mystery begins for me.
let mut departments: HashMap<String, Vec<String>> = HashMap::new();
// This code deals with getting user input from stdin and has been elided
// ...
// Match the first string slice
match args[0] {
// Add an employee to a department in the HashMap
"add" => {
// POINT OF INTEREST 1
// Adding a department that …Run Code Online (Sandbox Code Playgroud) 最近对Haskell感到好奇,我开始做一些阅读. Integer我在想我的想法.
当我们说a Integer可以任意大时,这是否意味着我认为它意味着什么(即a的大小Integer不受OS的地址宽度限制)?
假设我有足够的RAM可用于存放具有十亿个值的数字.Haskell能够使用这个数字吗?
任何人都可以向我描述一下有什么可能吗?
我有两个功能 -
partialSubtractionWith5 :: (Num a) => a -> a
partialSubtractionWith5 = (subtract 5)
Run Code Online (Sandbox Code Playgroud)
和
partialSubtractionWith5' :: (Num a) => a-> a
partialSubtractionwith5' = (`subtract` 5)
Run Code Online (Sandbox Code Playgroud)
调用partialSubtractionWith5 x返回相当于x - 5,而调用partialSubtractionWith5' x返回相当于5 - x.
在Learn You a Haskell中,Lipovača定义了以下功能 -
isUpperAlphanum :: Char -> Bool
isUpperAlphanum = (`elem` ['A'..'B'])
Run Code Online (Sandbox Code Playgroud)
其中(基于我的实验subtract)我会认为当被称为时会表现得如此isUpperAlphanum 'some char':
Prelude> ['A'..'B'] `elem` 'some char'
False
Run Code Online (Sandbox Code Playgroud)
显然,事实并非如此.但为什么?有没有办法预测哪些函数在部分应用时会反转它们的参数?
haskell ×2
biginteger ×1
c ×1
collections ×1
core ×1
currying ×1
gdb ×1
hashmap ×1
linux ×1
mutability ×1
rust ×1
syntax ×1